min-priority-queue-typed 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/cjs/index.cjs.map +1 -1
  2. package/dist/cjs-legacy/index.cjs.map +1 -1
  3. package/dist/esm/index.mjs.map +1 -1
  4. package/dist/esm-legacy/index.mjs.map +1 -1
  5. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -2
  6. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +5 -5
  7. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -5
  8. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +103 -7
  9. package/dist/types/data-structures/binary-tree/bst.d.ts +202 -39
  10. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +86 -37
  11. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +4 -5
  12. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +7 -7
  13. package/dist/types/data-structures/graph/directed-graph.d.ts +126 -1
  14. package/dist/types/data-structures/graph/undirected-graph.d.ts +160 -1
  15. package/dist/types/data-structures/hash/hash-map.d.ts +110 -27
  16. package/dist/types/data-structures/heap/heap.d.ts +107 -58
  17. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +72 -404
  18. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -5
  19. package/dist/types/data-structures/queue/deque.d.ts +95 -67
  20. package/dist/types/data-structures/queue/queue.d.ts +90 -34
  21. package/dist/types/data-structures/stack/stack.d.ts +58 -40
  22. package/dist/types/data-structures/trie/trie.d.ts +109 -47
  23. package/dist/types/interfaces/binary-tree.d.ts +1 -0
  24. package/dist/types/types/data-structures/binary-tree/bst.d.ts +5 -5
  25. package/dist/umd/max-priority-queue-typed.js.map +1 -1
  26. package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
  27. package/package.json +2 -2
  28. package/src/data-structures/binary-tree/avl-tree-counter.ts +1 -2
  29. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +7 -8
  30. package/src/data-structures/binary-tree/avl-tree.ts +100 -7
  31. package/src/data-structures/binary-tree/binary-tree.ts +117 -7
  32. package/src/data-structures/binary-tree/bst.ts +431 -93
  33. package/src/data-structures/binary-tree/red-black-tree.ts +85 -37
  34. package/src/data-structures/binary-tree/tree-counter.ts +5 -7
  35. package/src/data-structures/binary-tree/tree-multi-map.ts +9 -10
  36. package/src/data-structures/graph/directed-graph.ts +126 -1
  37. package/src/data-structures/graph/undirected-graph.ts +160 -1
  38. package/src/data-structures/hash/hash-map.ts +110 -27
  39. package/src/data-structures/heap/heap.ts +107 -58
  40. package/src/data-structures/linked-list/doubly-linked-list.ts +72 -404
  41. package/src/data-structures/linked-list/singly-linked-list.ts +121 -5
  42. package/src/data-structures/queue/deque.ts +95 -67
  43. package/src/data-structures/queue/queue.ts +90 -34
  44. package/src/data-structures/stack/stack.ts +58 -40
  45. package/src/data-structures/trie/trie.ts +109 -47
  46. package/src/interfaces/binary-tree.ts +2 -0
  47. package/src/types/data-structures/binary-tree/bst.ts +5 -5
@@ -23,21 +23,107 @@ import { IterableElementBase } from '../base';
23
23
  * 7. Efficient Sorting Algorithms: For example, heap sort. Heap sort uses the properties of a heap to sort elements.
24
24
  * 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prime's minimum-spanning tree algorithm, which use heaps to improve performance.
25
25
  * @example
26
- * // Use Heap to sort an array
27
- * function heapSort(arr: number[]): number[] {
28
- * const heap = new Heap<number>(arr, { comparator: (a, b) => a - b });
29
- * const sorted: number[] = [];
30
- * while (!heap.isEmpty()) {
31
- * sorted.push(heap.poll()!); // Poll minimum element
26
+ * // basic Heap creation and add operation
27
+ * // Create a min heap (default)
28
+ * const minHeap = new Heap([5, 3, 7, 1, 9, 2]);
29
+ *
30
+ * // Verify size
31
+ * console.log(minHeap.size); // 6;
32
+ *
33
+ * // Add new element
34
+ * minHeap.add(4);
35
+ * console.log(minHeap.size); // 7;
36
+ *
37
+ * // Min heap property: smallest element at root
38
+ * const min = minHeap.peek();
39
+ * console.log(min); // 1;
40
+ * @example
41
+ * // Heap with custom comparator (MaxHeap behavior)
42
+ * interface Task {
43
+ * id: number;
44
+ * priority: number;
45
+ * name: string;
46
+ * }
47
+ *
48
+ * // Custom comparator for max heap behavior (higher priority first)
49
+ * const tasks: Task[] = [
50
+ * { id: 1, priority: 5, name: 'Email' },
51
+ * { id: 2, priority: 3, name: 'Chat' },
52
+ * { id: 3, priority: 8, name: 'Alert' }
53
+ * ];
54
+ *
55
+ * const maxHeap = new Heap(tasks, {
56
+ * comparator: (a: Task, b: Task) => b.priority - a.priority
57
+ * });
58
+ *
59
+ * console.log(maxHeap.size); // 3;
60
+ *
61
+ * // Peek returns highest priority task
62
+ * const topTask = maxHeap.peek();
63
+ * console.log(topTask?.priority); // 8;
64
+ * console.log(topTask?.name); // 'Alert';
65
+ * @example
66
+ * // Heap for event processing with priority
67
+ * interface Event {
68
+ * id: number;
69
+ * type: 'critical' | 'warning' | 'info';
70
+ * timestamp: number;
71
+ * message: string;
72
+ * }
73
+ *
74
+ * // Custom priority: critical > warning > info
75
+ * const priorityMap = { critical: 3, warning: 2, info: 1 };
76
+ *
77
+ * const eventHeap = new Heap<Event>([], {
78
+ * comparator: (a: Event, b: Event) => {
79
+ * const priorityA = priorityMap[a.type];
80
+ * const priorityB = priorityMap[b.type];
81
+ * return priorityB - priorityA; // Higher priority first
82
+ * }
83
+ * });
84
+ *
85
+ * // Add events in random order
86
+ * eventHeap.add({ id: 1, type: 'info', timestamp: 100, message: 'User logged in' });
87
+ * eventHeap.add({ id: 2, type: 'critical', timestamp: 101, message: 'Server down' });
88
+ * eventHeap.add({ id: 3, type: 'warning', timestamp: 102, message: 'High memory' });
89
+ * eventHeap.add({ id: 4, type: 'info', timestamp: 103, message: 'Cache cleared' });
90
+ * eventHeap.add({ id: 5, type: 'critical', timestamp: 104, message: 'Database error' });
91
+ *
92
+ * console.log(eventHeap.size); // 5;
93
+ *
94
+ * // Process events by priority (critical first)
95
+ * const processedOrder: Event[] = [];
96
+ * while (eventHeap.size > 0) {
97
+ * const event = eventHeap.poll();
98
+ * if (event) {
99
+ * processedOrder.push(event);
32
100
  * }
33
- * return sorted;
34
101
  * }
35
102
  *
36
- * const array = [5, 3, 8, 4, 1, 2];
37
- * console.log(heapSort(array)); // [1, 2, 3, 4, 5, 8]
103
+ * // Verify critical events came first
104
+ * console.log(processedOrder[0].type); // 'critical';
105
+ * console.log(processedOrder[1].type); // 'critical';
106
+ * console.log(processedOrder[2].type); // 'warning';
107
+ * console.log(processedOrder[3].type); // 'info';
108
+ * console.log(processedOrder[4].type); // 'info';
109
+ *
110
+ * // Verify O(log n) operations
111
+ * const newHeap = new Heap<number>([5, 3, 7, 1]);
112
+ *
113
+ * // Add - O(log n)
114
+ * newHeap.add(2);
115
+ * console.log(newHeap.size); // 5;
116
+ *
117
+ * // Poll - O(log n)
118
+ * const removed = newHeap.poll();
119
+ * console.log(removed); // 1;
120
+ *
121
+ * // Peek - O(1)
122
+ * const top = newHeap.peek();
123
+ * console.log(top); // 2;
38
124
  * @example
39
125
  * // Use Heap to solve top k problems
40
- * function topKElements(arr: number[], k: number): number[] {
126
+ * function topKElements(arr: number[], k: number): number[] {
41
127
  * const heap = new Heap<number>([], { comparator: (a, b) => b - a }); // Max heap
42
128
  * arr.forEach(num => {
43
129
  * heap.add(num);
@@ -47,47 +133,10 @@ import { IterableElementBase } from '../base';
47
133
  * }
48
134
  *
49
135
  * const numbers = [10, 30, 20, 5, 15, 25];
50
- * console.log(topKElements(numbers, 3)); // [15, 10, 5]
51
- * @example
52
- * // Use Heap to merge sorted sequences
53
- * function mergeSortedSequences(sequences: number[][]): number[] {
54
- * const heap = new Heap<{ value: number; seqIndex: number; itemIndex: number }>([], {
55
- * comparator: (a, b) => a.value - b.value // Min heap
56
- * });
57
- *
58
- * // Initialize heap
59
- * sequences.forEach((seq, seqIndex) => {
60
- * if (seq.length) {
61
- * heap.add({ value: seq[0], seqIndex, itemIndex: 0 });
62
- * }
63
- * });
64
- *
65
- * const merged: number[] = [];
66
- * while (!heap.isEmpty()) {
67
- * const { value, seqIndex, itemIndex } = heap.poll()!;
68
- * merged.push(value);
69
- *
70
- * if (itemIndex + 1 < sequences[seqIndex].length) {
71
- * heap.add({
72
- * value: sequences[seqIndex][itemIndex + 1],
73
- * seqIndex,
74
- * itemIndex: itemIndex + 1
75
- * });
76
- * }
77
- * }
78
- *
79
- * return merged;
80
- * }
81
- *
82
- * const sequences = [
83
- * [1, 4, 7],
84
- * [2, 5, 8],
85
- * [3, 6, 9]
86
- * ];
87
- * console.log(mergeSortedSequences(sequences)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
136
+ * console.log(topKElements(numbers, 3)); // [15, 10, 5];
88
137
  * @example
89
138
  * // Use Heap to dynamically maintain the median
90
- * class MedianFinder {
139
+ * class MedianFinder {
91
140
  * private low: MaxHeap<number>; // Max heap, stores the smaller half
92
141
  * private high: MinHeap<number>; // Min heap, stores the larger half
93
142
  *
@@ -113,18 +162,18 @@ import { IterableElementBase } from '../base';
113
162
  *
114
163
  * const medianFinder = new MedianFinder();
115
164
  * medianFinder.addNum(10);
116
- * console.log(medianFinder.findMedian()); // 10
165
+ * console.log(medianFinder.findMedian()); // 10;
117
166
  * medianFinder.addNum(20);
118
- * console.log(medianFinder.findMedian()); // 15
167
+ * console.log(medianFinder.findMedian()); // 15;
119
168
  * medianFinder.addNum(30);
120
- * console.log(medianFinder.findMedian()); // 20
169
+ * console.log(medianFinder.findMedian()); // 20;
121
170
  * medianFinder.addNum(40);
122
- * console.log(medianFinder.findMedian()); // 25
171
+ * console.log(medianFinder.findMedian()); // 25;
123
172
  * medianFinder.addNum(50);
124
- * console.log(medianFinder.findMedian()); // 30
173
+ * console.log(medianFinder.findMedian()); // 30;
125
174
  * @example
126
175
  * // Use Heap for load balancing
127
- * function loadBalance(requests: number[], servers: number): number[] {
176
+ * function loadBalance(requests: number[], servers: number): number[] {
128
177
  * const serverHeap = new Heap<{ id: number; load: number }>([], { comparator: (a, b) => a.load - b.load }); // min heap
129
178
  * const serverLoads = new Array(servers).fill(0);
130
179
  *
@@ -143,10 +192,10 @@ import { IterableElementBase } from '../base';
143
192
  * }
144
193
  *
145
194
  * const requests = [5, 2, 8, 3, 7];
146
- * console.log(loadBalance(requests, 3)); // [12, 8, 5]
195
+ * console.log(loadBalance(requests, 3)); // [12, 8, 5];
147
196
  * @example
148
197
  * // Use Heap to schedule tasks
149
- * type Task = [string, number];
198
+ * type Task = [string, number];
150
199
  *
151
200
  * function scheduleTasks(tasks: Task[], machines: number): Map<number, Task[]> {
152
201
  * const machineHeap = new Heap<{ id: number; load: number }>([], { comparator: (a, b) => a.load - b.load }); // Min heap
@@ -186,7 +235,7 @@ import { IterableElementBase } from '../base';
186
235
  * ['Task3', 2],
187
236
  * ['Task5', 4]
188
237
  * ]);
189
- * console.log(scheduleTasks(tasks, 2)); // expectedMap
238
+ * console.log(scheduleTasks(tasks, 2)); // expectedMap;
190
239
  */
191
240
  export declare class Heap<E = any, R = any> extends IterableElementBase<E, R> {
192
241
  protected _equals: (a: E, b: E) => boolean;