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/esm/hash.mjs
CHANGED
|
@@ -320,6 +320,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
320
320
|
|
|
321
321
|
|
|
322
322
|
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
323
330
|
|
|
324
331
|
|
|
325
332
|
|
|
@@ -365,6 +372,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
365
372
|
|
|
366
373
|
|
|
367
374
|
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
|
|
368
382
|
|
|
369
383
|
|
|
370
384
|
|
|
@@ -453,6 +467,20 @@ var HashMap = class extends IterableEntryBase {
|
|
|
453
467
|
|
|
454
468
|
|
|
455
469
|
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
|
|
456
484
|
|
|
457
485
|
|
|
458
486
|
|
|
@@ -496,7 +524,7 @@ var HashMap = class extends IterableEntryBase {
|
|
|
496
524
|
if (this.store[strKey] === void 0) this._size++;
|
|
497
525
|
this._store[strKey] = { key, value };
|
|
498
526
|
}
|
|
499
|
-
return
|
|
527
|
+
return this;
|
|
500
528
|
}
|
|
501
529
|
/**
|
|
502
530
|
* Insert many entries from an iterable.
|
|
@@ -528,6 +556,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
528
556
|
|
|
529
557
|
|
|
530
558
|
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
531
566
|
|
|
532
567
|
|
|
533
568
|
|
|
@@ -548,7 +583,11 @@ var HashMap = class extends IterableEntryBase {
|
|
|
548
583
|
let key, value;
|
|
549
584
|
if (this.isEntry(rawEle)) [key, value] = rawEle;
|
|
550
585
|
else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
|
|
551
|
-
if (key !== void 0 && value !== void 0)
|
|
586
|
+
if (key !== void 0 && value !== void 0) {
|
|
587
|
+
const sizeBefore = this._size;
|
|
588
|
+
this.set(key, value);
|
|
589
|
+
results.push(sizeBefore < this._size);
|
|
590
|
+
}
|
|
552
591
|
}
|
|
553
592
|
return results;
|
|
554
593
|
}
|
|
@@ -584,6 +623,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
584
623
|
|
|
585
624
|
|
|
586
625
|
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
587
633
|
|
|
588
634
|
|
|
589
635
|
|
|
@@ -651,6 +697,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
651
697
|
|
|
652
698
|
|
|
653
699
|
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
654
707
|
|
|
655
708
|
|
|
656
709
|
|
|
@@ -703,6 +756,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
703
756
|
|
|
704
757
|
|
|
705
758
|
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
706
766
|
|
|
707
767
|
|
|
708
768
|
|
|
@@ -773,6 +833,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
773
833
|
|
|
774
834
|
|
|
775
835
|
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
776
843
|
|
|
777
844
|
|
|
778
845
|
|
|
@@ -826,6 +893,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
826
893
|
|
|
827
894
|
|
|
828
895
|
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
829
903
|
|
|
830
904
|
|
|
831
905
|
|
|
@@ -881,6 +955,13 @@ var HashMap = class extends IterableEntryBase {
|
|
|
881
955
|
|
|
882
956
|
|
|
883
957
|
|
|
958
|
+
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
|
|
884
965
|
|
|
885
966
|
|
|
886
967
|
|
|
@@ -1094,7 +1175,7 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1094
1175
|
* @remarks Time O(1), Space O(1)
|
|
1095
1176
|
* @param key - Key.
|
|
1096
1177
|
* @param [value] - Value.
|
|
1097
|
-
* @returns
|
|
1178
|
+
* @returns This map (for chaining).
|
|
1098
1179
|
*/
|
|
1099
1180
|
set(key, value) {
|
|
1100
1181
|
let node;
|
|
@@ -1129,7 +1210,7 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1129
1210
|
this._sentinel.prev = node;
|
|
1130
1211
|
this._size++;
|
|
1131
1212
|
}
|
|
1132
|
-
return
|
|
1213
|
+
return this;
|
|
1133
1214
|
}
|
|
1134
1215
|
setMany(entryOrRawElements) {
|
|
1135
1216
|
const results = [];
|
|
@@ -1137,7 +1218,11 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1137
1218
|
let key, value;
|
|
1138
1219
|
if (this.isEntry(rawEle)) [key, value] = rawEle;
|
|
1139
1220
|
else if (this._toEntryFn) [key, value] = this._toEntryFn(rawEle);
|
|
1140
|
-
if (key !== void 0 && value !== void 0)
|
|
1221
|
+
if (key !== void 0 && value !== void 0) {
|
|
1222
|
+
const sizeBefore = this._size;
|
|
1223
|
+
this.set(key, value);
|
|
1224
|
+
results.push(sizeBefore < this._size);
|
|
1225
|
+
}
|
|
1141
1226
|
}
|
|
1142
1227
|
return results;
|
|
1143
1228
|
}
|
|
@@ -1215,13 +1300,16 @@ var LinkedHashMap = class extends IterableEntryBase {
|
|
|
1215
1300
|
* Delete the entry at a given index.
|
|
1216
1301
|
* @remarks Time O(N), Space O(1)
|
|
1217
1302
|
* @param index - Zero-based index.
|
|
1218
|
-
* @returns
|
|
1303
|
+
* @returns The removed entry [key, value].
|
|
1304
|
+
* @throws {RangeError} If index is out of bounds.
|
|
1219
1305
|
*/
|
|
1220
1306
|
deleteAt(index) {
|
|
1221
1307
|
rangeCheck(index, 0, this._size - 1);
|
|
1222
1308
|
let node = this.head;
|
|
1223
1309
|
while (index--) node = node.next;
|
|
1224
|
-
|
|
1310
|
+
const entry = [node.key, node.value];
|
|
1311
|
+
this._deleteNode(node);
|
|
1312
|
+
return entry;
|
|
1225
1313
|
}
|
|
1226
1314
|
isEmpty() {
|
|
1227
1315
|
return this._size === 0;
|
package/dist/esm/heap.mjs
CHANGED
|
@@ -184,6 +184,35 @@ var IterableElementBase = class {
|
|
|
184
184
|
for (const ele of this) if (ele === element) return true;
|
|
185
185
|
return false;
|
|
186
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Check whether a value exists (Array-compatible alias for `has`).
|
|
189
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
|
|
190
|
+
* @param element - Element to search for (uses `===`).
|
|
191
|
+
* @returns `true` if found.
|
|
192
|
+
*/
|
|
193
|
+
includes(element) {
|
|
194
|
+
return this.has(element);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Return an iterator of `[index, value]` pairs (Array-compatible).
|
|
198
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
199
|
+
*/
|
|
200
|
+
*entries() {
|
|
201
|
+
let index = 0;
|
|
202
|
+
for (const value of this) {
|
|
203
|
+
yield [index++, value];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Return an iterator of numeric indices (Array-compatible).
|
|
208
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
209
|
+
*/
|
|
210
|
+
*keys() {
|
|
211
|
+
let index = 0;
|
|
212
|
+
for (const _ of this) {
|
|
213
|
+
yield index++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
187
216
|
/**
|
|
188
217
|
* Reduces all elements to a single accumulated value.
|
|
189
218
|
*
|
|
@@ -316,6 +345,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
316
345
|
|
|
317
346
|
|
|
318
347
|
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
319
355
|
|
|
320
356
|
|
|
321
357
|
|
|
@@ -372,7 +408,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
372
408
|
}
|
|
373
409
|
/**
|
|
374
410
|
* Insert an element.
|
|
375
|
-
* @remarks Time O(
|
|
411
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
376
412
|
* @param element - Element to insert.
|
|
377
413
|
* @returns True.
|
|
378
414
|
|
|
@@ -402,6 +438,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
402
438
|
|
|
403
439
|
|
|
404
440
|
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
405
448
|
|
|
406
449
|
|
|
407
450
|
|
|
@@ -459,6 +502,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
459
502
|
|
|
460
503
|
|
|
461
504
|
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
|
|
462
512
|
|
|
463
513
|
|
|
464
514
|
|
|
@@ -523,6 +573,40 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
523
573
|
|
|
524
574
|
|
|
525
575
|
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
* @example
|
|
583
|
+
* // Heap with custom comparator (MaxHeap behavior)
|
|
584
|
+
* interface Task {
|
|
585
|
+
* id: number;
|
|
586
|
+
* priority: number;
|
|
587
|
+
* name: string;
|
|
588
|
+
* }
|
|
589
|
+
*
|
|
590
|
+
* // Custom comparator for max heap behavior (higher priority first)
|
|
591
|
+
* const tasks: Task[] = [
|
|
592
|
+
* { id: 1, priority: 5, name: 'Email' },
|
|
593
|
+
* { id: 2, priority: 3, name: 'Chat' },
|
|
594
|
+
* { id: 3, priority: 8, name: 'Alert' }
|
|
595
|
+
* ];
|
|
596
|
+
*
|
|
597
|
+
* const maxHeap = new Heap(tasks, {
|
|
598
|
+
* comparator: (a: Task, b: Task) => b.priority - a.priority
|
|
599
|
+
* });
|
|
600
|
+
*
|
|
601
|
+
* console.log(maxHeap.size); // 3;
|
|
602
|
+
*
|
|
603
|
+
* // Peek returns highest priority task
|
|
604
|
+
* const topTask = maxHeap.peek();
|
|
605
|
+
* console.log(topTask?.priority); // 8;
|
|
606
|
+
* console.log(topTask?.name); // 'Alert';
|
|
607
|
+
*/
|
|
608
|
+
/**
|
|
609
|
+
* @deprecated Use `pop` instead. Will be removed in a future major version.
|
|
526
610
|
|
|
527
611
|
|
|
528
612
|
|
|
@@ -553,6 +637,14 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
553
637
|
* console.log(topTask?.name); // 'Alert';
|
|
554
638
|
*/
|
|
555
639
|
poll() {
|
|
640
|
+
return this.pop();
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Remove and return the top element (min or max depending on comparator).
|
|
644
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
645
|
+
* @returns The removed top element, or undefined if empty.
|
|
646
|
+
*/
|
|
647
|
+
pop() {
|
|
556
648
|
if (this.elements.length === 0) return;
|
|
557
649
|
const value = this.elements[0];
|
|
558
650
|
const last = this.elements.pop();
|
|
@@ -593,6 +685,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
593
685
|
|
|
594
686
|
|
|
595
687
|
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
|
|
596
695
|
|
|
597
696
|
|
|
598
697
|
|
|
@@ -693,6 +792,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
693
792
|
|
|
694
793
|
|
|
695
794
|
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
696
802
|
|
|
697
803
|
|
|
698
804
|
|
|
@@ -740,6 +846,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
740
846
|
|
|
741
847
|
|
|
742
848
|
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
|
|
743
856
|
|
|
744
857
|
|
|
745
858
|
|
|
@@ -757,16 +870,6 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
757
870
|
clear() {
|
|
758
871
|
this._elements = [];
|
|
759
872
|
}
|
|
760
|
-
/**
|
|
761
|
-
* Replace the backing array and rebuild the heap.
|
|
762
|
-
* @remarks Time O(N), Space O(N)
|
|
763
|
-
* @param elements - Iterable used to refill the heap.
|
|
764
|
-
* @returns Array of per-node results from fixing steps.
|
|
765
|
-
*/
|
|
766
|
-
refill(elements) {
|
|
767
|
-
this._elements = Array.from(elements);
|
|
768
|
-
return this.fix();
|
|
769
|
-
}
|
|
770
873
|
/**
|
|
771
874
|
* Check if an equal element exists in the heap.
|
|
772
875
|
* @remarks Time O(N), Space O(1)
|
|
@@ -790,6 +893,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
790
893
|
|
|
791
894
|
|
|
792
895
|
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
793
903
|
|
|
794
904
|
|
|
795
905
|
|
|
@@ -837,6 +947,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
837
947
|
|
|
838
948
|
|
|
839
949
|
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
|
|
955
|
+
|
|
956
|
+
|
|
840
957
|
|
|
841
958
|
|
|
842
959
|
|
|
@@ -861,7 +978,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
861
978
|
}
|
|
862
979
|
if (index < 0) return false;
|
|
863
980
|
if (index === 0) {
|
|
864
|
-
this.
|
|
981
|
+
this.pop();
|
|
865
982
|
} else if (index === this.elements.length - 1) {
|
|
866
983
|
this.elements.pop();
|
|
867
984
|
} else {
|
|
@@ -871,13 +988,19 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
871
988
|
}
|
|
872
989
|
return true;
|
|
873
990
|
}
|
|
991
|
+
/**
|
|
992
|
+
* @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
|
|
993
|
+
*/
|
|
994
|
+
deleteBy(predicate) {
|
|
995
|
+
return this.deleteWhere(predicate);
|
|
996
|
+
}
|
|
874
997
|
/**
|
|
875
998
|
* Delete the first element that matches a predicate.
|
|
876
999
|
* @remarks Time O(N), Space O(1)
|
|
877
1000
|
* @param predicate - Function (element, index, heap) → boolean.
|
|
878
1001
|
* @returns True if an element was removed.
|
|
879
1002
|
*/
|
|
880
|
-
|
|
1003
|
+
deleteWhere(predicate) {
|
|
881
1004
|
let idx = -1;
|
|
882
1005
|
for (let i = 0; i < this.elements.length; i++) {
|
|
883
1006
|
if (predicate(this.elements[i], i, this)) {
|
|
@@ -887,7 +1010,7 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
887
1010
|
}
|
|
888
1011
|
if (idx < 0) return false;
|
|
889
1012
|
if (idx === 0) {
|
|
890
|
-
this.
|
|
1013
|
+
this.pop();
|
|
891
1014
|
} else if (idx === this.elements.length - 1) {
|
|
892
1015
|
this.elements.pop();
|
|
893
1016
|
} else {
|
|
@@ -930,6 +1053,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
930
1053
|
|
|
931
1054
|
|
|
932
1055
|
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
|
|
933
1063
|
|
|
934
1064
|
|
|
935
1065
|
|
|
@@ -1010,6 +1140,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1010
1140
|
|
|
1011
1141
|
|
|
1012
1142
|
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
|
|
1013
1150
|
|
|
1014
1151
|
|
|
1015
1152
|
|
|
@@ -1063,6 +1200,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1063
1200
|
|
|
1064
1201
|
|
|
1065
1202
|
|
|
1203
|
+
|
|
1204
|
+
|
|
1205
|
+
|
|
1206
|
+
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
|
|
1066
1210
|
|
|
1067
1211
|
|
|
1068
1212
|
|
|
@@ -1115,6 +1259,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1115
1259
|
|
|
1116
1260
|
|
|
1117
1261
|
|
|
1262
|
+
|
|
1263
|
+
|
|
1264
|
+
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
|
|
1118
1269
|
|
|
1119
1270
|
|
|
1120
1271
|
|
|
@@ -1174,6 +1325,13 @@ var Heap = class _Heap extends IterableElementBase {
|
|
|
1174
1325
|
|
|
1175
1326
|
|
|
1176
1327
|
|
|
1328
|
+
|
|
1329
|
+
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
|
|
1333
|
+
|
|
1334
|
+
|
|
1177
1335
|
|
|
1178
1336
|
|
|
1179
1337
|
|
|
@@ -1370,7 +1528,7 @@ var FibonacciHeap = class {
|
|
|
1370
1528
|
* Push an element into the root list.
|
|
1371
1529
|
* @remarks Time O(1) amortized, Space O(1)
|
|
1372
1530
|
* @param element - Element to insert.
|
|
1373
|
-
* @returns
|
|
1531
|
+
* @returns True when the element is added.
|
|
1374
1532
|
*/
|
|
1375
1533
|
push(element) {
|
|
1376
1534
|
const node = this.createNode(element);
|
|
@@ -1379,7 +1537,7 @@ var FibonacciHeap = class {
|
|
|
1379
1537
|
this.mergeWithRoot(node);
|
|
1380
1538
|
if (!this.min || this.comparator(node.element, this.min.element) <= 0) this._min = node;
|
|
1381
1539
|
this._size++;
|
|
1382
|
-
return
|
|
1540
|
+
return true;
|
|
1383
1541
|
}
|
|
1384
1542
|
peek() {
|
|
1385
1543
|
return this.min ? this.min.element : void 0;
|