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-legacy/hash.cjs
CHANGED
|
@@ -320,6 +320,13 @@ var _HashMap = class _HashMap 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 _HashMap 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 _HashMap 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 _HashMap 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 _HashMap 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 _HashMap 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 _HashMap extends IterableEntryBase {
|
|
|
584
623
|
|
|
585
624
|
|
|
586
625
|
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
587
633
|
|
|
588
634
|
|
|
589
635
|
|
|
@@ -652,6 +698,13 @@ var _HashMap = class _HashMap extends IterableEntryBase {
|
|
|
652
698
|
|
|
653
699
|
|
|
654
700
|
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
655
708
|
|
|
656
709
|
|
|
657
710
|
|
|
@@ -704,6 +757,13 @@ var _HashMap = class _HashMap extends IterableEntryBase {
|
|
|
704
757
|
|
|
705
758
|
|
|
706
759
|
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
|
|
707
767
|
|
|
708
768
|
|
|
709
769
|
|
|
@@ -774,6 +834,13 @@ var _HashMap = class _HashMap extends IterableEntryBase {
|
|
|
774
834
|
|
|
775
835
|
|
|
776
836
|
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
|
|
777
844
|
|
|
778
845
|
|
|
779
846
|
|
|
@@ -827,6 +894,13 @@ var _HashMap = class _HashMap extends IterableEntryBase {
|
|
|
827
894
|
|
|
828
895
|
|
|
829
896
|
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
830
904
|
|
|
831
905
|
|
|
832
906
|
|
|
@@ -882,6 +956,13 @@ var _HashMap = class _HashMap extends IterableEntryBase {
|
|
|
882
956
|
|
|
883
957
|
|
|
884
958
|
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
|
|
885
966
|
|
|
886
967
|
|
|
887
968
|
|
|
@@ -1094,7 +1175,7 @@ var _LinkedHashMap = class _LinkedHashMap 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 _LinkedHashMap 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 _LinkedHashMap 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 _LinkedHashMap 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/cjs-legacy/heap.cjs
CHANGED
|
@@ -185,6 +185,35 @@ var _IterableElementBase = class _IterableElementBase {
|
|
|
185
185
|
for (const ele of this) if (ele === element) return true;
|
|
186
186
|
return false;
|
|
187
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Check whether a value exists (Array-compatible alias for `has`).
|
|
190
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
|
|
191
|
+
* @param element - Element to search for (uses `===`).
|
|
192
|
+
* @returns `true` if found.
|
|
193
|
+
*/
|
|
194
|
+
includes(element) {
|
|
195
|
+
return this.has(element);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Return an iterator of `[index, value]` pairs (Array-compatible).
|
|
199
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
200
|
+
*/
|
|
201
|
+
*entries() {
|
|
202
|
+
let index = 0;
|
|
203
|
+
for (const value of this) {
|
|
204
|
+
yield [index++, value];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Return an iterator of numeric indices (Array-compatible).
|
|
209
|
+
* @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
|
|
210
|
+
*/
|
|
211
|
+
*keys() {
|
|
212
|
+
let index = 0;
|
|
213
|
+
for (const _ of this) {
|
|
214
|
+
yield index++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
188
217
|
/**
|
|
189
218
|
* Reduces all elements to a single accumulated value.
|
|
190
219
|
*
|
|
@@ -325,6 +354,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
325
354
|
|
|
326
355
|
|
|
327
356
|
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
328
364
|
|
|
329
365
|
|
|
330
366
|
|
|
@@ -382,7 +418,7 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
382
418
|
}
|
|
383
419
|
/**
|
|
384
420
|
* Insert an element.
|
|
385
|
-
* @remarks Time O(
|
|
421
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
386
422
|
* @param element - Element to insert.
|
|
387
423
|
* @returns True.
|
|
388
424
|
|
|
@@ -412,6 +448,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
412
448
|
|
|
413
449
|
|
|
414
450
|
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
|
|
415
458
|
|
|
416
459
|
|
|
417
460
|
|
|
@@ -469,6 +512,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
469
512
|
|
|
470
513
|
|
|
471
514
|
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
472
522
|
|
|
473
523
|
|
|
474
524
|
|
|
@@ -533,6 +583,40 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
533
583
|
|
|
534
584
|
|
|
535
585
|
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
* @example
|
|
593
|
+
* // Heap with custom comparator (MaxHeap behavior)
|
|
594
|
+
* interface Task {
|
|
595
|
+
* id: number;
|
|
596
|
+
* priority: number;
|
|
597
|
+
* name: string;
|
|
598
|
+
* }
|
|
599
|
+
*
|
|
600
|
+
* // Custom comparator for max heap behavior (higher priority first)
|
|
601
|
+
* const tasks: Task[] = [
|
|
602
|
+
* { id: 1, priority: 5, name: 'Email' },
|
|
603
|
+
* { id: 2, priority: 3, name: 'Chat' },
|
|
604
|
+
* { id: 3, priority: 8, name: 'Alert' }
|
|
605
|
+
* ];
|
|
606
|
+
*
|
|
607
|
+
* const maxHeap = new Heap(tasks, {
|
|
608
|
+
* comparator: (a: Task, b: Task) => b.priority - a.priority
|
|
609
|
+
* });
|
|
610
|
+
*
|
|
611
|
+
* console.log(maxHeap.size); // 3;
|
|
612
|
+
*
|
|
613
|
+
* // Peek returns highest priority task
|
|
614
|
+
* const topTask = maxHeap.peek();
|
|
615
|
+
* console.log(topTask?.priority); // 8;
|
|
616
|
+
* console.log(topTask?.name); // 'Alert';
|
|
617
|
+
*/
|
|
618
|
+
/**
|
|
619
|
+
* @deprecated Use `pop` instead. Will be removed in a future major version.
|
|
536
620
|
|
|
537
621
|
|
|
538
622
|
|
|
@@ -563,6 +647,14 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
563
647
|
* console.log(topTask?.name); // 'Alert';
|
|
564
648
|
*/
|
|
565
649
|
poll() {
|
|
650
|
+
return this.pop();
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Remove and return the top element (min or max depending on comparator).
|
|
654
|
+
* @remarks Time O(log N) amortized, Space O(1)
|
|
655
|
+
* @returns The removed top element, or undefined if empty.
|
|
656
|
+
*/
|
|
657
|
+
pop() {
|
|
566
658
|
if (this.elements.length === 0) return;
|
|
567
659
|
const value = this.elements[0];
|
|
568
660
|
const last = this.elements.pop();
|
|
@@ -603,6 +695,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
603
695
|
|
|
604
696
|
|
|
605
697
|
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
606
705
|
|
|
607
706
|
|
|
608
707
|
|
|
@@ -703,6 +802,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
703
802
|
|
|
704
803
|
|
|
705
804
|
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
|
|
706
812
|
|
|
707
813
|
|
|
708
814
|
|
|
@@ -750,6 +856,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
750
856
|
|
|
751
857
|
|
|
752
858
|
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
|
|
753
866
|
|
|
754
867
|
|
|
755
868
|
|
|
@@ -767,16 +880,6 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
767
880
|
clear() {
|
|
768
881
|
this._elements = [];
|
|
769
882
|
}
|
|
770
|
-
/**
|
|
771
|
-
* Replace the backing array and rebuild the heap.
|
|
772
|
-
* @remarks Time O(N), Space O(N)
|
|
773
|
-
* @param elements - Iterable used to refill the heap.
|
|
774
|
-
* @returns Array of per-node results from fixing steps.
|
|
775
|
-
*/
|
|
776
|
-
refill(elements) {
|
|
777
|
-
this._elements = Array.from(elements);
|
|
778
|
-
return this.fix();
|
|
779
|
-
}
|
|
780
883
|
/**
|
|
781
884
|
* Check if an equal element exists in the heap.
|
|
782
885
|
* @remarks Time O(N), Space O(1)
|
|
@@ -800,6 +903,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
800
903
|
|
|
801
904
|
|
|
802
905
|
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
|
|
912
|
+
|
|
803
913
|
|
|
804
914
|
|
|
805
915
|
|
|
@@ -847,6 +957,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
847
957
|
|
|
848
958
|
|
|
849
959
|
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
|
|
850
967
|
|
|
851
968
|
|
|
852
969
|
|
|
@@ -871,7 +988,7 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
871
988
|
}
|
|
872
989
|
if (index < 0) return false;
|
|
873
990
|
if (index === 0) {
|
|
874
|
-
this.
|
|
991
|
+
this.pop();
|
|
875
992
|
} else if (index === this.elements.length - 1) {
|
|
876
993
|
this.elements.pop();
|
|
877
994
|
} else {
|
|
@@ -881,13 +998,19 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
881
998
|
}
|
|
882
999
|
return true;
|
|
883
1000
|
}
|
|
1001
|
+
/**
|
|
1002
|
+
* @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
|
|
1003
|
+
*/
|
|
1004
|
+
deleteBy(predicate) {
|
|
1005
|
+
return this.deleteWhere(predicate);
|
|
1006
|
+
}
|
|
884
1007
|
/**
|
|
885
1008
|
* Delete the first element that matches a predicate.
|
|
886
1009
|
* @remarks Time O(N), Space O(1)
|
|
887
1010
|
* @param predicate - Function (element, index, heap) → boolean.
|
|
888
1011
|
* @returns True if an element was removed.
|
|
889
1012
|
*/
|
|
890
|
-
|
|
1013
|
+
deleteWhere(predicate) {
|
|
891
1014
|
let idx = -1;
|
|
892
1015
|
for (let i = 0; i < this.elements.length; i++) {
|
|
893
1016
|
if (predicate(this.elements[i], i, this)) {
|
|
@@ -897,7 +1020,7 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
897
1020
|
}
|
|
898
1021
|
if (idx < 0) return false;
|
|
899
1022
|
if (idx === 0) {
|
|
900
|
-
this.
|
|
1023
|
+
this.pop();
|
|
901
1024
|
} else if (idx === this.elements.length - 1) {
|
|
902
1025
|
this.elements.pop();
|
|
903
1026
|
} else {
|
|
@@ -940,6 +1063,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
940
1063
|
|
|
941
1064
|
|
|
942
1065
|
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
|
|
1072
|
+
|
|
943
1073
|
|
|
944
1074
|
|
|
945
1075
|
|
|
@@ -1020,6 +1150,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
1020
1150
|
|
|
1021
1151
|
|
|
1022
1152
|
|
|
1153
|
+
|
|
1154
|
+
|
|
1155
|
+
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
|
|
1023
1160
|
|
|
1024
1161
|
|
|
1025
1162
|
|
|
@@ -1073,6 +1210,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
1073
1210
|
|
|
1074
1211
|
|
|
1075
1212
|
|
|
1213
|
+
|
|
1214
|
+
|
|
1215
|
+
|
|
1216
|
+
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
|
|
1076
1220
|
|
|
1077
1221
|
|
|
1078
1222
|
|
|
@@ -1125,6 +1269,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
1125
1269
|
|
|
1126
1270
|
|
|
1127
1271
|
|
|
1272
|
+
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
|
|
1276
|
+
|
|
1277
|
+
|
|
1278
|
+
|
|
1128
1279
|
|
|
1129
1280
|
|
|
1130
1281
|
|
|
@@ -1184,6 +1335,13 @@ var _Heap = class _Heap extends IterableElementBase {
|
|
|
1184
1335
|
|
|
1185
1336
|
|
|
1186
1337
|
|
|
1338
|
+
|
|
1339
|
+
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
|
|
1343
|
+
|
|
1344
|
+
|
|
1187
1345
|
|
|
1188
1346
|
|
|
1189
1347
|
|
|
@@ -1369,7 +1527,7 @@ var _FibonacciHeap = class _FibonacciHeap {
|
|
|
1369
1527
|
* Push an element into the root list.
|
|
1370
1528
|
* @remarks Time O(1) amortized, Space O(1)
|
|
1371
1529
|
* @param element - Element to insert.
|
|
1372
|
-
* @returns
|
|
1530
|
+
* @returns True when the element is added.
|
|
1373
1531
|
*/
|
|
1374
1532
|
push(element) {
|
|
1375
1533
|
const node = this.createNode(element);
|
|
@@ -1378,7 +1536,7 @@ var _FibonacciHeap = class _FibonacciHeap {
|
|
|
1378
1536
|
this.mergeWithRoot(node);
|
|
1379
1537
|
if (!this.min || this.comparator(node.element, this.min.element) <= 0) this._min = node;
|
|
1380
1538
|
this._size++;
|
|
1381
|
-
return
|
|
1539
|
+
return true;
|
|
1382
1540
|
}
|
|
1383
1541
|
peek() {
|
|
1384
1542
|
return this.min ? this.min.element : void 0;
|