max-priority-queue-typed 2.4.5 → 2.5.1
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/README.md +63 -0
- package/dist/cjs/index.cjs +694 -119
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +693 -118
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +694 -119
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +693 -118
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/data-structures/base/index.d.ts +1 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
- package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
- package/dist/types/data-structures/base/linear-base.d.ts +3 -3
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
- package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
- package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
- package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
- package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
- package/dist/types/data-structures/heap/heap.d.ts +581 -99
- package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
- package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
- package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
- package/dist/types/data-structures/queue/deque.d.ts +593 -71
- package/dist/types/data-structures/queue/queue.d.ts +463 -42
- package/dist/types/data-structures/stack/stack.d.ts +384 -32
- package/dist/types/data-structures/trie/trie.d.ts +470 -48
- package/dist/types/interfaces/graph.d.ts +1 -1
- package/dist/types/types/common.d.ts +2 -2
- package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
- package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
- package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
- package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
- package/dist/types/types/utils/validate-type.d.ts +4 -4
- package/dist/umd/max-priority-queue-typed.js +691 -116
- package/dist/umd/max-priority-queue-typed.js.map +1 -1
- package/dist/umd/max-priority-queue-typed.min.js +1 -1
- package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/data-structures/base/index.ts +1 -0
- package/src/data-structures/base/iterable-element-base.ts +4 -5
- package/src/data-structures/base/iterable-entry-base.ts +8 -8
- package/src/data-structures/base/linear-base.ts +3 -3
- package/src/data-structures/binary-tree/avl-tree.ts +386 -51
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
- package/src/data-structures/binary-tree/binary-tree.ts +956 -81
- package/src/data-structures/binary-tree/bst.ts +840 -35
- package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
- package/src/data-structures/binary-tree/segment-tree.ts +498 -249
- package/src/data-structures/binary-tree/tree-map.ts +3784 -7
- package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
- package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
- package/src/data-structures/binary-tree/tree-set.ts +3531 -10
- package/src/data-structures/graph/abstract-graph.ts +4 -4
- package/src/data-structures/graph/directed-graph.ts +429 -47
- package/src/data-structures/graph/map-graph.ts +59 -1
- package/src/data-structures/graph/undirected-graph.ts +393 -59
- package/src/data-structures/hash/hash-map.ts +476 -92
- package/src/data-structures/heap/heap.ts +581 -99
- package/src/data-structures/heap/max-heap.ts +46 -0
- package/src/data-structures/heap/min-heap.ts +59 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
- package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
- package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
- package/src/data-structures/matrix/matrix.ts +584 -12
- package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
- package/src/data-structures/priority-queue/priority-queue.ts +60 -0
- package/src/data-structures/queue/deque.ts +592 -70
- package/src/data-structures/queue/queue.ts +463 -42
- package/src/data-structures/stack/stack.ts +384 -32
- package/src/data-structures/trie/trie.ts +470 -48
- package/src/interfaces/graph.ts +1 -1
- package/src/types/common.ts +2 -2
- package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
- package/src/types/data-structures/heap/heap.ts +1 -0
- package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
- package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
- package/src/types/utils/validate-type.ts +4 -4
|
@@ -23,6 +23,52 @@ import { ERR } from '../../common';
|
|
|
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 Prim's minimum-spanning tree algorithm, which use heaps to improve performance.
|
|
25
25
|
* @example
|
|
26
|
+
* // Find the K largest elements
|
|
27
|
+
* const data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
|
|
28
|
+
* const heap = new MaxHeap(data);
|
|
29
|
+
*
|
|
30
|
+
* // Extract top 3 elements
|
|
31
|
+
* const top3 = [];
|
|
32
|
+
* for (let i = 0; i < 3; i++) {
|
|
33
|
+
* top3.push(heap.poll());
|
|
34
|
+
* }
|
|
35
|
+
* console.log(top3); // [9, 6, 5];
|
|
36
|
+
* @example
|
|
37
|
+
* // Priority-based task processing
|
|
38
|
+
* interface Task {
|
|
39
|
+
* name: string;
|
|
40
|
+
* priority: number;
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* const heap = new MaxHeap<Task>([], {
|
|
44
|
+
* comparator: (a, b) => b.priority - a.priority
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* heap.add({ name: 'Low priority', priority: 1 });
|
|
48
|
+
* heap.add({ name: 'Critical fix', priority: 10 });
|
|
49
|
+
* heap.add({ name: 'Medium task', priority: 5 });
|
|
50
|
+
*
|
|
51
|
+
* // Highest priority first
|
|
52
|
+
* console.log(heap.poll()?.name); // 'Critical fix';
|
|
53
|
+
* console.log(heap.poll()?.name); // 'Medium task';
|
|
54
|
+
* console.log(heap.poll()?.name); // 'Low priority';
|
|
55
|
+
* @example
|
|
56
|
+
* // Real-time top score tracking
|
|
57
|
+
* const scores = new MaxHeap<number>();
|
|
58
|
+
*
|
|
59
|
+
* // Stream of scores coming in
|
|
60
|
+
* for (const score of [72, 85, 91, 68, 95, 78, 88]) {
|
|
61
|
+
* scores.add(score);
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* // Current highest score without removing
|
|
65
|
+
* console.log(scores.peek()); // 95;
|
|
66
|
+
* console.log(scores.size); // 7;
|
|
67
|
+
*
|
|
68
|
+
* // Remove top 2 scores
|
|
69
|
+
* console.log(scores.poll()); // 95;
|
|
70
|
+
* console.log(scores.poll()); // 91;
|
|
71
|
+
* console.log(scores.peek()); // 88;
|
|
26
72
|
*/
|
|
27
73
|
export class MaxHeap<E = any, R = any> extends Heap<E, R> {
|
|
28
74
|
/**
|
|
@@ -23,6 +23,65 @@ import { Heap } from './heap';
|
|
|
23
23
|
* 7. Efficient Sorting Algorithms: For example, heap sort. MinHeap sort uses the properties of a heap to sort elements.
|
|
24
24
|
* 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum spanning tree algorithm, which use heaps to improve performance.
|
|
25
25
|
* @example
|
|
26
|
+
* // Merge K sorted arrays
|
|
27
|
+
* const arrays = [
|
|
28
|
+
* [1, 4, 7],
|
|
29
|
+
* [2, 5, 8],
|
|
30
|
+
* [3, 6, 9]
|
|
31
|
+
* ];
|
|
32
|
+
*
|
|
33
|
+
* // Use min heap to merge: track (value, arrayIndex, elementIndex)
|
|
34
|
+
* const heap = new MinHeap<[number, number, number]>([], {
|
|
35
|
+
* comparator: (a, b) => a[0] - b[0]
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Initialize with first element of each array
|
|
39
|
+
* arrays.forEach((arr, i) => heap.add([arr[0], i, 0]));
|
|
40
|
+
*
|
|
41
|
+
* const merged: number[] = [];
|
|
42
|
+
* while (heap.size > 0) {
|
|
43
|
+
* const [val, arrIdx, elemIdx] = heap.poll()!;
|
|
44
|
+
* merged.push(val);
|
|
45
|
+
* if (elemIdx + 1 < arrays[arrIdx].length) {
|
|
46
|
+
* heap.add([arrays[arrIdx][elemIdx + 1], arrIdx, elemIdx + 1]);
|
|
47
|
+
* }
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
* console.log(merged); // [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
51
|
+
* @example
|
|
52
|
+
* // Dijkstra-style shortest distance tracking
|
|
53
|
+
* // Simulating distance updates: (distance, nodeId)
|
|
54
|
+
* const heap = new MinHeap<[number, string]>([], {
|
|
55
|
+
* comparator: (a, b) => a[0] - b[0]
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* heap.add([0, 'start']);
|
|
59
|
+
* heap.add([10, 'A']);
|
|
60
|
+
* heap.add([5, 'B']);
|
|
61
|
+
* heap.add([3, 'C']);
|
|
62
|
+
*
|
|
63
|
+
* // Process nearest node first
|
|
64
|
+
* console.log(heap.poll()); // [0, 'start'];
|
|
65
|
+
* console.log(heap.poll()); // [3, 'C'];
|
|
66
|
+
* console.log(heap.poll()); // [5, 'B'];
|
|
67
|
+
* console.log(heap.poll()); // [10, 'A'];
|
|
68
|
+
* @example
|
|
69
|
+
* // Running median with min heap (upper half)
|
|
70
|
+
* const upperHalf = new MinHeap<number>();
|
|
71
|
+
*
|
|
72
|
+
* // Add larger numbers to min heap
|
|
73
|
+
* for (const n of [5, 8, 3, 9, 1]) {
|
|
74
|
+
* upperHalf.add(n);
|
|
75
|
+
* }
|
|
76
|
+
*
|
|
77
|
+
* // Smallest of the upper half is always accessible
|
|
78
|
+
* console.log(upperHalf.peek()); // 1;
|
|
79
|
+
* console.log(upperHalf.size); // 5;
|
|
80
|
+
*
|
|
81
|
+
* // Remove smallest repeatedly
|
|
82
|
+
* console.log(upperHalf.poll()); // 1;
|
|
83
|
+
* console.log(upperHalf.poll()); // 3;
|
|
84
|
+
* console.log(upperHalf.peek()); // 5;
|
|
26
85
|
*/
|
|
27
86
|
export class MinHeap<E = any, R = any> extends Heap<E, R> {
|
|
28
87
|
/**
|