data-structure-typed 2.5.1 → 2.5.3

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.
Files changed (184) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/MIGRATION.md +169 -0
  3. package/README.md +135 -23
  4. package/README_CN.md +551 -143
  5. package/SPECIFICATION.md +20 -14
  6. package/SPECIFICATION.zh-CN.md +20 -14
  7. package/dist/cjs/binary-tree.cjs +6460 -1591
  8. package/dist/cjs/graph.cjs +440 -20
  9. package/dist/cjs/hash.cjs +125 -22
  10. package/dist/cjs/heap.cjs +196 -47
  11. package/dist/cjs/index.cjs +8486 -2429
  12. package/dist/cjs/linked-list.cjs +456 -31
  13. package/dist/cjs/matrix.cjs +79 -9
  14. package/dist/cjs/priority-queue.cjs +193 -44
  15. package/dist/cjs/queue.cjs +391 -2
  16. package/dist/cjs/stack.cjs +92 -6
  17. package/dist/cjs/trie.cjs +122 -28
  18. package/dist/cjs-legacy/binary-tree.cjs +6484 -1612
  19. package/dist/cjs-legacy/graph.cjs +440 -20
  20. package/dist/cjs-legacy/hash.cjs +125 -22
  21. package/dist/cjs-legacy/heap.cjs +196 -47
  22. package/dist/cjs-legacy/index.cjs +8654 -2594
  23. package/dist/cjs-legacy/linked-list.cjs +456 -31
  24. package/dist/cjs-legacy/matrix.cjs +79 -9
  25. package/dist/cjs-legacy/priority-queue.cjs +193 -44
  26. package/dist/cjs-legacy/queue.cjs +391 -2
  27. package/dist/cjs-legacy/stack.cjs +92 -6
  28. package/dist/cjs-legacy/trie.cjs +122 -28
  29. package/dist/esm/binary-tree.mjs +6460 -1591
  30. package/dist/esm/graph.mjs +440 -20
  31. package/dist/esm/hash.mjs +125 -22
  32. package/dist/esm/heap.mjs +196 -47
  33. package/dist/esm/index.mjs +8486 -2430
  34. package/dist/esm/linked-list.mjs +456 -31
  35. package/dist/esm/matrix.mjs +79 -9
  36. package/dist/esm/priority-queue.mjs +193 -44
  37. package/dist/esm/queue.mjs +391 -2
  38. package/dist/esm/stack.mjs +92 -6
  39. package/dist/esm/trie.mjs +122 -28
  40. package/dist/esm-legacy/binary-tree.mjs +6484 -1612
  41. package/dist/esm-legacy/graph.mjs +440 -20
  42. package/dist/esm-legacy/hash.mjs +125 -22
  43. package/dist/esm-legacy/heap.mjs +196 -47
  44. package/dist/esm-legacy/index.mjs +8654 -2595
  45. package/dist/esm-legacy/linked-list.mjs +456 -31
  46. package/dist/esm-legacy/matrix.mjs +79 -9
  47. package/dist/esm-legacy/priority-queue.mjs +193 -44
  48. package/dist/esm-legacy/queue.mjs +391 -2
  49. package/dist/esm-legacy/stack.mjs +92 -6
  50. package/dist/esm-legacy/trie.mjs +122 -28
  51. package/dist/types/common/error.d.ts +9 -0
  52. package/dist/types/common/index.d.ts +1 -1
  53. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -2
  54. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +112 -0
  55. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +214 -13
  56. package/dist/types/data-structures/binary-tree/bst.d.ts +294 -3
  57. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +155 -8
  58. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +48 -0
  59. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1370 -323
  60. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1329 -316
  61. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +1116 -295
  62. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1330 -326
  63. package/dist/types/data-structures/graph/directed-graph.d.ts +80 -0
  64. package/dist/types/data-structures/graph/undirected-graph.d.ts +72 -0
  65. package/dist/types/data-structures/hash/hash-map.d.ts +95 -6
  66. package/dist/types/data-structures/heap/heap.d.ts +154 -12
  67. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +143 -0
  68. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -1
  69. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +144 -0
  70. package/dist/types/data-structures/matrix/matrix.d.ts +64 -0
  71. package/dist/types/data-structures/queue/deque.d.ts +142 -0
  72. package/dist/types/data-structures/queue/queue.d.ts +109 -0
  73. package/dist/types/data-structures/stack/stack.d.ts +82 -2
  74. package/dist/types/data-structures/trie/trie.d.ts +96 -0
  75. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  76. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  77. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  78. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  79. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  80. package/dist/umd/data-structure-typed.js +8623 -2564
  81. package/dist/umd/data-structure-typed.min.js +5 -5
  82. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +696 -194
  83. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
  84. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +71 -71
  85. package/docs-site-docusaurus/docs/api/classes/BST.md +639 -189
  86. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
  87. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
  88. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +148 -160
  89. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  90. package/docs-site-docusaurus/docs/api/classes/Deque.md +105 -91
  91. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +82 -82
  92. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +104 -74
  93. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
  94. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
  95. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  96. package/docs-site-docusaurus/docs/api/classes/HashMap.md +51 -51
  97. package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
  98. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
  99. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +33 -33
  100. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +50 -50
  101. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +55 -55
  102. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +55 -55
  103. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
  104. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +78 -78
  105. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +82 -82
  106. package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
  107. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
  108. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
  109. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
  110. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
  111. package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
  112. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
  113. package/docs-site-docusaurus/docs/api/classes/Queue.md +112 -60
  114. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +708 -206
  115. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
  116. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +79 -79
  117. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
  118. package/docs-site-docusaurus/docs/api/classes/SkipList.md +44 -44
  119. package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
  120. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +236 -33
  121. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +162 -46
  122. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +232 -32
  123. package/docs-site-docusaurus/docs/api/classes/Trie.md +47 -47
  124. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  125. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +81 -81
  126. package/docs-site-docusaurus/docs/guide/architecture.md +75 -5
  127. package/docs-site-docusaurus/docs/guide/concepts.md +53 -3
  128. package/docs-site-docusaurus/docs/guide/faq.md +233 -0
  129. package/docs-site-docusaurus/docs/guide/guides.md +43 -58
  130. package/docs-site-docusaurus/docs/guide/installation.md +2 -0
  131. package/docs-site-docusaurus/docs/guide/integrations.md +75 -176
  132. package/docs-site-docusaurus/docs/guide/overview.md +132 -11
  133. package/docs-site-docusaurus/docs/guide/performance.md +2 -0
  134. package/docs-site-docusaurus/docs/guide/quick-start.md +31 -0
  135. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  136. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  137. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  138. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  139. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  140. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  141. package/docs-site-docusaurus/docusaurus.config.ts +1 -1
  142. package/docs-site-docusaurus/src/pages/index.tsx +55 -2
  143. package/docs-site-docusaurus/static/llms.txt +37 -0
  144. package/docs-site-docusaurus/typedoc.json +1 -0
  145. package/llms.txt +37 -0
  146. package/package.json +65 -56
  147. package/src/common/error.ts +19 -1
  148. package/src/common/index.ts +1 -1
  149. package/src/data-structures/base/iterable-element-base.ts +3 -2
  150. package/src/data-structures/binary-tree/avl-tree.ts +99 -5
  151. package/src/data-structures/binary-tree/binary-indexed-tree.ts +102 -4
  152. package/src/data-structures/binary-tree/binary-tree.ts +239 -78
  153. package/src/data-structures/binary-tree/bst.ts +542 -13
  154. package/src/data-structures/binary-tree/red-black-tree.ts +155 -15
  155. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  156. package/src/data-structures/binary-tree/tree-map.ts +1223 -261
  157. package/src/data-structures/binary-tree/tree-multi-map.ts +939 -30
  158. package/src/data-structures/binary-tree/tree-multi-set.ts +746 -10
  159. package/src/data-structures/binary-tree/tree-set.ts +1018 -99
  160. package/src/data-structures/graph/abstract-graph.ts +2 -2
  161. package/src/data-structures/graph/directed-graph.ts +71 -1
  162. package/src/data-structures/graph/undirected-graph.ts +64 -1
  163. package/src/data-structures/hash/hash-map.ts +102 -16
  164. package/src/data-structures/heap/heap.ts +153 -23
  165. package/src/data-structures/heap/max-heap.ts +2 -2
  166. package/src/data-structures/linked-list/doubly-linked-list.ts +139 -0
  167. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  168. package/src/data-structures/linked-list/skip-linked-list.ts +131 -5
  169. package/src/data-structures/matrix/matrix.ts +65 -9
  170. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  171. package/src/data-structures/queue/deque.ts +130 -0
  172. package/src/data-structures/queue/queue.ts +109 -0
  173. package/src/data-structures/stack/stack.ts +75 -5
  174. package/src/data-structures/trie/trie.ts +86 -2
  175. package/src/interfaces/binary-tree.ts +1 -9
  176. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  177. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  178. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  179. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  180. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
  181. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
  182. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
  183. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
  184. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
@@ -56,6 +56,14 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
56
56
 
57
57
 
58
58
 
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
59
67
 
60
68
 
61
69
 
@@ -214,19 +222,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
214
222
 
215
223
 
216
224
 
217
- * @example
218
- * // Check empty
219
- * console.log(new TreeMultiSet().isEmpty()); // true;
220
- */
221
- isEmpty(): boolean;
222
- /**
223
- * Whether the multiset contains the given key.
224
- * @remarks Time O(log n), Space O(1)
225
-
226
-
227
-
228
-
229
-
230
225
 
231
226
 
232
227
 
@@ -267,6 +262,14 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
267
262
 
268
263
 
269
264
 
265
+ * @example
266
+ * // Check empty
267
+ * console.log(new TreeMultiSet().isEmpty()); // true;
268
+ */
269
+ isEmpty(): boolean;
270
+ /**
271
+ * Whether the multiset contains the given key.
272
+ * @remarks Time O(log n), Space O(1)
270
273
 
271
274
 
272
275
 
@@ -363,17 +366,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
363
366
 
364
367
 
365
368
 
366
- * @example
367
- * // Check existence
368
- * const ms = new TreeMultiSet<number>();
369
- * ms.add(1);
370
- * console.log(ms.has(1)); // true;
371
- * console.log(ms.has(2)); // false;
372
- */
373
- has(key: K): boolean;
374
- /**
375
- * Returns the count of occurrences for the given key.
376
- * @remarks Time O(log n), Space O(1)
377
369
 
378
370
 
379
371
 
@@ -396,17 +388,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
396
388
 
397
389
 
398
390
 
399
- * @example
400
- * // Get occurrence count
401
- * const ms = new TreeMultiSet<number>();
402
- * ms.add(1, 5);
403
- * console.log(ms.count(1)); // 5;
404
- */
405
- count(key: K): number;
406
- /**
407
- * Add `n` occurrences of `key`.
408
- * @returns True if the multiset changed.
409
- * @remarks Time O(log n), Space O(1)
410
391
 
411
392
 
412
393
 
@@ -470,6 +451,17 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
470
451
 
471
452
 
472
453
 
454
+ * @example
455
+ * // Check existence
456
+ * const ms = new TreeMultiSet<number>();
457
+ * ms.add(1);
458
+ * console.log(ms.has(1)); // true;
459
+ * console.log(ms.has(2)); // false;
460
+ */
461
+ has(key: K): boolean;
462
+ /**
463
+ * Returns the count of occurrences for the given key.
464
+ * @remarks Time O(log n), Space O(1)
473
465
 
474
466
 
475
467
 
@@ -500,6 +492,17 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
500
492
 
501
493
 
502
494
 
495
+ * @example
496
+ * // Get occurrence count
497
+ * const ms = new TreeMultiSet<number>();
498
+ * ms.add(1, 5);
499
+ * console.log(ms.count(1)); // 5;
500
+ */
501
+ count(key: K): number;
502
+ /**
503
+ * Add `n` occurrences of `key`.
504
+ * @returns True if the multiset changed.
505
+ * @remarks Time O(log n), Space O(1)
503
506
 
504
507
 
505
508
 
@@ -539,20 +542,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
539
542
 
540
543
 
541
544
 
542
- * @example
543
- * // Add elements
544
- * const ms = new TreeMultiSet<number>();
545
- * ms.add(1);
546
- * ms.add(1);
547
- * ms.add(2);
548
- * console.log(ms.count(1)); // 2;
549
- * console.log(ms.size); // 3;
550
- */
551
- add(key: K, n?: number): boolean;
552
- /**
553
- * Set count for `key` to exactly `n`.
554
- * @returns True if changed.
555
- * @remarks Time O(log n), Space O(1)
556
545
 
557
546
 
558
547
 
@@ -575,17 +564,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
575
564
 
576
565
 
577
566
 
578
- * @example
579
- * // Set occurrence count
580
- * const ms = new TreeMultiSet<number>();
581
- * ms.setCount(1, 3);
582
- * console.log(ms.count(1)); // 3;
583
- */
584
- setCount(key: K, n: number): boolean;
585
- /**
586
- * Delete `n` occurrences of `key` (default 1).
587
- * @returns True if any occurrence was removed.
588
- * @remarks Time O(log n), Space O(1)
589
567
 
590
568
 
591
569
 
@@ -697,6 +675,20 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
697
675
 
698
676
 
699
677
 
678
+ * @example
679
+ * // Add elements
680
+ * const ms = new TreeMultiSet<number>();
681
+ * ms.add(1);
682
+ * ms.add(1);
683
+ * ms.add(2);
684
+ * console.log(ms.count(1)); // 2;
685
+ * console.log(ms.size); // 3;
686
+ */
687
+ add(key: K, n?: number): boolean;
688
+ /**
689
+ * Set count for `key` to exactly `n`.
690
+ * @returns True if changed.
691
+ * @remarks Time O(log n), Space O(1)
700
692
 
701
693
 
702
694
 
@@ -728,15 +720,14 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
728
720
 
729
721
 
730
722
  * @example
731
- * // Remove one occurrence
723
+ * // Set occurrence count
732
724
  * const ms = new TreeMultiSet<number>();
733
- * ms.add(1, 3);
734
- * ms.delete(1);
735
- * console.log(ms.count(1)); // 2;
725
+ * ms.setCount(1, 3);
726
+ * console.log(ms.count(1)); // 3;
736
727
  */
737
- delete(key: K, n?: number): boolean;
728
+ setCount(key: K, n: number): boolean;
738
729
  /**
739
- * Delete all occurrences of the given key.
730
+ * Delete `n` occurrences of `key` (default 1).
740
731
  * @returns True if any occurrence was removed.
741
732
  * @remarks Time O(log n), Space O(1)
742
733
 
@@ -761,18 +752,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
761
752
 
762
753
 
763
754
 
764
- * @example
765
- * // Remove all occurrences
766
- * const ms = new TreeMultiSet<number>();
767
- * ms.add(1, 3);
768
- * ms.deleteAll(1);
769
- * console.log(ms.has(1)); // false;
770
- */
771
- deleteAll(key: K): boolean;
772
- /**
773
- * Iterates over distinct keys (each key yielded once).
774
- * @remarks Time O(n), Space O(1)
775
-
776
755
 
777
756
 
778
757
 
@@ -794,17 +773,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
794
773
 
795
774
 
796
775
 
797
- * @example
798
- * // Iterate unique keys
799
- * const ms = new TreeMultiSet<number>();
800
- * ms.add(1, 2);
801
- * ms.add(2);
802
- * console.log([...ms.keysDistinct()]); // [1, 2];
803
- */
804
- keysDistinct(): IterableIterator<K>;
805
- /**
806
- * Iterates over entries as [key, count] pairs.
807
- * @remarks Time O(n), Space O(1)
808
776
 
809
777
 
810
778
 
@@ -944,20 +912,17 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
944
912
 
945
913
 
946
914
  * @example
947
- * // Iterate entries
915
+ * // Remove one occurrence
948
916
  * const ms = new TreeMultiSet<number>();
949
- * ms.add(1, 2);
950
- * console.log([...ms.entries()].length); // > 0;
951
- */
952
- entries(): IterableIterator<[K, number]>;
953
- /**
954
- * Expanded iteration (default). Each key is yielded `count(key)` times.
955
- * @remarks Time O(size), Space O(1) where size is total occurrences
917
+ * ms.add(1, 3);
918
+ * ms.delete(1);
919
+ * console.log(ms.count(1)); // 2;
956
920
  */
957
- [Symbol.iterator](): Iterator<K>;
921
+ delete(key: K, n?: number): boolean;
958
922
  /**
959
- * Returns an array with all elements (expanded).
960
- * @remarks Time O(size), Space O(size)
923
+ * Delete all occurrences of the given key.
924
+ * @returns True if any occurrence was removed.
925
+ * @remarks Time O(log n), Space O(1)
961
926
 
962
927
 
963
928
 
@@ -988,6 +953,17 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
988
953
 
989
954
 
990
955
 
956
+ * @example
957
+ * // Remove all occurrences
958
+ * const ms = new TreeMultiSet<number>();
959
+ * ms.add(1, 3);
960
+ * ms.deleteAll(1);
961
+ * console.log(ms.has(1)); // false;
962
+ */
963
+ deleteAll(key: K): boolean;
964
+ /**
965
+ * Iterates over distinct keys (each key yielded once).
966
+ * @remarks Time O(n), Space O(1)
991
967
 
992
968
 
993
969
 
@@ -1018,6 +994,17 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1018
994
 
1019
995
 
1020
996
 
997
+ * @example
998
+ * // Iterate unique keys
999
+ * const ms = new TreeMultiSet<number>();
1000
+ * ms.add(1, 2);
1001
+ * ms.add(2);
1002
+ * console.log([...ms.keysDistinct()]); // [1, 2];
1003
+ */
1004
+ keysDistinct(): IterableIterator<K>;
1005
+ /**
1006
+ * Iterates over entries as [key, count] pairs.
1007
+ * @remarks Time O(n), Space O(1)
1021
1008
 
1022
1009
 
1023
1010
 
@@ -1096,17 +1083,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1096
1083
 
1097
1084
 
1098
1085
 
1099
- * @example
1100
- * // All elements (with duplicates)
1101
- * const ms = new TreeMultiSet<number>();
1102
- * ms.add(1, 2);
1103
- * ms.add(2);
1104
- * console.log(ms.toArray()); // [1, 1, 2];
1105
- */
1106
- toArray(): K[];
1107
- /**
1108
- * Returns an array with distinct keys only.
1109
- * @remarks Time O(n), Space O(n)
1110
1086
 
1111
1087
 
1112
1088
 
@@ -1129,17 +1105,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1129
1105
 
1130
1106
 
1131
1107
 
1132
- * @example
1133
- * // Unique keys only
1134
- * const ms = new TreeMultiSet<number>();
1135
- * ms.add(1, 3);
1136
- * ms.add(2);
1137
- * console.log(ms.toDistinctArray()); // [1, 2];
1138
- */
1139
- toDistinctArray(): K[];
1140
- /**
1141
- * Returns an array of [key, count] entries.
1142
- * @remarks Time O(n), Space O(n)
1143
1108
 
1144
1109
 
1145
1110
 
@@ -1162,23 +1127,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1162
1127
 
1163
1128
 
1164
1129
 
1165
- * @example
1166
- * // Key-count pairs
1167
- * const ms = new TreeMultiSet<number>();
1168
- * ms.add(1, 2);
1169
- * ms.add(3);
1170
- * console.log(ms.toEntries()); // [[1, 2], [3, 1]];
1171
- */
1172
- toEntries(): Array<[K, number]>;
1173
- /**
1174
- * Expose comparator for advanced usage/testing (read-only).
1175
- * @remarks Time O(1), Space O(1)
1176
- */
1177
- get comparator(): Comparator<K>;
1178
- /**
1179
- * Remove all elements from the multiset.
1180
- * @remarks Time O(1), Space O(1)
1181
-
1182
1130
 
1183
1131
 
1184
1132
 
@@ -1235,6 +1183,21 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1235
1183
 
1236
1184
 
1237
1185
 
1186
+ * @example
1187
+ * // Iterate entries
1188
+ * const ms = new TreeMultiSet<number>();
1189
+ * ms.add(1, 2);
1190
+ * console.log([...ms.entries()].length); // > 0;
1191
+ */
1192
+ entries(): IterableIterator<[K, number]>;
1193
+ /**
1194
+ * Expanded iteration (default). Each key is yielded `count(key)` times.
1195
+ * @remarks Time O(size), Space O(1) where size is total occurrences
1196
+ */
1197
+ [Symbol.iterator](): Iterator<K>;
1198
+ /**
1199
+ * Returns an array with all elements (expanded).
1200
+ * @remarks Time O(size), Space O(size)
1238
1201
 
1239
1202
 
1240
1203
 
@@ -1317,18 +1280,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1317
1280
 
1318
1281
 
1319
1282
 
1320
- * @example
1321
- * // Remove all
1322
- * const ms = new TreeMultiSet<number>();
1323
- * ms.add(1);
1324
- * ms.clear();
1325
- * console.log(ms.isEmpty()); // true;
1326
- */
1327
- clear(): void;
1328
- /**
1329
- * Returns the smallest key, or undefined if empty.
1330
- * @remarks Time O(log n), Space O(1)
1331
-
1332
1283
 
1333
1284
 
1334
1285
 
@@ -1351,9 +1302,402 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1351
1302
 
1352
1303
 
1353
1304
 
1354
- * @example
1355
- * // Smallest element
1356
- * const ms = new TreeMultiSet<number>();
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+ * @example
1380
+ * // All elements (with duplicates)
1381
+ * const ms = new TreeMultiSet<number>();
1382
+ * ms.add(1, 2);
1383
+ * ms.add(2);
1384
+ * console.log(ms.toArray()); // [1, 1, 2];
1385
+ */
1386
+ toArray(): K[];
1387
+ /**
1388
+ * Returns an array with distinct keys only.
1389
+ * @remarks Time O(n), Space O(n)
1390
+
1391
+
1392
+
1393
+
1394
+
1395
+
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+ * @example
1421
+ * // Unique keys only
1422
+ * const ms = new TreeMultiSet<number>();
1423
+ * ms.add(1, 3);
1424
+ * ms.add(2);
1425
+ * console.log(ms.toDistinctArray()); // [1, 2];
1426
+ */
1427
+ toDistinctArray(): K[];
1428
+ /**
1429
+ * Returns an array of [key, count] entries.
1430
+ * @remarks Time O(n), Space O(n)
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+ * @example
1462
+ * // Key-count pairs
1463
+ * const ms = new TreeMultiSet<number>();
1464
+ * ms.add(1, 2);
1465
+ * ms.add(3);
1466
+ * console.log(ms.toEntries()); // [[1, 2], [3, 1]];
1467
+ */
1468
+ toEntries(): Array<[K, number]>;
1469
+ /**
1470
+ * Expose comparator for advanced usage/testing (read-only).
1471
+ * @remarks Time O(1), Space O(1)
1472
+ */
1473
+ get comparator(): Comparator<K>;
1474
+ /**
1475
+ * Remove all elements from the multiset.
1476
+ * @remarks Time O(1), Space O(1)
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+
1587
+
1588
+
1589
+
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+ * @example
1657
+ * // Remove all
1658
+ * const ms = new TreeMultiSet<number>();
1659
+ * ms.add(1);
1660
+ * ms.clear();
1661
+ * console.log(ms.isEmpty()); // true;
1662
+ */
1663
+ clear(): void;
1664
+ /**
1665
+ * Returns the smallest key, or undefined if empty.
1666
+ * @remarks Time O(log n), Space O(1)
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+ * @example
1699
+ * // Smallest element
1700
+ * const ms = new TreeMultiSet<number>();
1357
1701
  * ms.add(3);
1358
1702
  * ms.add(1);
1359
1703
  * console.log(ms.first()); // 1;
@@ -1364,6 +1708,252 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1364
1708
  * @remarks Time O(log n), Space O(1)
1365
1709
 
1366
1710
 
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+
1740
+ * @example
1741
+ * // Largest element
1742
+ * const ms = new TreeMultiSet<number>();
1743
+ * ms.add(1);
1744
+ * ms.add(3);
1745
+ * console.log(ms.last()); // 3;
1746
+ */
1747
+ last(): K | undefined;
1748
+ /**
1749
+ * Removes all occurrences of the smallest key and returns it.
1750
+ * @remarks Time O(log n), Space O(1)
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+ * @example
1783
+ * // Remove and return smallest
1784
+ * const ms = new TreeMultiSet<number>();
1785
+ * ms.add(2);
1786
+ * ms.add(1);
1787
+ * console.log(ms.pollFirst()); // 1;
1788
+ * console.log(ms.has(1)); // false;
1789
+ */
1790
+ pollFirst(): K | undefined;
1791
+ /**
1792
+ * Removes all occurrences of the largest key and returns it.
1793
+ * @remarks Time O(log n), Space O(1)
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1809
+
1810
+
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+ * @example
1826
+ * // Remove and return largest
1827
+ * const ms = new TreeMultiSet<number>();
1828
+ * ms.add(1);
1829
+ * ms.add(3);
1830
+ * console.log(ms.pollLast()); // 3;
1831
+ */
1832
+ pollLast(): K | undefined;
1833
+ /**
1834
+ * Returns the smallest key >= given key, or undefined.
1835
+ * @remarks Time O(log n), Space O(1)
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+
1846
+
1847
+
1848
+
1849
+
1850
+
1851
+
1852
+
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+
1911
+
1912
+
1913
+
1914
+
1915
+
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1367
1957
 
1368
1958
 
1369
1959
 
@@ -1386,15 +1976,16 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1386
1976
 
1387
1977
 
1388
1978
  * @example
1389
- * // Largest element
1979
+ * // Least key ≥ target
1390
1980
  * const ms = new TreeMultiSet<number>();
1391
- * ms.add(1);
1392
- * ms.add(3);
1393
- * console.log(ms.last()); // 3;
1981
+ * ms.add(10);
1982
+ * ms.add(20);
1983
+ * ms.add(30);
1984
+ * console.log(ms.ceiling(15)); // 20;
1394
1985
  */
1395
- last(): K | undefined;
1986
+ ceiling(key: K): K | undefined;
1396
1987
  /**
1397
- * Removes all occurrences of the smallest key and returns it.
1988
+ * Returns the largest key <= given key, or undefined.
1398
1989
  * @remarks Time O(log n), Space O(1)
1399
1990
 
1400
1991
 
@@ -1416,20 +2007,139 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1416
2007
 
1417
2008
 
1418
2009
 
2010
+
2011
+
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
2019
+
2020
+
2021
+
2022
+
2023
+
2024
+
2025
+
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+
2056
+
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
1419
2129
 
1420
2130
 
1421
2131
 
1422
2132
  * @example
1423
- * // Remove and return smallest
2133
+ * // Greatest key target
1424
2134
  * const ms = new TreeMultiSet<number>();
1425
- * ms.add(2);
1426
- * ms.add(1);
1427
- * console.log(ms.pollFirst()); // 1;
1428
- * console.log(ms.has(1)); // false;
2135
+ * ms.add(10);
2136
+ * ms.add(20);
2137
+ * ms.add(30);
2138
+ * console.log(ms.floor(25)); // 20;
1429
2139
  */
1430
- pollFirst(): K | undefined;
2140
+ floor(key: K): K | undefined;
1431
2141
  /**
1432
- * Removes all occurrences of the largest key and returns it.
2142
+ * Returns the smallest key > given key, or undefined.
1433
2143
  * @remarks Time O(log n), Space O(1)
1434
2144
 
1435
2145
 
@@ -1454,18 +2164,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1454
2164
 
1455
2165
 
1456
2166
 
1457
- * @example
1458
- * // Remove and return largest
1459
- * const ms = new TreeMultiSet<number>();
1460
- * ms.add(1);
1461
- * ms.add(3);
1462
- * console.log(ms.pollLast()); // 3;
1463
- */
1464
- pollLast(): K | undefined;
1465
- /**
1466
- * Returns the smallest key >= given key, or undefined.
1467
- * @remarks Time O(log n), Space O(1)
1468
-
1469
2167
 
1470
2168
 
1471
2169
 
@@ -1575,19 +2273,60 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1575
2273
 
1576
2274
 
1577
2275
 
1578
- * @example
1579
- * // Least key ≥ target
1580
- * const ms = new TreeMultiSet<number>();
1581
- * ms.add(10);
1582
- * ms.add(20);
1583
- * ms.add(30);
1584
- * console.log(ms.ceiling(15)); // 20;
1585
- */
1586
- ceiling(key: K): K | undefined;
1587
- /**
1588
- * Returns the largest key <= given key, or undefined.
1589
- * @remarks Time O(log n), Space O(1)
1590
-
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+ * @example
2287
+ * // Least key > target
2288
+ * const ms = new TreeMultiSet<number>();
2289
+ * ms.add(10);
2290
+ * ms.add(20);
2291
+ * console.log(ms.higher(10)); // 20;
2292
+ */
2293
+ higher(key: K): K | undefined;
2294
+ /**
2295
+ * Returns the largest key < given key, or undefined.
2296
+ * @remarks Time O(log n), Space O(1)
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
1591
2330
 
1592
2331
 
1593
2332
 
@@ -1698,17 +2437,16 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1698
2437
 
1699
2438
 
1700
2439
  * @example
1701
- * // Greatest key target
2440
+ * // Greatest key < target
1702
2441
  * const ms = new TreeMultiSet<number>();
1703
2442
  * ms.add(10);
1704
2443
  * ms.add(20);
1705
- * ms.add(30);
1706
- * console.log(ms.floor(25)); // 20;
2444
+ * console.log(ms.lower(20)); // 10;
1707
2445
  */
1708
- floor(key: K): K | undefined;
2446
+ lower(key: K): K | undefined;
1709
2447
  /**
1710
- * Returns the smallest key > given key, or undefined.
1711
- * @remarks Time O(log n), Space O(1)
2448
+ * Iterates over distinct keys with their counts.
2449
+ * @remarks Time O(n), Space O(1)
1712
2450
 
1713
2451
 
1714
2452
 
@@ -1819,18 +2557,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1819
2557
 
1820
2558
 
1821
2559
 
1822
- * @example
1823
- * // Least key > target
1824
- * const ms = new TreeMultiSet<number>();
1825
- * ms.add(10);
1826
- * ms.add(20);
1827
- * console.log(ms.higher(10)); // 20;
1828
- */
1829
- higher(key: K): K | undefined;
1830
- /**
1831
- * Returns the largest key < given key, or undefined.
1832
- * @remarks Time O(log n), Space O(1)
1833
-
1834
2560
 
1835
2561
 
1836
2562
 
@@ -1900,6 +2626,20 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1900
2626
 
1901
2627
 
1902
2628
 
2629
+ * @example
2630
+ * // Iterate
2631
+ * const ms = new TreeMultiSet<number>();
2632
+ * ms.add(1, 2);
2633
+ * ms.add(2);
2634
+ * const pairs: [number, number][] = [];
2635
+ * ms.forEach((k, c) => pairs.push([k, c]));
2636
+ * console.log(pairs); // [[1, 2], [2, 1]];
2637
+ */
2638
+ forEach(callback: (key: K, count: number) => void): void;
2639
+ /**
2640
+ * Creates a new TreeMultiSet with entries that match the predicate.
2641
+ * @remarks Time O(n log n), Space O(n)
2642
+
1903
2643
 
1904
2644
 
1905
2645
 
@@ -1940,18 +2680,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1940
2680
 
1941
2681
 
1942
2682
 
1943
- * @example
1944
- * // Greatest key < target
1945
- * const ms = new TreeMultiSet<number>();
1946
- * ms.add(10);
1947
- * ms.add(20);
1948
- * console.log(ms.lower(20)); // 10;
1949
- */
1950
- lower(key: K): K | undefined;
1951
- /**
1952
- * Iterates over distinct keys with their counts.
1953
- * @remarks Time O(n), Space O(1)
1954
-
1955
2683
 
1956
2684
 
1957
2685
 
@@ -2091,18 +2819,18 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2091
2819
 
2092
2820
 
2093
2821
  * @example
2094
- * // Iterate
2822
+ * // Filter
2095
2823
  * const ms = new TreeMultiSet<number>();
2096
- * ms.add(1, 2);
2097
- * ms.add(2);
2098
- * const pairs: [number, number][] = [];
2099
- * ms.forEach((k, c) => pairs.push([k, c]));
2100
- * console.log(pairs); // [[1, 2], [2, 1]];
2824
+ * ms.add(1, 3);
2825
+ * ms.add(2, 1);
2826
+ * ms.add(3, 2);
2827
+ * const filtered = ms.filter((k, c) => c > 1);
2828
+ * console.log([...filtered.keysDistinct()]); // [1, 3];
2101
2829
  */
2102
- forEach(callback: (key: K, count: number) => void): void;
2830
+ filter(predicate: (key: K, count: number) => boolean): TreeMultiSet<K>;
2103
2831
  /**
2104
- * Creates a new TreeMultiSet with entries that match the predicate.
2105
- * @remarks Time O(n log n), Space O(n)
2832
+ * Reduces the multiset to a single value.
2833
+ * @remarks Time O(n), Space O(1)
2106
2834
 
2107
2835
 
2108
2836
 
@@ -2242,28 +2970,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2242
2970
 
2243
2971
 
2244
2972
 
2245
- * @example
2246
- * // Filter
2247
- * const ms = new TreeMultiSet<number>();
2248
- * ms.add(1, 3);
2249
- * ms.add(2, 1);
2250
- * ms.add(3, 2);
2251
- * const filtered = ms.filter((k, c) => c > 1);
2252
- * console.log([...filtered.keysDistinct()]); // [1, 3];
2253
- */
2254
- filter(predicate: (key: K, count: number) => boolean): TreeMultiSet<K>;
2255
- /**
2256
- * Reduces the multiset to a single value.
2257
- * @remarks Time O(n), Space O(1)
2258
-
2259
-
2260
-
2261
-
2262
-
2263
-
2264
-
2265
-
2266
-
2267
2973
 
2268
2974
 
2269
2975
 
@@ -2304,6 +3010,20 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2304
3010
 
2305
3011
 
2306
3012
 
3013
+ * @example
3014
+ * // Aggregate
3015
+ * const ms = new TreeMultiSet<number>();
3016
+ * ms.add(1, 2);
3017
+ * ms.add(2, 3);
3018
+ * const sum = ms.reduce((acc, k, c) => acc + k * c, 0);
3019
+ * console.log(sum); // 8;
3020
+ */
3021
+ reduce<U>(callback: (accumulator: U, key: K, count: number) => U, initialValue: U): U;
3022
+ /**
3023
+ * Maps keys and counts to a new TreeMultiSet.
3024
+ * When multiple keys map to the same new key, counts are merged (added).
3025
+ * @remarks Time O(n log n), Space O(n)
3026
+
2307
3027
 
2308
3028
 
2309
3029
 
@@ -2394,20 +3114,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2394
3114
 
2395
3115
 
2396
3116
 
2397
- * @example
2398
- * // Aggregate
2399
- * const ms = new TreeMultiSet<number>();
2400
- * ms.add(1, 2);
2401
- * ms.add(2, 3);
2402
- * const sum = ms.reduce((acc, k, c) => acc + k * c, 0);
2403
- * console.log(sum); // 8;
2404
- */
2405
- reduce<U>(callback: (accumulator: U, key: K, count: number) => U, initialValue: U): U;
2406
- /**
2407
- * Maps keys and counts to a new TreeMultiSet.
2408
- * When multiple keys map to the same new key, counts are merged (added).
2409
- * @remarks Time O(n log n), Space O(n)
2410
-
2411
3117
 
2412
3118
 
2413
3119
 
@@ -2496,6 +3202,21 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2496
3202
 
2497
3203
 
2498
3204
 
3205
+ * @example
3206
+ * // Transform
3207
+ * const ms = new TreeMultiSet<number>();
3208
+ * ms.add(1, 2);
3209
+ * ms.add(2, 3);
3210
+ * const doubled = ms.map((k, c) => [k * 10, c] as [number, number]);
3211
+ * console.log([...doubled.keysDistinct()]); // [10, 20];
3212
+ */
3213
+ map<K2>(mapper: (key: K, count: number) => [K2, number], options?: {
3214
+ comparator?: Comparator<K2>;
3215
+ }): TreeMultiSet<K2>;
3216
+ /**
3217
+ * Creates an independent copy of this multiset.
3218
+ * @remarks Time O(n log n), Space O(n)
3219
+
2499
3220
 
2500
3221
 
2501
3222
 
@@ -2546,21 +3267,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2546
3267
 
2547
3268
 
2548
3269
 
2549
- * @example
2550
- * // Transform
2551
- * const ms = new TreeMultiSet<number>();
2552
- * ms.add(1, 2);
2553
- * ms.add(2, 3);
2554
- * const doubled = ms.map((k, c) => [k * 10, c] as [number, number]);
2555
- * console.log([...doubled.keysDistinct()]); // [10, 20];
2556
- */
2557
- map<K2>(mapper: (key: K, count: number) => [K2, number], options?: {
2558
- comparator?: Comparator<K2>;
2559
- }): TreeMultiSet<K2>;
2560
- /**
2561
- * Creates an independent copy of this multiset.
2562
- * @remarks Time O(n log n), Space O(n)
2563
-
2564
3270
 
2565
3271
 
2566
3272
 
@@ -2667,6 +3373,94 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2667
3373
 
2668
3374
 
2669
3375
 
3376
+ * @example
3377
+ * // Order-statistic on BST
3378
+ * const tree = new TreeMultiSet<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
3379
+ * console.log(tree.getByRank(0)); // 10;
3380
+ * console.log(tree.getByRank(4)); // 50;
3381
+ * console.log(tree.getRank(30)); // 2;
3382
+ */
3383
+ getByRank(k: number): K | undefined;
3384
+ /**
3385
+ * Get the rank of a key in sorted order
3386
+ * @example
3387
+ * // Get the rank of a key in sorted order
3388
+ * const tree = new TreeMultiSet<number>(
3389
+ * [10, 20, 30, 40, 50],
3390
+ * { enableOrderStatistic: true }
3391
+ * );
3392
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
3393
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
3394
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
3395
+ * console.log(tree.getRank(25)); // 2;
3396
+ */
3397
+ getRank(key: K): number;
3398
+ /**
3399
+ * Get elements by rank range
3400
+
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+ * @example
3410
+ * // Pagination by position in tree order
3411
+ * const tree = new TreeMultiSet<number>(
3412
+ * [10, 20, 30, 40, 50, 60, 70, 80, 90],
3413
+ * { enableOrderStatistic: true }
3414
+ * );
3415
+ * const pageSize = 3;
3416
+ *
3417
+ * // Page 1
3418
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
3419
+ * // Page 2
3420
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
3421
+ * // Page 3
3422
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
3423
+ */
3424
+ rangeByRank(start: number, end: number): K[];
3425
+ /**
3426
+ * Deep copy
3427
+
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+ * @example
3452
+ * // Deep clone
3453
+ * const ms = new TreeMultiSet<number>();
3454
+ * ms.add(1, 3);
3455
+ * const copy = ms.clone();
3456
+ * copy.deleteAll(1);
3457
+ * console.log(ms.has(1)); // true;
3458
+ */
3459
+ clone(): TreeMultiSet<K>;
3460
+ /**
3461
+ * Returns keys within the given range.
3462
+ * @remarks Time O(log n + k), Space O(k) where k is result size
3463
+
2670
3464
 
2671
3465
 
2672
3466
 
@@ -2699,19 +3493,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2699
3493
 
2700
3494
 
2701
3495
 
2702
- * @example
2703
- * // Deep clone
2704
- * const ms = new TreeMultiSet<number>();
2705
- * ms.add(1, 3);
2706
- * const copy = ms.clone();
2707
- * copy.deleteAll(1);
2708
- * console.log(ms.has(1)); // true;
2709
- */
2710
- clone(): TreeMultiSet<K>;
2711
- /**
2712
- * Returns keys within the given range.
2713
- * @remarks Time O(log n + k), Space O(k) where k is result size
2714
-
2715
3496
 
2716
3497
 
2717
3498
 
@@ -2952,6 +3733,46 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
2952
3733
 
2953
3734
 
2954
3735
 
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
2955
3776
 
2956
3777
 
2957
3778