data-structure-typed 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +3 -1
  7. package/README.md +63 -26
  8. package/dist/cjs/binary-tree.cjs +23698 -0
  9. package/dist/cjs/graph.cjs +5236 -0
  10. package/dist/cjs/hash.cjs +1262 -0
  11. package/dist/cjs/heap.cjs +1540 -0
  12. package/dist/cjs/index.cjs +28244 -14795
  13. package/dist/cjs/linked-list.cjs +4370 -0
  14. package/dist/cjs/matrix.cjs +1042 -0
  15. package/dist/cjs/priority-queue.cjs +1314 -0
  16. package/dist/cjs/queue.cjs +4090 -0
  17. package/dist/cjs/stack.cjs +861 -0
  18. package/dist/cjs/trie.cjs +1173 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +23730 -0
  20. package/dist/cjs-legacy/graph.cjs +5234 -0
  21. package/dist/cjs-legacy/hash.cjs +1262 -0
  22. package/dist/cjs-legacy/heap.cjs +1537 -0
  23. package/dist/cjs-legacy/index.cjs +28239 -14790
  24. package/dist/cjs-legacy/linked-list.cjs +4376 -0
  25. package/dist/cjs-legacy/matrix.cjs +1045 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1312 -0
  27. package/dist/cjs-legacy/queue.cjs +4088 -0
  28. package/dist/cjs-legacy/stack.cjs +861 -0
  29. package/dist/cjs-legacy/trie.cjs +1172 -0
  30. package/dist/esm/binary-tree.mjs +23683 -0
  31. package/dist/esm/graph.mjs +5223 -0
  32. package/dist/esm/hash.mjs +1259 -0
  33. package/dist/esm/heap.mjs +1534 -0
  34. package/dist/esm/index.mjs +28242 -14796
  35. package/dist/esm/linked-list.mjs +4363 -0
  36. package/dist/esm/matrix.mjs +1038 -0
  37. package/dist/esm/priority-queue.mjs +1310 -0
  38. package/dist/esm/queue.mjs +4086 -0
  39. package/dist/esm/stack.mjs +859 -0
  40. package/dist/esm/trie.mjs +1170 -0
  41. package/dist/esm-legacy/binary-tree.mjs +23715 -0
  42. package/dist/esm-legacy/graph.mjs +5221 -0
  43. package/dist/esm-legacy/hash.mjs +1259 -0
  44. package/dist/esm-legacy/heap.mjs +1531 -0
  45. package/dist/esm-legacy/index.mjs +28237 -14791
  46. package/dist/esm-legacy/linked-list.mjs +4369 -0
  47. package/dist/esm-legacy/matrix.mjs +1041 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1308 -0
  49. package/dist/esm-legacy/queue.mjs +4084 -0
  50. package/dist/esm-legacy/stack.mjs +859 -0
  51. package/dist/esm-legacy/trie.mjs +1169 -0
  52. package/dist/types/data-structures/base/index.d.ts +1 -0
  53. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  54. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  55. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +240 -0
  56. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +280 -0
  57. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +502 -2
  58. package/dist/types/data-structures/binary-tree/bst.d.ts +481 -1
  59. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +380 -0
  60. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +120 -1
  61. package/dist/types/data-structures/binary-tree/tree-map.d.ts +2764 -384
  62. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2753 -353
  63. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2241 -321
  64. package/dist/types/data-structures/binary-tree/tree-set.d.ts +2554 -274
  65. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  66. package/dist/types/data-structures/graph/directed-graph.d.ts +200 -0
  67. package/dist/types/data-structures/graph/undirected-graph.d.ts +180 -0
  68. package/dist/types/data-structures/hash/hash-map.d.ts +230 -10
  69. package/dist/types/data-structures/heap/heap.d.ts +280 -0
  70. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +343 -3
  71. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +303 -3
  72. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +362 -2
  73. package/dist/types/data-structures/matrix/matrix.d.ts +160 -0
  74. package/dist/types/data-structures/queue/deque.d.ts +304 -4
  75. package/dist/types/data-structures/queue/queue.d.ts +240 -0
  76. package/dist/types/data-structures/stack/stack.d.ts +200 -0
  77. package/dist/types/data-structures/trie/trie.d.ts +244 -4
  78. package/dist/types/interfaces/graph.d.ts +1 -1
  79. package/dist/types/types/common.d.ts +2 -2
  80. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  81. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  82. package/dist/types/types/utils/validate-type.d.ts +4 -4
  83. package/dist/umd/data-structure-typed.js +28022 -14573
  84. package/dist/umd/data-structure-typed.min.js +9 -3
  85. package/docs-site-docusaurus/README.md +41 -0
  86. package/docs-site-docusaurus/docs/api/README.md +52 -0
  87. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  88. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  89. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  90. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  91. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  92. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  93. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  94. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  95. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  96. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  97. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  98. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  99. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  100. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  101. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  102. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  103. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  104. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  105. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  106. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  107. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  108. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  109. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  110. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  111. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  112. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  113. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  114. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  115. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  116. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  117. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  118. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  119. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  120. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  121. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  122. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  123. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  124. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  125. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  126. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  127. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  128. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  129. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  130. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  131. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  132. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  133. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  134. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  135. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  136. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  137. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  138. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  139. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  140. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  141. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  142. package/docs-site-docusaurus/package-lock.json +18667 -0
  143. package/docs-site-docusaurus/package.json +50 -0
  144. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  145. package/docs-site-docusaurus/sidebars.ts +23 -0
  146. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  147. package/docs-site-docusaurus/src/css/custom.css +96 -0
  148. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  149. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  150. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  151. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  152. package/docs-site-docusaurus/static/.nojekyll +0 -0
  153. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  154. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  155. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  156. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  157. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  158. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  159. package/docs-site-docusaurus/static/img/logo.png +0 -0
  160. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  161. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  162. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  163. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  164. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  165. package/docs-site-docusaurus/static/robots.txt +4 -0
  166. package/docs-site-docusaurus/typedoc.json +23 -0
  167. package/package.json +106 -10
  168. package/src/data-structures/base/index.ts +1 -0
  169. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  170. package/src/data-structures/base/linear-base.ts +3 -3
  171. package/src/data-structures/binary-tree/avl-tree.ts +240 -0
  172. package/src/data-structures/binary-tree/binary-indexed-tree.ts +281 -1
  173. package/src/data-structures/binary-tree/binary-tree.ts +502 -2
  174. package/src/data-structures/binary-tree/bst.ts +481 -1
  175. package/src/data-structures/binary-tree/red-black-tree.ts +380 -0
  176. package/src/data-structures/binary-tree/segment-tree.ts +121 -2
  177. package/src/data-structures/binary-tree/tree-map.ts +2862 -482
  178. package/src/data-structures/binary-tree/tree-multi-map.ts +2963 -563
  179. package/src/data-structures/binary-tree/tree-multi-set.ts +2399 -479
  180. package/src/data-structures/binary-tree/tree-set.ts +2685 -405
  181. package/src/data-structures/graph/abstract-graph.ts +4 -4
  182. package/src/data-structures/graph/directed-graph.ts +200 -0
  183. package/src/data-structures/graph/undirected-graph.ts +180 -0
  184. package/src/data-structures/hash/hash-map.ts +235 -15
  185. package/src/data-structures/heap/heap.ts +280 -0
  186. package/src/data-structures/linked-list/doubly-linked-list.ts +343 -3
  187. package/src/data-structures/linked-list/singly-linked-list.ts +303 -3
  188. package/src/data-structures/linked-list/skip-linked-list.ts +362 -2
  189. package/src/data-structures/matrix/matrix.ts +161 -1
  190. package/src/data-structures/queue/deque.ts +305 -5
  191. package/src/data-structures/queue/queue.ts +240 -0
  192. package/src/data-structures/stack/stack.ts +200 -0
  193. package/src/data-structures/trie/trie.ts +245 -5
  194. package/src/interfaces/graph.ts +1 -1
  195. package/src/types/common.ts +2 -2
  196. package/src/types/data-structures/heap/heap.ts +1 -0
  197. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  198. package/src/types/utils/validate-type.ts +4 -4
  199. package/vercel.json +6 -0
  200. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  201. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  202. package/dist/leetcode/avl-tree.mjs +0 -2720
  203. package/dist/leetcode/binary-tree.mjs +0 -1594
  204. package/dist/leetcode/bst.mjs +0 -2398
  205. package/dist/leetcode/deque.mjs +0 -683
  206. package/dist/leetcode/directed-graph.mjs +0 -1733
  207. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  208. package/dist/leetcode/hash-map.mjs +0 -493
  209. package/dist/leetcode/heap.mjs +0 -542
  210. package/dist/leetcode/max-heap.mjs +0 -375
  211. package/dist/leetcode/max-priority-queue.mjs +0 -383
  212. package/dist/leetcode/min-heap.mjs +0 -363
  213. package/dist/leetcode/min-priority-queue.mjs +0 -371
  214. package/dist/leetcode/priority-queue.mjs +0 -363
  215. package/dist/leetcode/queue.mjs +0 -943
  216. package/dist/leetcode/red-black-tree.mjs +0 -2765
  217. package/dist/leetcode/singly-linked-list.mjs +0 -754
  218. package/dist/leetcode/stack.mjs +0 -217
  219. package/dist/leetcode/tree-counter.mjs +0 -3039
  220. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  221. package/dist/leetcode/trie.mjs +0 -413
  222. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -44,6 +44,26 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
44
44
  * Number of distinct keys.
45
45
  * @remarks Time O(1), Space O(1)
46
46
 
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
47
67
 
48
68
  * @example
49
69
  * // Unique key count
@@ -94,14 +114,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
94
114
 
95
115
 
96
116
 
97
- * @example
98
- * // Check empty
99
- * console.log(new TreeMultiSet().isEmpty()); // true;
100
- */
101
- isEmpty(): boolean;
102
- /**
103
- * Whether the multiset contains the given key.
104
- * @remarks Time O(log n), Space O(1)
105
117
 
106
118
 
107
119
 
@@ -143,30 +155,8 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
143
155
 
144
156
 
145
157
 
146
- * @example
147
- * // Check existence
148
- * const ms = new TreeMultiSet<number>();
149
- * ms.add(1);
150
- * console.log(ms.has(1)); // true;
151
- * console.log(ms.has(2)); // false;
152
- */
153
- has(key: K): boolean;
154
- /**
155
- * Returns the count of occurrences for the given key.
156
- * @remarks Time O(log n), Space O(1)
157
158
 
158
159
 
159
- * @example
160
- * // Get occurrence count
161
- * const ms = new TreeMultiSet<number>();
162
- * ms.add(1, 5);
163
- * console.log(ms.count(1)); // 5;
164
- */
165
- count(key: K): number;
166
- /**
167
- * Add `n` occurrences of `key`.
168
- * @returns True if the multiset changed.
169
- * @remarks Time O(log n), Space O(1)
170
160
 
171
161
 
172
162
 
@@ -199,32 +189,38 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
199
189
 
200
190
 
201
191
 
202
- * @example
203
- * // Add elements
204
- * const ms = new TreeMultiSet<number>();
205
- * ms.add(1);
206
- * ms.add(1);
207
- * ms.add(2);
208
- * console.log(ms.count(1)); // 2;
209
- * console.log(ms.size); // 3;
210
- */
211
- add(key: K, n?: number): boolean;
212
- /**
213
- * Set count for `key` to exactly `n`.
214
- * @returns True if changed.
215
- * @remarks Time O(log n), Space O(1)
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
216
215
 
217
216
 
218
217
  * @example
219
- * // Set occurrence count
220
- * const ms = new TreeMultiSet<number>();
221
- * ms.setCount(1, 3);
222
- * console.log(ms.count(1)); // 3;
218
+ * // Check empty
219
+ * console.log(new TreeMultiSet().isEmpty()); // true;
223
220
  */
224
- setCount(key: K, n: number): boolean;
221
+ isEmpty(): boolean;
225
222
  /**
226
- * Delete `n` occurrences of `key` (default 1).
227
- * @returns True if any occurrence was removed.
223
+ * Whether the multiset contains the given key.
228
224
  * @remarks Time O(log n), Space O(1)
229
225
 
230
226
 
@@ -267,44 +263,10 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
267
263
 
268
264
 
269
265
 
270
- * @example
271
- * // Remove one occurrence
272
- * const ms = new TreeMultiSet<number>();
273
- * ms.add(1, 3);
274
- * ms.delete(1);
275
- * console.log(ms.count(1)); // 2;
276
- */
277
- delete(key: K, n?: number): boolean;
278
- /**
279
- * Delete all occurrences of the given key.
280
- * @returns True if any occurrence was removed.
281
- * @remarks Time O(log n), Space O(1)
282
266
 
283
267
 
284
- * @example
285
- * // Remove all occurrences
286
- * const ms = new TreeMultiSet<number>();
287
- * ms.add(1, 3);
288
- * ms.deleteAll(1);
289
- * console.log(ms.has(1)); // false;
290
- */
291
- deleteAll(key: K): boolean;
292
- /**
293
- * Iterates over distinct keys (each key yielded once).
294
- * @remarks Time O(n), Space O(1)
295
268
 
296
269
 
297
- * @example
298
- * // Iterate unique keys
299
- * const ms = new TreeMultiSet<number>();
300
- * ms.add(1, 2);
301
- * ms.add(2);
302
- * console.log([...ms.keysDistinct()]); // [1, 2];
303
- */
304
- keysDistinct(): IterableIterator<K>;
305
- /**
306
- * Iterates over entries as [key, count] pairs.
307
- * @remarks Time O(n), Space O(1)
308
270
 
309
271
 
310
272
 
@@ -343,21 +305,26 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
343
305
 
344
306
 
345
307
 
346
- * @example
347
- * // Iterate entries
348
- * const ms = new TreeMultiSet<number>();
349
- * ms.add(1, 2);
350
- * console.log([...ms.entries()].length); // > 0;
351
- */
352
- entries(): IterableIterator<[K, number]>;
353
- /**
354
- * Expanded iteration (default). Each key is yielded `count(key)` times.
355
- * @remarks Time O(size), Space O(1) where size is total occurrences
356
- */
357
- [Symbol.iterator](): Iterator<K>;
358
- /**
359
- * Returns an array with all elements (expanded).
360
- * @remarks Time O(size), Space O(size)
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
361
328
 
362
329
 
363
330
 
@@ -397,48 +364,2142 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
397
364
 
398
365
 
399
366
  * @example
400
- * // All elements (with duplicates)
367
+ * // Check existence
401
368
  * const ms = new TreeMultiSet<number>();
402
- * ms.add(1, 2);
403
- * ms.add(2);
404
- * console.log(ms.toArray()); // [1, 1, 2];
369
+ * ms.add(1);
370
+ * console.log(ms.has(1)); // true;
371
+ * console.log(ms.has(2)); // false;
405
372
  */
406
- toArray(): K[];
373
+ has(key: K): boolean;
407
374
  /**
408
- * Returns an array with distinct keys only.
409
- * @remarks Time O(n), Space O(n)
375
+ * Returns the count of occurrences for the given key.
376
+ * @remarks Time O(log n), Space O(1)
377
+
378
+
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
410
397
 
411
398
 
412
399
  * @example
413
- * // Unique keys only
400
+ * // Get occurrence count
414
401
  * const ms = new TreeMultiSet<number>();
415
- * ms.add(1, 3);
416
- * ms.add(2);
417
- * console.log(ms.toDistinctArray()); // [1, 2];
402
+ * ms.add(1, 5);
403
+ * console.log(ms.count(1)); // 5;
418
404
  */
419
- toDistinctArray(): K[];
405
+ count(key: K): number;
420
406
  /**
421
- * Returns an array of [key, count] entries.
422
- * @remarks Time O(n), Space O(n)
407
+ * Add `n` occurrences of `key`.
408
+ * @returns True if the multiset changed.
409
+ * @remarks Time O(log n), Space O(1)
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
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
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
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
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+ * @example
731
+ * // Remove one occurrence
732
+ * const ms = new TreeMultiSet<number>();
733
+ * ms.add(1, 3);
734
+ * ms.delete(1);
735
+ * console.log(ms.count(1)); // 2;
736
+ */
737
+ delete(key: K, n?: number): boolean;
738
+ /**
739
+ * Delete all occurrences of the given key.
740
+ * @returns True if any occurrence was removed.
741
+ * @remarks Time O(log n), Space O(1)
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
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
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
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
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+ * @example
947
+ * // Iterate entries
948
+ * 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
956
+ */
957
+ [Symbol.iterator](): Iterator<K>;
958
+ /**
959
+ * Returns an array with all elements (expanded).
960
+ * @remarks Time O(size), Space O(size)
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
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
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
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
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
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
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
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
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+ * @example
1355
+ * // Smallest element
1356
+ * const ms = new TreeMultiSet<number>();
1357
+ * ms.add(3);
1358
+ * ms.add(1);
1359
+ * console.log(ms.first()); // 1;
1360
+ */
1361
+ first(): K | undefined;
1362
+ /**
1363
+ * Returns the largest key, or undefined if empty.
1364
+ * @remarks Time O(log n), Space O(1)
1365
+
1366
+
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+ * @example
1389
+ * // Largest element
1390
+ * const ms = new TreeMultiSet<number>();
1391
+ * ms.add(1);
1392
+ * ms.add(3);
1393
+ * console.log(ms.last()); // 3;
1394
+ */
1395
+ last(): K | undefined;
1396
+ /**
1397
+ * Removes all occurrences of the smallest key and returns it.
1398
+ * @remarks Time O(log n), Space O(1)
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+ * @example
1423
+ * // Remove and return smallest
1424
+ * 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;
1429
+ */
1430
+ pollFirst(): K | undefined;
1431
+ /**
1432
+ * Removes all occurrences of the largest key and returns it.
1433
+ * @remarks Time O(log n), Space O(1)
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
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
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
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
+ * @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
+
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
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
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
+
1699
+
1700
+ * @example
1701
+ * // Greatest key ≤ target
1702
+ * const ms = new TreeMultiSet<number>();
1703
+ * ms.add(10);
1704
+ * ms.add(20);
1705
+ * ms.add(30);
1706
+ * console.log(ms.floor(25)); // 20;
1707
+ */
1708
+ floor(key: K): K | undefined;
1709
+ /**
1710
+ * Returns the smallest key > given key, or undefined.
1711
+ * @remarks Time O(log n), Space O(1)
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
+
1741
+
1742
+
1743
+
1744
+
1745
+
1746
+
1747
+
1748
+
1749
+
1750
+
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
+
1783
+
1784
+
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
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
+ * @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
+
1835
+
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
+ * @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
+
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
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
+ * @example
2094
+ * // Iterate
2095
+ * 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]];
2101
+ */
2102
+ forEach(callback: (key: K, count: number) => void): void;
2103
+ /**
2104
+ * Creates a new TreeMultiSet with entries that match the predicate.
2105
+ * @remarks Time O(n log n), Space O(n)
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+
2208
+
2209
+
2210
+
2211
+
2212
+
2213
+
2214
+
2215
+
2216
+
2217
+
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
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
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
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
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+
2366
+
2367
+
2368
+
2369
+
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
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
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2489
+
2490
+
2491
+
2492
+
2493
+
2494
+
2495
+
2496
+
2497
+
2498
+
2499
+
2500
+
423
2501
 
424
2502
 
425
- * @example
426
- * // Key-count pairs
427
- * const ms = new TreeMultiSet<number>();
428
- * ms.add(1, 2);
429
- * ms.add(3);
430
- * console.log(ms.toEntries()); // [[1, 2], [3, 1]];
431
- */
432
- toEntries(): Array<[K, number]>;
433
- /**
434
- * Expose comparator for advanced usage/testing (read-only).
435
- * @remarks Time O(1), Space O(1)
436
- */
437
- get comparator(): Comparator<K>;
438
- /**
439
- * Remove all elements from the multiset.
440
- * @remarks Time O(1), Space O(1)
441
-
442
2503
 
443
2504
 
444
2505
 
@@ -477,74 +2538,28 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
477
2538
 
478
2539
 
479
2540
 
480
- * @example
481
- * // Remove all
482
- * const ms = new TreeMultiSet<number>();
483
- * ms.add(1);
484
- * ms.clear();
485
- * console.log(ms.isEmpty()); // true;
486
- */
487
- clear(): void;
488
- /**
489
- * Returns the smallest key, or undefined if empty.
490
- * @remarks Time O(log n), Space O(1)
491
-
492
2541
 
493
2542
 
494
- * @example
495
- * // Smallest element
496
- * const ms = new TreeMultiSet<number>();
497
- * ms.add(3);
498
- * ms.add(1);
499
- * console.log(ms.first()); // 1;
500
- */
501
- first(): K | undefined;
502
- /**
503
- * Returns the largest key, or undefined if empty.
504
- * @remarks Time O(log n), Space O(1)
505
-
506
2543
 
507
2544
 
508
- * @example
509
- * // Largest element
510
- * const ms = new TreeMultiSet<number>();
511
- * ms.add(1);
512
- * ms.add(3);
513
- * console.log(ms.last()); // 3;
514
- */
515
- last(): K | undefined;
516
- /**
517
- * Removes all occurrences of the smallest key and returns it.
518
- * @remarks Time O(log n), Space O(1)
519
-
520
2545
 
521
2546
 
522
- * @example
523
- * // Remove and return smallest
524
- * const ms = new TreeMultiSet<number>();
525
- * ms.add(2);
526
- * ms.add(1);
527
- * console.log(ms.pollFirst()); // 1;
528
- * console.log(ms.has(1)); // false;
529
- */
530
- pollFirst(): K | undefined;
531
- /**
532
- * Removes all occurrences of the largest key and returns it.
533
- * @remarks Time O(log n), Space O(1)
534
-
535
2547
 
536
2548
 
537
2549
  * @example
538
- * // Remove and return largest
2550
+ * // Transform
539
2551
  * const ms = new TreeMultiSet<number>();
540
- * ms.add(1);
541
- * ms.add(3);
542
- * console.log(ms.pollLast()); // 3;
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];
543
2556
  */
544
- pollLast(): K | undefined;
2557
+ map<K2>(mapper: (key: K, count: number) => [K2, number], options?: {
2558
+ comparator?: Comparator<K2>;
2559
+ }): TreeMultiSet<K2>;
545
2560
  /**
546
- * Returns the smallest key >= given key, or undefined.
547
- * @remarks Time O(log n), Space O(1)
2561
+ * Creates an independent copy of this multiset.
2562
+ * @remarks Time O(n log n), Space O(n)
548
2563
 
549
2564
 
550
2565
 
@@ -575,19 +2590,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
575
2590
 
576
2591
 
577
2592
 
578
- * @example
579
- * // Least key ≥ target
580
- * const ms = new TreeMultiSet<number>();
581
- * ms.add(10);
582
- * ms.add(20);
583
- * ms.add(30);
584
- * console.log(ms.ceiling(15)); // 20;
585
- */
586
- ceiling(key: K): K | undefined;
587
- /**
588
- * Returns the largest key <= given key, or undefined.
589
- * @remarks Time O(log n), Space O(1)
590
-
591
2593
 
592
2594
 
593
2595
 
@@ -617,19 +2619,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
617
2619
 
618
2620
 
619
2621
 
620
- * @example
621
- * // Greatest key ≤ target
622
- * const ms = new TreeMultiSet<number>();
623
- * ms.add(10);
624
- * ms.add(20);
625
- * ms.add(30);
626
- * console.log(ms.floor(25)); // 20;
627
- */
628
- floor(key: K): K | undefined;
629
- /**
630
- * Returns the smallest key > given key, or undefined.
631
- * @remarks Time O(log n), Space O(1)
632
-
633
2622
 
634
2623
 
635
2624
 
@@ -659,18 +2648,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
659
2648
 
660
2649
 
661
2650
 
662
- * @example
663
- * // Least key > target
664
- * const ms = new TreeMultiSet<number>();
665
- * ms.add(10);
666
- * ms.add(20);
667
- * console.log(ms.higher(10)); // 20;
668
- */
669
- higher(key: K): K | undefined;
670
- /**
671
- * Returns the largest key < given key, or undefined.
672
- * @remarks Time O(log n), Space O(1)
673
-
674
2651
 
675
2652
 
676
2653
 
@@ -700,18 +2677,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
700
2677
 
701
2678
 
702
2679
 
703
- * @example
704
- * // Greatest key < target
705
- * const ms = new TreeMultiSet<number>();
706
- * ms.add(10);
707
- * ms.add(20);
708
- * console.log(ms.lower(20)); // 10;
709
- */
710
- lower(key: K): K | undefined;
711
- /**
712
- * Iterates over distinct keys with their counts.
713
- * @remarks Time O(n), Space O(1)
714
-
715
2680
 
716
2681
 
717
2682
 
@@ -734,6 +2699,23 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
734
2699
 
735
2700
 
736
2701
 
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
+
2716
+
2717
+
2718
+
737
2719
 
738
2720
 
739
2721
 
@@ -750,20 +2732,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
750
2732
 
751
2733
 
752
2734
 
753
- * @example
754
- * // Iterate
755
- * const ms = new TreeMultiSet<number>();
756
- * ms.add(1, 2);
757
- * ms.add(2);
758
- * const pairs: [number, number][] = [];
759
- * ms.forEach((k, c) => pairs.push([k, c]));
760
- * console.log(pairs); // [[1, 2], [2, 1]];
761
- */
762
- forEach(callback: (key: K, count: number) => void): void;
763
- /**
764
- * Creates a new TreeMultiSet with entries that match the predicate.
765
- * @remarks Time O(n log n), Space O(n)
766
-
767
2735
 
768
2736
 
769
2737
 
@@ -802,20 +2770,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
802
2770
 
803
2771
 
804
2772
 
805
- * @example
806
- * // Filter
807
- * const ms = new TreeMultiSet<number>();
808
- * ms.add(1, 3);
809
- * ms.add(2, 1);
810
- * ms.add(3, 2);
811
- * const filtered = ms.filter((k, c) => c > 1);
812
- * console.log([...filtered.keysDistinct()]); // [1, 3];
813
- */
814
- filter(predicate: (key: K, count: number) => boolean): TreeMultiSet<K>;
815
- /**
816
- * Reduces the multiset to a single value.
817
- * @remarks Time O(n), Space O(1)
818
-
819
2773
 
820
2774
 
821
2775
 
@@ -854,20 +2808,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
854
2808
 
855
2809
 
856
2810
 
857
- * @example
858
- * // Aggregate
859
- * const ms = new TreeMultiSet<number>();
860
- * ms.add(1, 2);
861
- * ms.add(2, 3);
862
- * const sum = ms.reduce((acc, k, c) => acc + k * c, 0);
863
- * console.log(sum); // 8;
864
- */
865
- reduce<U>(callback: (accumulator: U, key: K, count: number) => U, initialValue: U): U;
866
- /**
867
- * Maps keys and counts to a new TreeMultiSet.
868
- * When multiple keys map to the same new key, counts are merged (added).
869
- * @remarks Time O(n log n), Space O(n)
870
-
871
2811
 
872
2812
 
873
2813
 
@@ -881,6 +2821,28 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
881
2821
 
882
2822
 
883
2823
 
2824
+ * @example
2825
+ * // Find in range
2826
+ * const ms = new TreeMultiSet<number>();
2827
+ * ms.add(10);
2828
+ * ms.add(20);
2829
+ * ms.add(30);
2830
+ * const result = ms.rangeSearch([15, 25]);
2831
+ * console.log(result.length); // 1;
2832
+ */
2833
+ rangeSearch<C extends (key: K) => any>(range: [K, K], callback?: C): (C extends undefined ? K : ReturnType<C>)[];
2834
+ /**
2835
+ * Prints the internal tree structure (for debugging).
2836
+ * @remarks Time O(n), Space O(n)
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
884
2846
 
885
2847
 
886
2848
 
@@ -906,21 +2868,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
906
2868
 
907
2869
 
908
2870
 
909
- * @example
910
- * // Transform
911
- * const ms = new TreeMultiSet<number>();
912
- * ms.add(1, 2);
913
- * ms.add(2, 3);
914
- * const doubled = ms.map((k, c) => [k * 10, c] as [number, number]);
915
- * console.log([...doubled.keysDistinct()]); // [10, 20];
916
- */
917
- map<K2>(mapper: (key: K, count: number) => [K2, number], options?: {
918
- comparator?: Comparator<K2>;
919
- }): TreeMultiSet<K2>;
920
- /**
921
- * Creates an independent copy of this multiset.
922
- * @remarks Time O(n log n), Space O(n)
923
-
924
2871
 
925
2872
 
926
2873
 
@@ -959,19 +2906,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
959
2906
 
960
2907
 
961
2908
 
962
- * @example
963
- * // Deep clone
964
- * const ms = new TreeMultiSet<number>();
965
- * ms.add(1, 3);
966
- * const copy = ms.clone();
967
- * copy.deleteAll(1);
968
- * console.log(ms.has(1)); // true;
969
- */
970
- clone(): TreeMultiSet<K>;
971
- /**
972
- * Returns keys within the given range.
973
- * @remarks Time O(log n + k), Space O(k) where k is result size
974
-
975
2909
 
976
2910
 
977
2911
 
@@ -1001,20 +2935,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1001
2935
 
1002
2936
 
1003
2937
 
1004
- * @example
1005
- * // Find in range
1006
- * const ms = new TreeMultiSet<number>();
1007
- * ms.add(10);
1008
- * ms.add(20);
1009
- * ms.add(30);
1010
- * const result = ms.rangeSearch([15, 25]);
1011
- * console.log(result.length); // 1;
1012
- */
1013
- rangeSearch<C extends (key: K) => any>(range: [K, K], callback?: C): (C extends undefined ? K : ReturnType<C>)[];
1014
- /**
1015
- * Prints the internal tree structure (for debugging).
1016
- * @remarks Time O(n), Space O(n)
1017
-
1018
2938
 
1019
2939
 
1020
2940