binary-tree-typed 2.5.0 → 2.5.2

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 (90) hide show
  1. package/dist/cjs/index.cjs +771 -68
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +771 -68
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +771 -69
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +771 -69
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/common/error.d.ts +9 -0
  10. package/dist/types/common/index.d.ts +1 -1
  11. package/dist/types/data-structures/base/index.d.ts +1 -0
  12. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  13. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  14. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  26. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  27. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  28. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  29. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  30. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  31. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  32. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  33. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  34. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  35. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  36. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  37. package/dist/types/interfaces/graph.d.ts +1 -1
  38. package/dist/types/types/common.d.ts +2 -2
  39. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  40. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  41. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  42. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  43. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  44. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  45. package/dist/types/types/utils/validate-type.d.ts +4 -4
  46. package/dist/umd/binary-tree-typed.js +773 -71
  47. package/dist/umd/binary-tree-typed.js.map +1 -1
  48. package/dist/umd/binary-tree-typed.min.js +5 -5
  49. package/dist/umd/binary-tree-typed.min.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/common/error.ts +19 -1
  52. package/src/common/index.ts +1 -1
  53. package/src/data-structures/base/index.ts +1 -0
  54. package/src/data-structures/base/iterable-element-base.ts +3 -2
  55. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  56. package/src/data-structures/base/linear-base.ts +3 -3
  57. package/src/data-structures/binary-tree/avl-tree.ts +299 -0
  58. package/src/data-structures/binary-tree/binary-indexed-tree.ts +341 -5
  59. package/src/data-structures/binary-tree/binary-tree.ts +606 -6
  60. package/src/data-structures/binary-tree/bst.ts +946 -7
  61. package/src/data-structures/binary-tree/red-black-tree.ts +472 -0
  62. package/src/data-structures/binary-tree/segment-tree.ts +145 -2
  63. package/src/data-structures/binary-tree/tree-map.ts +3423 -499
  64. package/src/data-structures/binary-tree/tree-multi-map.ts +3537 -596
  65. package/src/data-structures/binary-tree/tree-multi-set.ts +2855 -495
  66. package/src/data-structures/binary-tree/tree-set.ts +3209 -413
  67. package/src/data-structures/graph/abstract-graph.ts +6 -6
  68. package/src/data-structures/graph/directed-graph.ts +240 -0
  69. package/src/data-structures/graph/undirected-graph.ts +216 -0
  70. package/src/data-structures/hash/hash-map.ts +281 -19
  71. package/src/data-structures/heap/heap.ts +340 -4
  72. package/src/data-structures/heap/max-heap.ts +2 -2
  73. package/src/data-structures/linked-list/doubly-linked-list.ts +411 -3
  74. package/src/data-structures/linked-list/singly-linked-list.ts +363 -3
  75. package/src/data-structures/linked-list/skip-linked-list.ts +439 -7
  76. package/src/data-structures/matrix/matrix.ts +202 -10
  77. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  78. package/src/data-structures/queue/deque.ts +365 -5
  79. package/src/data-structures/queue/queue.ts +288 -0
  80. package/src/data-structures/stack/stack.ts +240 -0
  81. package/src/data-structures/trie/trie.ts +295 -7
  82. package/src/interfaces/graph.ts +1 -1
  83. package/src/types/common.ts +2 -2
  84. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  85. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  86. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  87. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  88. package/src/types/data-structures/heap/heap.ts +1 -0
  89. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  90. package/src/types/utils/validate-type.ts +4 -4
@@ -45,6 +45,30 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
45
45
  * @remarks Time O(1), Space O(1)
46
46
 
47
47
 
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
48
72
  * @example
49
73
  * // Unique key count
50
74
  * const ms = new TreeMultiSet<number>();
@@ -73,6 +97,126 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
73
97
 
74
98
 
75
99
 
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
76
220
 
77
221
 
78
222
 
@@ -143,30 +287,8 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
143
287
 
144
288
 
145
289
 
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
290
 
158
291
 
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
292
 
171
293
 
172
294
 
@@ -199,33 +321,8 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
199
321
 
200
322
 
201
323
 
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)
216
324
 
217
325
 
218
- * @example
219
- * // Set occurrence count
220
- * const ms = new TreeMultiSet<number>();
221
- * ms.setCount(1, 3);
222
- * console.log(ms.count(1)); // 3;
223
- */
224
- setCount(key: K, n: number): boolean;
225
- /**
226
- * Delete `n` occurrences of `key` (default 1).
227
- * @returns True if any occurrence was removed.
228
- * @remarks Time O(log n), Space O(1)
229
326
 
230
327
 
231
328
 
@@ -267,44 +364,11 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
267
364
 
268
365
 
269
366
 
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
367
 
283
368
 
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
369
 
296
370
 
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)
371
+
308
372
 
309
373
 
310
374
 
@@ -344,20 +408,20 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
344
408
 
345
409
 
346
410
  * @example
347
- * // Iterate entries
411
+ * // Check existence
348
412
  * 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
413
+ * ms.add(1);
414
+ * console.log(ms.has(1)); // true;
415
+ * console.log(ms.has(2)); // false;
356
416
  */
357
- [Symbol.iterator](): Iterator<K>;
417
+ has(key: K): boolean;
358
418
  /**
359
- * Returns an array with all elements (expanded).
360
- * @remarks Time O(size), Space O(size)
419
+ * Returns the count of occurrences for the given key.
420
+ * @remarks Time O(log n), Space O(1)
421
+
422
+
423
+
424
+
361
425
 
362
426
 
363
427
 
@@ -380,6 +444,2454 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
380
444
 
381
445
 
382
446
 
447
+ * @example
448
+ * // Get occurrence count
449
+ * const ms = new TreeMultiSet<number>();
450
+ * ms.add(1, 5);
451
+ * console.log(ms.count(1)); // 5;
452
+ */
453
+ count(key: K): number;
454
+ /**
455
+ * Add `n` occurrences of `key`.
456
+ * @returns True if the multiset changed.
457
+ * @remarks Time O(log n), Space O(1)
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
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+ * @example
611
+ * // Add elements
612
+ * const ms = new TreeMultiSet<number>();
613
+ * ms.add(1);
614
+ * ms.add(1);
615
+ * ms.add(2);
616
+ * console.log(ms.count(1)); // 2;
617
+ * console.log(ms.size); // 3;
618
+ */
619
+ add(key: K, n?: number): boolean;
620
+ /**
621
+ * Set count for `key` to exactly `n`.
622
+ * @returns True if changed.
623
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
651
+ * // Set occurrence count
652
+ * const ms = new TreeMultiSet<number>();
653
+ * ms.setCount(1, 3);
654
+ * console.log(ms.count(1)); // 3;
655
+ */
656
+ setCount(key: K, n: number): boolean;
657
+ /**
658
+ * Delete `n` occurrences of `key` (default 1).
659
+ * @returns True if any occurrence was removed.
660
+ * @remarks Time O(log n), Space O(1)
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
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+ * @example
823
+ * // Remove one occurrence
824
+ * const ms = new TreeMultiSet<number>();
825
+ * ms.add(1, 3);
826
+ * ms.delete(1);
827
+ * console.log(ms.count(1)); // 2;
828
+ */
829
+ delete(key: K, n?: number): boolean;
830
+ /**
831
+ * Delete all occurrences of the given key.
832
+ * @returns True if any occurrence was removed.
833
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
861
+ * // Remove all occurrences
862
+ * const ms = new TreeMultiSet<number>();
863
+ * ms.add(1, 3);
864
+ * ms.deleteAll(1);
865
+ * console.log(ms.has(1)); // false;
866
+ */
867
+ deleteAll(key: K): boolean;
868
+ /**
869
+ * Iterates over distinct keys (each key yielded once).
870
+ * @remarks Time O(n), Space O(1)
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
+ * @example
898
+ * // Iterate unique keys
899
+ * const ms = new TreeMultiSet<number>();
900
+ * ms.add(1, 2);
901
+ * ms.add(2);
902
+ * console.log([...ms.keysDistinct()]); // [1, 2];
903
+ */
904
+ keysDistinct(): IterableIterator<K>;
905
+ /**
906
+ * Iterates over entries as [key, count] pairs.
907
+ * @remarks Time O(n), Space O(1)
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
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
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
+ * @example
1067
+ * // Iterate entries
1068
+ * const ms = new TreeMultiSet<number>();
1069
+ * ms.add(1, 2);
1070
+ * console.log([...ms.entries()].length); // > 0;
1071
+ */
1072
+ entries(): IterableIterator<[K, number]>;
1073
+ /**
1074
+ * Expanded iteration (default). Each key is yielded `count(key)` times.
1075
+ * @remarks Time O(size), Space O(1) where size is total occurrences
1076
+ */
1077
+ [Symbol.iterator](): Iterator<K>;
1078
+ /**
1079
+ * Returns an array with all elements (expanded).
1080
+ * @remarks Time O(size), Space O(size)
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
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
+ * @example
1240
+ * // All elements (with duplicates)
1241
+ * const ms = new TreeMultiSet<number>();
1242
+ * ms.add(1, 2);
1243
+ * ms.add(2);
1244
+ * console.log(ms.toArray()); // [1, 1, 2];
1245
+ */
1246
+ toArray(): K[];
1247
+ /**
1248
+ * Returns an array with distinct keys only.
1249
+ * @remarks Time O(n), Space O(n)
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
+ * @example
1277
+ * // Unique keys only
1278
+ * const ms = new TreeMultiSet<number>();
1279
+ * ms.add(1, 3);
1280
+ * ms.add(2);
1281
+ * console.log(ms.toDistinctArray()); // [1, 2];
1282
+ */
1283
+ toDistinctArray(): K[];
1284
+ /**
1285
+ * Returns an array of [key, count] entries.
1286
+ * @remarks Time O(n), Space O(n)
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
+ * @example
1314
+ * // Key-count pairs
1315
+ * const ms = new TreeMultiSet<number>();
1316
+ * ms.add(1, 2);
1317
+ * ms.add(3);
1318
+ * console.log(ms.toEntries()); // [[1, 2], [3, 1]];
1319
+ */
1320
+ toEntries(): Array<[K, number]>;
1321
+ /**
1322
+ * Expose comparator for advanced usage/testing (read-only).
1323
+ * @remarks Time O(1), Space O(1)
1324
+ */
1325
+ get comparator(): Comparator<K>;
1326
+ /**
1327
+ * Remove all elements from the multiset.
1328
+ * @remarks Time O(1), Space O(1)
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
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
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
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
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
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+ * @example
1489
+ * // Remove all
1490
+ * const ms = new TreeMultiSet<number>();
1491
+ * ms.add(1);
1492
+ * ms.clear();
1493
+ * console.log(ms.isEmpty()); // true;
1494
+ */
1495
+ clear(): void;
1496
+ /**
1497
+ * Returns the smallest key, or undefined if empty.
1498
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1527
+ * // Smallest element
1528
+ * const ms = new TreeMultiSet<number>();
1529
+ * ms.add(3);
1530
+ * ms.add(1);
1531
+ * console.log(ms.first()); // 1;
1532
+ */
1533
+ first(): K | undefined;
1534
+ /**
1535
+ * Returns the largest key, or undefined if empty.
1536
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1565
+ * // Largest element
1566
+ * const ms = new TreeMultiSet<number>();
1567
+ * ms.add(1);
1568
+ * ms.add(3);
1569
+ * console.log(ms.last()); // 3;
1570
+ */
1571
+ last(): K | undefined;
1572
+ /**
1573
+ * Removes all occurrences of the smallest key and returns it.
1574
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1603
+ * // Remove and return smallest
1604
+ * const ms = new TreeMultiSet<number>();
1605
+ * ms.add(2);
1606
+ * ms.add(1);
1607
+ * console.log(ms.pollFirst()); // 1;
1608
+ * console.log(ms.has(1)); // false;
1609
+ */
1610
+ pollFirst(): K | undefined;
1611
+ /**
1612
+ * Removes all occurrences of the largest key and returns it.
1613
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1642
+ * // Remove and return largest
1643
+ * const ms = new TreeMultiSet<number>();
1644
+ * ms.add(1);
1645
+ * ms.add(3);
1646
+ * console.log(ms.pollLast()); // 3;
1647
+ */
1648
+ pollLast(): K | undefined;
1649
+ /**
1650
+ * Returns the smallest key >= given key, or undefined.
1651
+ * @remarks Time O(log n), Space O(1)
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
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
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
+
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
+ * @example
1779
+ * // Least key ≥ target
1780
+ * const ms = new TreeMultiSet<number>();
1781
+ * ms.add(10);
1782
+ * ms.add(20);
1783
+ * ms.add(30);
1784
+ * console.log(ms.ceiling(15)); // 20;
1785
+ */
1786
+ ceiling(key: K): K | undefined;
1787
+ /**
1788
+ * Returns the largest key <= given key, or undefined.
1789
+ * @remarks Time O(log n), Space O(1)
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
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
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
+ * @example
1917
+ * // Greatest key ≤ target
1918
+ * const ms = new TreeMultiSet<number>();
1919
+ * ms.add(10);
1920
+ * ms.add(20);
1921
+ * ms.add(30);
1922
+ * console.log(ms.floor(25)); // 20;
1923
+ */
1924
+ floor(key: K): K | undefined;
1925
+ /**
1926
+ * Returns the smallest key > given key, or undefined.
1927
+ * @remarks Time O(log n), Space O(1)
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
+
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
+ * @example
2055
+ * // Least key > target
2056
+ * const ms = new TreeMultiSet<number>();
2057
+ * ms.add(10);
2058
+ * ms.add(20);
2059
+ * console.log(ms.higher(10)); // 20;
2060
+ */
2061
+ higher(key: K): K | undefined;
2062
+ /**
2063
+ * Returns the largest key < given key, or undefined.
2064
+ * @remarks Time O(log n), Space O(1)
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
+
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
+ * @example
2192
+ * // Greatest key < target
2193
+ * const ms = new TreeMultiSet<number>();
2194
+ * ms.add(10);
2195
+ * ms.add(20);
2196
+ * console.log(ms.lower(20)); // 10;
2197
+ */
2198
+ lower(key: K): K | undefined;
2199
+ /**
2200
+ * Iterates over distinct keys with their counts.
2201
+ * @remarks Time O(n), Space O(1)
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
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
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
+ * @example
2362
+ * // Iterate
2363
+ * const ms = new TreeMultiSet<number>();
2364
+ * ms.add(1, 2);
2365
+ * ms.add(2);
2366
+ * const pairs: [number, number][] = [];
2367
+ * ms.forEach((k, c) => pairs.push([k, c]));
2368
+ * console.log(pairs); // [[1, 2], [2, 1]];
2369
+ */
2370
+ forEach(callback: (key: K, count: number) => void): void;
2371
+ /**
2372
+ * Creates a new TreeMultiSet with entries that match the predicate.
2373
+ * @remarks Time O(n log n), Space O(n)
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
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
+
2501
+
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+ * @example
2534
+ * // Filter
2535
+ * const ms = new TreeMultiSet<number>();
2536
+ * ms.add(1, 3);
2537
+ * ms.add(2, 1);
2538
+ * ms.add(3, 2);
2539
+ * const filtered = ms.filter((k, c) => c > 1);
2540
+ * console.log([...filtered.keysDistinct()]); // [1, 3];
2541
+ */
2542
+ filter(predicate: (key: K, count: number) => boolean): TreeMultiSet<K>;
2543
+ /**
2544
+ * Reduces the multiset to a single value.
2545
+ * @remarks Time O(n), Space O(1)
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+
2561
+
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+
2617
+
2618
+
2619
+
2620
+
2621
+
2622
+
2623
+
2624
+
2625
+
2626
+
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+
2698
+
2699
+
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+ * @example
2706
+ * // Aggregate
2707
+ * const ms = new TreeMultiSet<number>();
2708
+ * ms.add(1, 2);
2709
+ * ms.add(2, 3);
2710
+ * const sum = ms.reduce((acc, k, c) => acc + k * c, 0);
2711
+ * console.log(sum); // 8;
2712
+ */
2713
+ reduce<U>(callback: (accumulator: U, key: K, count: number) => U, initialValue: U): U;
2714
+ /**
2715
+ * Maps keys and counts to a new TreeMultiSet.
2716
+ * When multiple keys map to the same new key, counts are merged (added).
2717
+ * @remarks Time O(n log n), Space O(n)
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+
2771
+
2772
+
2773
+
2774
+
2775
+
2776
+
2777
+
2778
+
2779
+
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+ * @example
2878
+ * // Transform
2879
+ * const ms = new TreeMultiSet<number>();
2880
+ * ms.add(1, 2);
2881
+ * ms.add(2, 3);
2882
+ * const doubled = ms.map((k, c) => [k * 10, c] as [number, number]);
2883
+ * console.log([...doubled.keysDistinct()]); // [10, 20];
2884
+ */
2885
+ map<K2>(mapper: (key: K, count: number) => [K2, number], options?: {
2886
+ comparator?: Comparator<K2>;
2887
+ }): TreeMultiSet<K2>;
2888
+ /**
2889
+ * Creates an independent copy of this multiset.
2890
+ * @remarks Time O(n log n), Space O(n)
2891
+
2892
+
2893
+
2894
+
383
2895
 
384
2896
 
385
2897
 
@@ -396,49 +2908,10 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
396
2908
 
397
2909
 
398
2910
 
399
- * @example
400
- * // All elements (with duplicates)
401
- * const ms = new TreeMultiSet<number>();
402
- * ms.add(1, 2);
403
- * ms.add(2);
404
- * console.log(ms.toArray()); // [1, 1, 2];
405
- */
406
- toArray(): K[];
407
- /**
408
- * Returns an array with distinct keys only.
409
- * @remarks Time O(n), Space O(n)
410
2911
 
411
2912
 
412
- * @example
413
- * // Unique keys only
414
- * const ms = new TreeMultiSet<number>();
415
- * ms.add(1, 3);
416
- * ms.add(2);
417
- * console.log(ms.toDistinctArray()); // [1, 2];
418
- */
419
- toDistinctArray(): K[];
420
- /**
421
- * Returns an array of [key, count] entries.
422
- * @remarks Time O(n), Space O(n)
423
2913
 
424
2914
 
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
2915
 
443
2916
 
444
2917
 
@@ -477,75 +2950,14 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
477
2950
 
478
2951
 
479
2952
 
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
2953
 
493
2954
 
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
2955
 
507
2956
 
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
2957
 
521
2958
 
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
2959
 
536
2960
 
537
- * @example
538
- * // Remove and return largest
539
- * const ms = new TreeMultiSet<number>();
540
- * ms.add(1);
541
- * ms.add(3);
542
- * console.log(ms.pollLast()); // 3;
543
- */
544
- pollLast(): K | undefined;
545
- /**
546
- * Returns the smallest key >= given key, or undefined.
547
- * @remarks Time O(log n), Space O(1)
548
-
549
2961
 
550
2962
 
551
2963
 
@@ -575,19 +2987,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
575
2987
 
576
2988
 
577
2989
 
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
2990
 
592
2991
 
593
2992
 
@@ -617,19 +3016,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
617
3016
 
618
3017
 
619
3018
 
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
3019
 
634
3020
 
635
3021
 
@@ -660,16 +3046,64 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
660
3046
 
661
3047
 
662
3048
  * @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;
3049
+ * // Order-statistic on BST
3050
+ * const tree = new TreeMultiSet<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
3051
+ * console.log(tree.getByRank(0)); // 10;
3052
+ * console.log(tree.getByRank(4)); // 50;
3053
+ * console.log(tree.getRank(30)); // 2;
668
3054
  */
669
- higher(key: K): K | undefined;
3055
+ getByRank(k: number): K | undefined;
670
3056
  /**
671
- * Returns the largest key < given key, or undefined.
672
- * @remarks Time O(log n), Space O(1)
3057
+ * Get the rank of a key in sorted order
3058
+ * @example
3059
+ * // Get the rank of a key in sorted order
3060
+ * const tree = new TreeMultiSet<number>(
3061
+ * [10, 20, 30, 40, 50],
3062
+ * { enableOrderStatistic: true }
3063
+ * );
3064
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
3065
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
3066
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
3067
+ * console.log(tree.getRank(25)); // 2;
3068
+ */
3069
+ getRank(key: K): number;
3070
+ /**
3071
+ * Get elements by rank range
3072
+
3073
+ * @example
3074
+ * // Pagination with rangeByRank
3075
+ * const tree = new TreeMultiSet<number>(
3076
+ * [10, 20, 30, 40, 50, 60, 70, 80, 90],
3077
+ * { enableOrderStatistic: true }
3078
+ * );
3079
+ * const pageSize = 3;
3080
+ *
3081
+ * // Page 1
3082
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
3083
+ * // Page 2
3084
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
3085
+ * // Page 3
3086
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
3087
+ */
3088
+ rangeByRank(start: number, end: number): K[];
3089
+ /**
3090
+ * Deep copy
3091
+
3092
+
3093
+
3094
+
3095
+ * @example
3096
+ * // Deep clone
3097
+ * const ms = new TreeMultiSet<number>();
3098
+ * ms.add(1, 3);
3099
+ * const copy = ms.clone();
3100
+ * copy.deleteAll(1);
3101
+ * console.log(ms.has(1)); // true;
3102
+ */
3103
+ clone(): TreeMultiSet<K>;
3104
+ /**
3105
+ * Returns keys within the given range.
3106
+ * @remarks Time O(log n + k), Space O(k) where k is result size
673
3107
 
674
3108
 
675
3109
 
@@ -700,21 +3134,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
700
3134
 
701
3135
 
702
3136
 
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
-
716
-
717
-
718
3137
 
719
3138
 
720
3139
 
@@ -750,20 +3169,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
750
3169
 
751
3170
 
752
3171
 
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
3172
 
768
3173
 
769
3174
 
@@ -802,20 +3207,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
802
3207
 
803
3208
 
804
3209
 
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
3210
 
820
3211
 
821
3212
 
@@ -839,6 +3230,20 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
839
3230
 
840
3231
 
841
3232
 
3233
+ * @example
3234
+ * // Find in range
3235
+ * const ms = new TreeMultiSet<number>();
3236
+ * ms.add(10);
3237
+ * ms.add(20);
3238
+ * ms.add(30);
3239
+ * const result = ms.rangeSearch([15, 25]);
3240
+ * console.log(result.length); // 1;
3241
+ */
3242
+ rangeSearch<C extends (key: K) => any>(range: [K, K], callback?: C): (C extends undefined ? K : ReturnType<C>)[];
3243
+ /**
3244
+ * Prints the internal tree structure (for debugging).
3245
+ * @remarks Time O(n), Space O(n)
3246
+
842
3247
 
843
3248
 
844
3249
 
@@ -854,20 +3259,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
854
3259
 
855
3260
 
856
3261
 
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
3262
 
872
3263
 
873
3264
 
@@ -906,21 +3297,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
906
3297
 
907
3298
 
908
3299
 
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
3300
 
925
3301
 
926
3302
 
@@ -959,19 +3335,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
959
3335
 
960
3336
 
961
3337
 
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
3338
 
976
3339
 
977
3340
 
@@ -1001,20 +3364,6 @@ export declare class TreeMultiSet<K = any, R = K> implements Iterable<K> {
1001
3364
 
1002
3365
 
1003
3366
 
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
3367
 
1019
3368
 
1020
3369