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.
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -2
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +5 -5
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -5
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +103 -7
- package/dist/types/data-structures/binary-tree/bst.d.ts +202 -39
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +86 -37
- package/dist/types/data-structures/binary-tree/tree-counter.d.ts +4 -5
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +7 -7
- package/dist/types/data-structures/graph/directed-graph.d.ts +126 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +160 -1
- package/dist/types/data-structures/hash/hash-map.d.ts +110 -27
- package/dist/types/data-structures/heap/heap.d.ts +107 -58
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +72 -404
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -5
- package/dist/types/data-structures/queue/deque.d.ts +95 -67
- package/dist/types/data-structures/queue/queue.d.ts +90 -34
- package/dist/types/data-structures/stack/stack.d.ts +58 -40
- package/dist/types/data-structures/trie/trie.d.ts +109 -47
- package/dist/types/interfaces/binary-tree.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/bst.d.ts +5 -5
- package/dist/umd/max-priority-queue-typed.js.map +1 -1
- package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/data-structures/binary-tree/avl-tree-counter.ts +1 -2
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +7 -8
- package/src/data-structures/binary-tree/avl-tree.ts +100 -7
- package/src/data-structures/binary-tree/binary-tree.ts +117 -7
- package/src/data-structures/binary-tree/bst.ts +431 -93
- package/src/data-structures/binary-tree/red-black-tree.ts +85 -37
- package/src/data-structures/binary-tree/tree-counter.ts +5 -7
- package/src/data-structures/binary-tree/tree-multi-map.ts +9 -10
- package/src/data-structures/graph/directed-graph.ts +126 -1
- package/src/data-structures/graph/undirected-graph.ts +160 -1
- package/src/data-structures/hash/hash-map.ts +110 -27
- package/src/data-structures/heap/heap.ts +107 -58
- package/src/data-structures/linked-list/doubly-linked-list.ts +72 -404
- package/src/data-structures/linked-list/singly-linked-list.ts +121 -5
- package/src/data-structures/queue/deque.ts +95 -67
- package/src/data-structures/queue/queue.ts +90 -34
- package/src/data-structures/stack/stack.ts +58 -40
- package/src/data-structures/trie/trie.ts +109 -47
- package/src/interfaces/binary-tree.ts +2 -0
- 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
|
-
* //
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
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
|
-
*
|
|
37
|
-
* console.log(
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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;
|