data-structure-typed 2.5.2 → 2.6.0
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/.husky/pre-commit +3 -0
- package/CHANGELOG.md +3 -1
- package/MIGRATION.md +217 -0
- package/README.md +80 -8
- package/README_CN.md +569 -143
- package/SPECIFICATION.md +44 -14
- package/SPECIFICATION.zh-CN.md +44 -14
- package/dist/cjs/binary-tree.cjs +5841 -1678
- package/dist/cjs/graph.cjs +422 -14
- package/dist/cjs/hash.cjs +95 -7
- package/dist/cjs/heap.cjs +174 -16
- package/dist/cjs/index.cjs +7751 -2449
- package/dist/cjs/linked-list.cjs +443 -2
- package/dist/cjs/matrix.cjs +56 -0
- package/dist/cjs/priority-queue.cjs +172 -14
- package/dist/cjs/queue.cjs +435 -0
- package/dist/cjs/stack.cjs +103 -4
- package/dist/cjs/trie.cjs +106 -0
- package/dist/cjs-legacy/binary-tree.cjs +5933 -1772
- package/dist/cjs-legacy/graph.cjs +422 -14
- package/dist/cjs-legacy/hash.cjs +95 -7
- package/dist/cjs-legacy/heap.cjs +174 -16
- package/dist/cjs-legacy/index.cjs +8154 -2854
- package/dist/cjs-legacy/linked-list.cjs +443 -2
- package/dist/cjs-legacy/matrix.cjs +56 -0
- package/dist/cjs-legacy/priority-queue.cjs +172 -14
- package/dist/cjs-legacy/queue.cjs +435 -0
- package/dist/cjs-legacy/stack.cjs +103 -4
- package/dist/cjs-legacy/trie.cjs +106 -0
- package/dist/esm/binary-tree.mjs +5841 -1678
- package/dist/esm/graph.mjs +422 -14
- package/dist/esm/hash.mjs +95 -7
- package/dist/esm/heap.mjs +174 -16
- package/dist/esm/index.mjs +7751 -2449
- package/dist/esm/linked-list.mjs +443 -2
- package/dist/esm/matrix.mjs +56 -0
- package/dist/esm/priority-queue.mjs +172 -14
- package/dist/esm/queue.mjs +435 -0
- package/dist/esm/stack.mjs +103 -4
- package/dist/esm/trie.mjs +106 -0
- package/dist/esm-legacy/binary-tree.mjs +5933 -1772
- package/dist/esm-legacy/graph.mjs +422 -14
- package/dist/esm-legacy/hash.mjs +95 -7
- package/dist/esm-legacy/heap.mjs +174 -16
- package/dist/esm-legacy/index.mjs +8154 -2854
- package/dist/esm-legacy/linked-list.mjs +443 -2
- package/dist/esm-legacy/matrix.mjs +56 -0
- package/dist/esm-legacy/priority-queue.mjs +172 -14
- package/dist/esm-legacy/queue.mjs +435 -0
- package/dist/esm-legacy/stack.mjs +103 -4
- package/dist/esm-legacy/trie.mjs +106 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +17 -0
- package/dist/types/data-structures/base/linear-base.d.ts +6 -0
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +191 -15
- package/dist/types/data-structures/binary-tree/bst.d.ts +171 -3
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +1061 -167
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1232 -355
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +916 -194
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +1078 -141
- package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
- package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
- package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
- package/dist/types/data-structures/heap/heap.d.ts +140 -12
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +150 -2
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
- package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
- package/dist/types/data-structures/queue/deque.d.ts +171 -0
- package/dist/types/data-structures/queue/queue.d.ts +97 -0
- package/dist/types/data-structures/stack/stack.d.ts +72 -2
- package/dist/types/data-structures/trie/trie.d.ts +84 -0
- package/dist/types/interfaces/binary-tree.d.ts +2 -3
- package/dist/umd/data-structure-typed.js +7784 -2484
- package/dist/umd/data-structure-typed.min.js +4 -4
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +188 -200
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +62 -62
- package/docs-site-docusaurus/docs/api/classes/BST.md +183 -195
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +143 -155
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/Deque.md +99 -85
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +73 -73
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +100 -70
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +38 -38
- package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
- package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +23 -23
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +48 -48
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +52 -52
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +46 -42
- package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +74 -74
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +73 -73
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
- package/docs-site-docusaurus/docs/api/classes/Queue.md +111 -59
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +200 -212
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +75 -75
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +37 -37
- package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +107 -36
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +43 -43
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +106 -35
- package/docs-site-docusaurus/docs/api/classes/Trie.md +43 -43
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +72 -72
- package/docs-site-docusaurus/docs/guide/architecture.md +75 -7
- package/docs-site-docusaurus/docs/guide/concepts.md +53 -34
- package/docs-site-docusaurus/docs/guide/faq.md +53 -0
- package/docs-site-docusaurus/docs/guide/guides.md +8 -9
- package/docs-site-docusaurus/docs/guide/integrations.md +74 -177
- package/docs-site-docusaurus/docs/guide/overview.md +131 -17
- package/docs-site-docusaurus/src/pages/index.tsx +4 -0
- package/docs-site-docusaurus/typedoc.json +1 -0
- package/jest.integration.config.js +1 -2
- package/package.json +10 -7
- package/src/data-structures/base/iterable-element-base.ts +32 -0
- package/src/data-structures/base/linear-base.ts +11 -0
- package/src/data-structures/binary-tree/avl-tree.ts +88 -5
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +98 -0
- package/src/data-structures/binary-tree/binary-tree.ts +242 -81
- package/src/data-structures/binary-tree/bst.ts +173 -7
- package/src/data-structures/binary-tree/red-black-tree.ts +139 -15
- package/src/data-structures/binary-tree/segment-tree.ts +42 -0
- package/src/data-structures/binary-tree/tree-map.ts +948 -36
- package/src/data-structures/binary-tree/tree-multi-map.ts +893 -13
- package/src/data-structures/binary-tree/tree-multi-set.ts +761 -33
- package/src/data-structures/binary-tree/tree-set.ts +1260 -251
- package/src/data-structures/graph/directed-graph.ts +71 -1
- package/src/data-structures/graph/undirected-graph.ts +64 -1
- package/src/data-structures/hash/hash-map.ts +100 -12
- package/src/data-structures/heap/heap.ts +149 -19
- package/src/data-structures/linked-list/doubly-linked-list.ts +178 -2
- package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
- package/src/data-structures/linked-list/skip-linked-list.ts +126 -0
- package/src/data-structures/matrix/matrix.ts +56 -0
- package/src/data-structures/queue/deque.ts +187 -0
- package/src/data-structures/queue/queue.ts +109 -0
- package/src/data-structures/stack/stack.ts +75 -5
- package/src/data-structures/trie/trie.ts +84 -0
- package/src/interfaces/binary-tree.ts +1 -9
- package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
- package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
- package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
package/dist/cjs/hash.cjs
CHANGED
|
@@ -322,6 +322,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
322
322
|
|
|
323
323
|
|
|
324
324
|
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
325
332
|
|
|
326
333
|
|
|
327
334
|
|
|
@@ -367,6 +374,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
367
374
|
|
|
368
375
|
|
|
369
376
|
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
|
|
370
384
|
|
|
371
385
|
|
|
372
386
|
|
|
@@ -455,6 +469,20 @@ var HashMap = class extends IterableEntryBase {
|
|
|
455
469
|
|
|
456
470
|
|
|
457
471
|
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
|
|
458
486
|
|
|
459
487
|
|
|
460
488
|
|
|
@@ -498,7 +526,7 @@ var HashMap = class extends IterableEntryBase {
|
|
|
498
526
|
if (this.store[strKey] === void 0) this._size++;
|
|
499
527
|
this._store[strKey] = { key, value };
|
|
500
528
|
}
|
|
501
|
-
return
|
|
529
|
+
return this;
|
|
502
530
|
}
|
|
503
531
|
/**
|
|
504
532
|
* Insert many entries from an iterable.
|
|
@@ -530,6 +558,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
530
558
|
|
|
531
559
|
|
|
532
560
|
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
|
|
533
568
|
|
|
534
569
|
|
|
535
570
|
|
|
@@ -550,7 +585,11 @@ var HashMap = class extends IterableEntryBase {
|
|
|
550
585
|
let key, value;
|
|
551
586
|
if (this.isEntry(rawEle)) [key, value] = rawEle;
|
|
552
587
|
else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
|
|
553
|
-
if (key !== void 0 && value !== void 0)
|
|
588
|
+
if (key !== void 0 && value !== void 0) {
|
|
589
|
+
const sizeBefore = this._size;
|
|
590
|
+
this.set(key, value);
|
|
591
|
+
results.push(sizeBefore < this._size);
|
|
592
|
+
}
|
|
554
593
|
}
|
|
555
594
|
return results;
|
|
556
595
|
}
|
|
@@ -586,6 +625,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
586
625
|
|
|
587
626
|
|
|
588
627
|
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
|
|
589
635
|
|
|
590
636
|
|
|
591
637
|
|
|
@@ -653,6 +699,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
653
699
|
|
|
654
700
|
|
|
655
701
|
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
656
709
|
|
|
657
710
|
|
|
658
711
|
|
|
@@ -705,6 +758,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
705
758
|
|
|
706
759
|
|
|
707
760
|
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
|
|
708
768
|
|
|
709
769
|
|
|
710
770
|
|
|
@@ -775,6 +835,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
775
835
|
|
|
776
836
|
|
|
777
837
|
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
|
|
778
845
|
|
|
779
846
|
|
|
780
847
|
|
|
@@ -828,6 +895,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
828
895
|
|
|
829
896
|
|
|
830
897
|
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
831
905
|
|
|
832
906
|
|
|
833
907
|
|
|
@@ -883,6 +957,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
883
957
|
|
|
884
958
|
|
|
885
959
|
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
|
|
886
967
|
|
|
887
968
|
|
|
888
969
|
|
|
@@ -1096,7 +1177,7 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1096
1177
|
* @remarks Time O(1), Space O(1)
|
|
1097
1178
|
* @param key - Key.
|
|
1098
1179
|
* @param [value] - Value.
|
|
1099
|
-
* @returns
|
|
1180
|
+
* @returns This map (for chaining).
|
|
1100
1181
|
*/
|
|
1101
1182
|
set(key, value) {
|
|
1102
1183
|
let node;
|
|
@@ -1131,7 +1212,7 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1131
1212
|
this._sentinel.prev = node;
|
|
1132
1213
|
this._size++;
|
|
1133
1214
|
}
|
|
1134
|
-
return
|
|
1215
|
+
return this;
|
|
1135
1216
|
}
|
|
1136
1217
|
setMany(entryOrRawElements) {
|
|
1137
1218
|
const results = [];
|
|
@@ -1139,7 +1220,11 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1139
1220
|
let key, value;
|
|
1140
1221
|
if (this.isEntry(rawEle)) [key, value] = rawEle;
|
|
1141
1222
|
else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
|
|
1142
|
-
if (key !== void 0 && value !== void 0)
|
|
1223
|
+
if (key !== void 0 && value !== void 0) {
|
|
1224
|
+
const sizeBefore = this._size;
|
|
1225
|
+
this.set(key, value);
|
|
1226
|
+
results.push(sizeBefore < this._size);
|
|
1227
|
+
}
|
|
1143
1228
|
}
|
|
1144
1229
|
return results;
|
|
1145
1230
|
}
|
|
@@ -1217,13 +1302,16 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1217
1302
|
* Delete the entry at a given index.
|
|
1218
1303
|
* @remarks Time O(N), Space O(1)
|
|
1219
1304
|
* @param index - Zero-based index.
|
|
1220
|
-
* @returns
|
|
1305
|
+
* @returns The removed entry [key, value].
|
|
1306
|
+
* @throws {RangeError} If index is out of bounds.
|
|
1221
1307
|
*/
|
|
1222
1308
|
deleteAt(index) {
|
|
1223
1309
|
rangeCheck(index, 0, this._size - 1);
|
|
1224
1310
|
let node = this.head;
|
|
1225
1311
|
while (index--) node = node.next;
|
|
1226
|
-
|
|
1312
|
+
const entry = [node.key, node.value];
|
|
1313
|
+
this._deleteNode(node);
|
|
1314
|
+
return entry;
|
|
1227
1315
|
}
|
|
1228
1316
|
isEmpty() {
|
|
1229
1317
|
return this._size === 0;
|
package/dist/cjs/heap.cjs
CHANGED
|
@@ -186,6 +186,35 @@ var IterableElementBase = class {
|
|
|
186
186
|
for (const ele of this) if (ele === element) return true;
|
|
187
187
|
return false;
|
|
188
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Check whether a value exists (Array-compatible alias for `has`).
|
|
191
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
|
|
192
|
+
* @param element - Element to search for (uses `===`).
|
|
193
|
+
* @returns `true` if found.
|
|
194
|
+
*/
|
|
195
|
+
includes(element) {
|
|
196
|
+
return this.has(element);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Return an iterator of `[index, value]` pairs (Array-compatible).
|
|
200
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
201
|
+
*/
|
|
202
|
+
*entries() {
|
|
203
|
+
let index = 0;
|
|
204
|
+
for (const value of this) {
|
|
205
|
+
yield [index++, value];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Return an iterator of numeric indices (Array-compatible).
|
|
210
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
211
|
+
*/
|
|
212
|
+
*keys() {
|
|
213
|
+
let index = 0;
|
|
214
|
+
for (const _ of this) {
|
|
215
|
+
yield index++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
189
218
|
/**
|
|
190
219
|
* Reduces all elements to a single accumulated value.
|
|
191
220
|
*
|
|
@@ -318,6 +347,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
318
347
|
|
|
319
348
|
|
|
320
349
|
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
321
357
|
|
|
322
358
|
|
|
323
359
|
|
|
@@ -374,7 +410,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
374
410
|
}
|
|
375
411
|
/**
|
|
376
412
|
* Insert an element.
|
|
377
|
-
* @remarks Time O(
|
|
413
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
378
414
|
* @param element - Element to insert.
|
|
379
415
|
* @returns True.
|
|
380
416
|
|
|
@@ -404,6 +440,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
404
440
|
|
|
405
441
|
|
|
406
442
|
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
407
450
|
|
|
408
451
|
|
|
409
452
|
|
|
@@ -461,6 +504,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
461
504
|
|
|
462
505
|
|
|
463
506
|
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
|
|
464
514
|
|
|
465
515
|
|
|
466
516
|
|
|
@@ -525,6 +575,40 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
525
575
|
|
|
526
576
|
|
|
527
577
|
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
* @example
|
|
585
|
+
* // Heap with custom comparator (MaxHeap behavior)
|
|
586
|
+
* interface Task {
|
|
587
|
+
* id: number;
|
|
588
|
+
* priority: number;
|
|
589
|
+
* name: string;
|
|
590
|
+
* }
|
|
591
|
+
*
|
|
592
|
+
* // Custom comparator for max heap behavior (higher priority first)
|
|
593
|
+
* const tasks: Task[] = [
|
|
594
|
+
* { id: 1, priority: 5, name: 'Email' },
|
|
595
|
+
* { id: 2, priority: 3, name: 'Chat' },
|
|
596
|
+
* { id: 3, priority: 8, name: 'Alert' }
|
|
597
|
+
* ];
|
|
598
|
+
*
|
|
599
|
+
* const maxHeap = new Heap(tasks, {
|
|
600
|
+
* comparator: (a: Task, b: Task) => b.priority - a.priority
|
|
601
|
+
* });
|
|
602
|
+
*
|
|
603
|
+
* console.log(maxHeap.size); // 3;
|
|
604
|
+
*
|
|
605
|
+
* // Peek returns highest priority task
|
|
606
|
+
* const topTask = maxHeap.peek();
|
|
607
|
+
* console.log(topTask?.priority); // 8;
|
|
608
|
+
* console.log(topTask?.name); // 'Alert';
|
|
609
|
+
*/
|
|
610
|
+
/**
|
|
611
|
+
* @deprecated Use `pop` instead. Will be removed in a future major version.
|
|
528
612
|
|
|
529
613
|
|
|
530
614
|
|
|
@@ -555,6 +639,14 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
555
639
|
* console.log(topTask?.name); // 'Alert';
|
|
556
640
|
*/
|
|
557
641
|
poll() {
|
|
642
|
+
return this.pop();
|
|
643
|
+
}
|
|
644
|
+
/**
|
|
645
|
+
* Remove and return the top element (min or max depending on comparator).
|
|
646
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
647
|
+
* @returns The removed top element, or undefined if empty.
|
|
648
|
+
*/
|
|
649
|
+
pop() {
|
|
558
650
|
if (this.elements.length === 0) return;
|
|
559
651
|
const value = this.elements[0];
|
|
560
652
|
const last = this.elements.pop();
|
|
@@ -595,6 +687,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
595
687
|
|
|
596
688
|
|
|
597
689
|
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
|
|
598
697
|
|
|
599
698
|
|
|
600
699
|
|
|
@@ -695,6 +794,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
695
794
|
|
|
696
795
|
|
|
697
796
|
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
|
|
698
804
|
|
|
699
805
|
|
|
700
806
|
|
|
@@ -742,6 +848,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
742
848
|
|
|
743
849
|
|
|
744
850
|
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
|
|
745
858
|
|
|
746
859
|
|
|
747
860
|
|
|
@@ -759,16 +872,6 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
759
872
|
clear() {
|
|
760
873
|
this._elements = [];
|
|
761
874
|
}
|
|
762
|
-
/**
|
|
763
|
-
* Replace the backing array and rebuild the heap.
|
|
764
|
-
* @remarks Time O(N), Space O(N)
|
|
765
|
-
* @param elements - Iterable used to refill the heap.
|
|
766
|
-
* @returns Array of per-node results from fixing steps.
|
|
767
|
-
*/
|
|
768
|
-
refill(elements) {
|
|
769
|
-
this._elements = Array.from(elements);
|
|
770
|
-
return this.fix();
|
|
771
|
-
}
|
|
772
875
|
/**
|
|
773
876
|
* Check if an equal element exists in the heap.
|
|
774
877
|
* @remarks Time O(N), Space O(1)
|
|
@@ -792,6 +895,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
792
895
|
|
|
793
896
|
|
|
794
897
|
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
795
905
|
|
|
796
906
|
|
|
797
907
|
|
|
@@ -839,6 +949,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
839
949
|
|
|
840
950
|
|
|
841
951
|
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
|
|
842
959
|
|
|
843
960
|
|
|
844
961
|
|
|
@@ -863,7 +980,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
863
980
|
}
|
|
864
981
|
if (index < 0) return false;
|
|
865
982
|
if (index === 0) {
|
|
866
|
-
this.
|
|
983
|
+
this.pop();
|
|
867
984
|
} else if (index === this.elements.length - 1) {
|
|
868
985
|
this.elements.pop();
|
|
869
986
|
} else {
|
|
@@ -873,13 +990,19 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
873
990
|
}
|
|
874
991
|
return true;
|
|
875
992
|
}
|
|
993
|
+
/**
|
|
994
|
+
* @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
|
|
995
|
+
*/
|
|
996
|
+
deleteBy(predicate) {
|
|
997
|
+
return this.deleteWhere(predicate);
|
|
998
|
+
}
|
|
876
999
|
/**
|
|
877
1000
|
* Delete the first element that matches a predicate.
|
|
878
1001
|
* @remarks Time O(N), Space O(1)
|
|
879
1002
|
* @param predicate - Function (element, index, heap) → boolean.
|
|
880
1003
|
* @returns True if an element was removed.
|
|
881
1004
|
*/
|
|
882
|
-
|
|
1005
|
+
deleteWhere(predicate) {
|
|
883
1006
|
let idx = -1;
|
|
884
1007
|
for (let i = 0; i < this.elements.length; i++) {
|
|
885
1008
|
if (predicate(this.elements[i], i, this)) {
|
|
@@ -889,7 +1012,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
889
1012
|
}
|
|
890
1013
|
if (idx < 0) return false;
|
|
891
1014
|
if (idx === 0) {
|
|
892
|
-
this.
|
|
1015
|
+
this.pop();
|
|
893
1016
|
} else if (idx === this.elements.length - 1) {
|
|
894
1017
|
this.elements.pop();
|
|
895
1018
|
} else {
|
|
@@ -932,6 +1055,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
932
1055
|
|
|
933
1056
|
|
|
934
1057
|
|
|
1058
|
+
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
|
|
935
1065
|
|
|
936
1066
|
|
|
937
1067
|
|
|
@@ -1012,6 +1142,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1012
1142
|
|
|
1013
1143
|
|
|
1014
1144
|
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
|
|
1015
1152
|
|
|
1016
1153
|
|
|
1017
1154
|
|
|
@@ -1065,6 +1202,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1065
1202
|
|
|
1066
1203
|
|
|
1067
1204
|
|
|
1205
|
+
|
|
1206
|
+
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
|
|
1210
|
+
|
|
1211
|
+
|
|
1068
1212
|
|
|
1069
1213
|
|
|
1070
1214
|
|
|
@@ -1117,6 +1261,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1117
1261
|
|
|
1118
1262
|
|
|
1119
1263
|
|
|
1264
|
+
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
|
|
1269
|
+
|
|
1270
|
+
|
|
1120
1271
|
|
|
1121
1272
|
|
|
1122
1273
|
|
|
@@ -1176,6 +1327,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1176
1327
|
|
|
1177
1328
|
|
|
1178
1329
|
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
|
|
1333
|
+
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
|
|
1179
1337
|
|
|
1180
1338
|
|
|
1181
1339
|
|
|
@@ -1372,7 +1530,7 @@ var FibonacciHeap = class {
|
|
|
1372
1530
|
* Push an element into the root list.
|
|
1373
1531
|
* @remarks Time O(1) amortized, Space O(1)
|
|
1374
1532
|
* @param element - Element to insert.
|
|
1375
|
-
* @returns
|
|
1533
|
+
* @returns True when the element is added.
|
|
1376
1534
|
*/
|
|
1377
1535
|
push(element) {
|
|
1378
1536
|
const node = this.createNode(element);
|
|
@@ -1381,7 +1539,7 @@ var FibonacciHeap = class {
|
|
|
1381
1539
|
this.mergeWithRoot(node);
|
|
1382
1540
|
if (!this.min || this.comparator(node.element, this.min.element) <= 0) this._min = node;
|
|
1383
1541
|
this._size++;
|
|
1384
|
-
return
|
|
1542
|
+
return true;
|
|
1385
1543
|
}
|
|
1386
1544
|
peek() {
|
|
1387
1545
|
return this.min ? this.min.element : void 0;
|