data-structure-typed 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/COMMANDS.md +17 -0
  3. package/README.md +11 -11
  4. package/benchmark/report.html +13 -77
  5. package/benchmark/report.json +158 -190
  6. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +186 -83
  7. package/dist/cjs/data-structures/base/iterable-element-base.js +149 -107
  8. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  9. package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +95 -119
  10. package/dist/cjs/data-structures/base/iterable-entry-base.js +59 -116
  11. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
  12. package/dist/cjs/data-structures/base/linear-base.d.ts +250 -192
  13. package/dist/cjs/data-structures/base/linear-base.js +137 -274
  14. package/dist/cjs/data-structures/base/linear-base.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +171 -205
  17. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  19. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
  20. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  21. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +138 -149
  22. package/dist/cjs/data-structures/binary-tree/avl-tree.js +208 -195
  23. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  24. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +476 -632
  25. package/dist/cjs/data-structures/binary-tree/binary-tree.js +608 -875
  26. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  27. package/dist/cjs/data-structures/binary-tree/bst.d.ts +258 -306
  28. package/dist/cjs/data-structures/binary-tree/bst.js +505 -481
  29. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  30. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  31. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +114 -209
  32. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  33. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +132 -154
  34. package/dist/cjs/data-structures/binary-tree/tree-counter.js +172 -203
  35. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  36. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  37. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -85
  38. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  39. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +238 -233
  40. package/dist/cjs/data-structures/graph/abstract-graph.js +267 -237
  41. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  42. package/dist/cjs/data-structures/graph/directed-graph.d.ts +108 -224
  43. package/dist/cjs/data-structures/graph/directed-graph.js +146 -233
  44. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  45. package/dist/cjs/data-structures/graph/map-graph.d.ts +49 -55
  46. package/dist/cjs/data-structures/graph/map-graph.js +56 -59
  47. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  48. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +103 -146
  49. package/dist/cjs/data-structures/graph/undirected-graph.js +129 -149
  50. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  51. package/dist/cjs/data-structures/hash/hash-map.d.ts +164 -338
  52. package/dist/cjs/data-structures/hash/hash-map.js +270 -457
  53. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  54. package/dist/cjs/data-structures/heap/heap.d.ts +214 -289
  55. package/dist/cjs/data-structures/heap/heap.js +340 -349
  56. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  57. package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -47
  58. package/dist/cjs/data-structures/heap/max-heap.js +11 -66
  59. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  60. package/dist/cjs/data-structures/heap/min-heap.d.ts +12 -47
  61. package/dist/cjs/data-structures/heap/min-heap.js +11 -66
  62. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  63. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  64. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +368 -494
  65. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  66. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  67. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +447 -466
  68. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  69. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  70. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +0 -100
  71. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  72. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  73. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +11 -78
  74. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  75. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  76. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +10 -79
  77. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  78. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -61
  79. package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -83
  80. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  81. package/dist/cjs/data-structures/queue/deque.d.ts +227 -254
  82. package/dist/cjs/data-structures/queue/deque.js +309 -348
  83. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  84. package/dist/cjs/data-structures/queue/queue.d.ts +180 -201
  85. package/dist/cjs/data-structures/queue/queue.js +265 -248
  86. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  87. package/dist/cjs/data-structures/stack/stack.d.ts +124 -102
  88. package/dist/cjs/data-structures/stack/stack.js +181 -125
  89. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  90. package/dist/cjs/data-structures/trie/trie.d.ts +164 -165
  91. package/dist/cjs/data-structures/trie/trie.js +189 -172
  92. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  93. package/dist/cjs/interfaces/binary-tree.d.ts +56 -6
  94. package/dist/cjs/interfaces/graph.d.ts +16 -0
  95. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  96. package/dist/cjs/types/data-structures/graph/abstract-graph.d.ts +4 -0
  97. package/dist/cjs/types/utils/utils.d.ts +6 -6
  98. package/dist/cjs/utils/utils.d.ts +110 -49
  99. package/dist/cjs/utils/utils.js +148 -73
  100. package/dist/cjs/utils/utils.js.map +1 -1
  101. package/dist/esm/data-structures/base/iterable-element-base.d.ts +186 -83
  102. package/dist/esm/data-structures/base/iterable-element-base.js +155 -107
  103. package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
  104. package/dist/esm/data-structures/base/iterable-entry-base.d.ts +95 -119
  105. package/dist/esm/data-structures/base/iterable-entry-base.js +59 -116
  106. package/dist/esm/data-structures/base/iterable-entry-base.js.map +1 -1
  107. package/dist/esm/data-structures/base/linear-base.d.ts +250 -192
  108. package/dist/esm/data-structures/base/linear-base.js +137 -274
  109. package/dist/esm/data-structures/base/linear-base.js.map +1 -1
  110. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  111. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +171 -212
  112. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  113. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  114. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +133 -94
  115. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  116. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +138 -149
  117. package/dist/esm/data-structures/binary-tree/avl-tree.js +206 -200
  118. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  119. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +476 -632
  120. package/dist/esm/data-structures/binary-tree/binary-tree.js +613 -885
  121. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  122. package/dist/esm/data-structures/binary-tree/bst.d.ts +258 -306
  123. package/dist/esm/data-structures/binary-tree/bst.js +507 -487
  124. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  125. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  126. package/dist/esm/data-structures/binary-tree/red-black-tree.js +114 -215
  127. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  128. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +132 -154
  129. package/dist/esm/data-structures/binary-tree/tree-counter.js +175 -209
  130. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  131. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  132. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +103 -92
  133. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  134. package/dist/esm/data-structures/graph/abstract-graph.d.ts +238 -233
  135. package/dist/esm/data-structures/graph/abstract-graph.js +267 -237
  136. package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
  137. package/dist/esm/data-structures/graph/directed-graph.d.ts +108 -224
  138. package/dist/esm/data-structures/graph/directed-graph.js +145 -233
  139. package/dist/esm/data-structures/graph/directed-graph.js.map +1 -1
  140. package/dist/esm/data-structures/graph/map-graph.d.ts +49 -55
  141. package/dist/esm/data-structures/graph/map-graph.js +56 -59
  142. package/dist/esm/data-structures/graph/map-graph.js.map +1 -1
  143. package/dist/esm/data-structures/graph/undirected-graph.d.ts +103 -146
  144. package/dist/esm/data-structures/graph/undirected-graph.js +128 -149
  145. package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -1
  146. package/dist/esm/data-structures/hash/hash-map.d.ts +164 -338
  147. package/dist/esm/data-structures/hash/hash-map.js +270 -457
  148. package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
  149. package/dist/esm/data-structures/heap/heap.d.ts +214 -289
  150. package/dist/esm/data-structures/heap/heap.js +329 -349
  151. package/dist/esm/data-structures/heap/heap.js.map +1 -1
  152. package/dist/esm/data-structures/heap/max-heap.d.ts +11 -47
  153. package/dist/esm/data-structures/heap/max-heap.js +11 -66
  154. package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
  155. package/dist/esm/data-structures/heap/min-heap.d.ts +12 -47
  156. package/dist/esm/data-structures/heap/min-heap.js +11 -66
  157. package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
  158. package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  159. package/dist/esm/data-structures/linked-list/doubly-linked-list.js +368 -495
  160. package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  161. package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  162. package/dist/esm/data-structures/linked-list/singly-linked-list.js +448 -467
  163. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
  164. package/dist/esm/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  165. package/dist/esm/data-structures/linked-list/skip-linked-list.js +0 -100
  166. package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -1
  167. package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  168. package/dist/esm/data-structures/priority-queue/max-priority-queue.js +11 -78
  169. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  170. package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  171. package/dist/esm/data-structures/priority-queue/min-priority-queue.js +10 -79
  172. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  173. package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -61
  174. package/dist/esm/data-structures/priority-queue/priority-queue.js +8 -83
  175. package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
  176. package/dist/esm/data-structures/queue/deque.d.ts +227 -254
  177. package/dist/esm/data-structures/queue/deque.js +313 -348
  178. package/dist/esm/data-structures/queue/deque.js.map +1 -1
  179. package/dist/esm/data-structures/queue/queue.d.ts +180 -201
  180. package/dist/esm/data-structures/queue/queue.js +263 -248
  181. package/dist/esm/data-structures/queue/queue.js.map +1 -1
  182. package/dist/esm/data-structures/stack/stack.d.ts +124 -102
  183. package/dist/esm/data-structures/stack/stack.js +181 -125
  184. package/dist/esm/data-structures/stack/stack.js.map +1 -1
  185. package/dist/esm/data-structures/trie/trie.d.ts +164 -165
  186. package/dist/esm/data-structures/trie/trie.js +193 -172
  187. package/dist/esm/data-structures/trie/trie.js.map +1 -1
  188. package/dist/esm/interfaces/binary-tree.d.ts +56 -6
  189. package/dist/esm/interfaces/graph.d.ts +16 -0
  190. package/dist/esm/types/data-structures/base/base.d.ts +1 -1
  191. package/dist/esm/types/data-structures/graph/abstract-graph.d.ts +4 -0
  192. package/dist/esm/types/utils/utils.d.ts +6 -6
  193. package/dist/esm/utils/utils.d.ts +110 -49
  194. package/dist/esm/utils/utils.js +139 -68
  195. package/dist/esm/utils/utils.js.map +1 -1
  196. package/dist/umd/data-structure-typed.js +4737 -6525
  197. package/dist/umd/data-structure-typed.min.js +8 -6
  198. package/dist/umd/data-structure-typed.min.js.map +1 -1
  199. package/package.json +3 -4
  200. package/src/data-structures/base/iterable-element-base.ts +238 -115
  201. package/src/data-structures/base/iterable-entry-base.ts +96 -120
  202. package/src/data-structures/base/linear-base.ts +271 -277
  203. package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
  204. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
  205. package/src/data-structures/binary-tree/avl-tree.ts +239 -206
  206. package/src/data-structures/binary-tree/binary-tree.ts +677 -901
  207. package/src/data-structures/binary-tree/bst.ts +568 -570
  208. package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
  209. package/src/data-structures/binary-tree/tree-counter.ts +199 -218
  210. package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
  211. package/src/data-structures/graph/abstract-graph.ts +339 -264
  212. package/src/data-structures/graph/directed-graph.ts +146 -236
  213. package/src/data-structures/graph/map-graph.ts +63 -60
  214. package/src/data-structures/graph/undirected-graph.ts +129 -152
  215. package/src/data-structures/hash/hash-map.ts +274 -496
  216. package/src/data-structures/heap/heap.ts +389 -402
  217. package/src/data-structures/heap/max-heap.ts +12 -76
  218. package/src/data-structures/heap/min-heap.ts +13 -76
  219. package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
  220. package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
  221. package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
  222. package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
  223. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
  224. package/src/data-structures/priority-queue/priority-queue.ts +3 -92
  225. package/src/data-structures/queue/deque.ts +381 -357
  226. package/src/data-structures/queue/queue.ts +310 -264
  227. package/src/data-structures/stack/stack.ts +217 -131
  228. package/src/data-structures/trie/trie.ts +240 -175
  229. package/src/interfaces/binary-tree.ts +240 -6
  230. package/src/interfaces/graph.ts +37 -0
  231. package/src/types/data-structures/base/base.ts +5 -5
  232. package/src/types/data-structures/graph/abstract-graph.ts +5 -0
  233. package/src/types/utils/utils.ts +9 -5
  234. package/src/utils/utils.ts +152 -86
  235. package/test/integration/index.html +1 -1
  236. package/test/performance/benchmark-runner.ts +528 -0
  237. package/test/performance/reportor.mjs +43 -43
  238. package/test/performance/runner-config.json +39 -0
  239. package/test/performance/single-suite-runner.ts +69 -0
  240. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +3 -3
  241. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -5
  242. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
  243. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +350 -90
  244. package/test/unit/data-structures/binary-tree/bst.test.ts +84 -5
  245. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
  246. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +25 -24
  247. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +3 -3
  248. package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -4
  249. package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
  250. package/test/unit/data-structures/heap/heap.test.ts +14 -21
  251. package/test/unit/data-structures/heap/max-heap.test.ts +5 -9
  252. package/test/unit/data-structures/heap/min-heap.test.ts +1 -4
  253. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +14 -14
  254. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -7
  255. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +8 -11
  256. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -4
  257. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +1 -4
  258. package/test/unit/data-structures/queue/queue.test.ts +4 -5
  259. package/test/unit/utils/utils.test.ts +0 -1
  260. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -71
  261. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +0 -81
@@ -5,68 +5,22 @@
5
5
  * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { Comparator, ElementCallback, PriorityQueueOptions } from '../../types';
8
+ import type { PriorityQueueOptions } from '../../types';
9
9
  import { PriorityQueue } from './priority-queue';
10
10
  /**
11
- *
11
+ * Min-oriented priority queue (min-heap) built on {@link PriorityQueue}.
12
+ * The queue removes the smallest element first under the provided comparator.
13
+ * Provide a custom comparator if you store non-primitive objects.
14
+ * @template E Element type stored in the queue.
15
+ * @template R Extra record/metadata associated with each element.
16
+ * @example
12
17
  */
13
18
  export declare class MinPriorityQueue<E = any, R = any> extends PriorityQueue<E, R> {
14
19
  /**
15
- * The constructor initializes a PriorityQueue with optional elements and options, including a
16
- * comparator function.
17
- * @param elements - The `elements` parameter is an iterable object that contains the initial
18
- * elements to be added to the priority queue. It is optional and defaults to an empty array if not
19
- * provided.
20
- * @param options - The `options` parameter is an object that contains additional configuration
21
- * options for the priority queue. In this case, it has a property called `comparator,` which is a
22
- * function used to compare elements in the priority queue. The `comparator` function takes two
23
- * parameters `a` and `b`
20
+ * Creates a min-priority queue.
21
+ * @param elements Optional initial elements to insert.
22
+ * @param options Optional configuration (e.g., `comparator`, `toElementFn`).
23
+ * @remarks Complexity Time: O(n log n) when inserting n elements incrementally; Space: O(n).
24
24
  */
25
25
  constructor(elements?: Iterable<E> | Iterable<R>, options?: PriorityQueueOptions<E, R>);
26
- /**
27
- * The `clone` function returns a new instance of the `MinPriorityQueue` class with the same
28
- * comparator and toElementFn as the original instance.
29
- * @returns The method is returning a new instance of the `MinPriorityQueue` class with the same
30
- * properties as the current instance.
31
- */
32
- clone(): MinPriorityQueue<E, R>;
33
- /**
34
- * Time Complexity: O(n)
35
- * Space Complexity: O(n)
36
- *
37
- * The `filter` function creates a new MinPriorityQueue object containing elements that pass a given callback
38
- * function.
39
- * @param callback - The `callback` parameter is a function that will be called for each element in
40
- * the heap. It takes three arguments: the current element, the index of the current element, and the
41
- * heap itself. The callback function should return a boolean value indicating whether the current
42
- * element should be included in the filtered list
43
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
44
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
45
- * passed as the `this` value to the `callback` function. If `thisArg` is
46
- * @returns The `filter` method is returning a new `MinPriorityQueue` object that contains the elements that pass
47
- * the filter condition specified by the `callback` function.
48
- */
49
- filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): MinPriorityQueue<E, R>;
50
- /**
51
- * Time Complexity: O(n log n)
52
- * Space Complexity: O(n)
53
- *
54
- * The `map` function creates a new heap by applying a callback function to each element of the
55
- * original heap.
56
- * @param callback - The `callback` parameter is a function that will be called for each element in
57
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
58
- * element), and `this` (the heap itself). The callback function should return a value of
59
- * @param comparator - The `comparator` parameter is a function that defines the order of the
60
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
61
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
62
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
63
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
64
- * returns a value of type `T`. This function is used to transform the elements of the original
65
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
66
- * specify the value of `this` within the callback function. It is used to set the context or scope
67
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
68
- * value of
69
- * @returns a new instance of the `MinPriorityQueue` class with the mapped elements.
70
- */
71
- map<EM, RM>(callback: ElementCallback<E, R, EM>, comparator: Comparator<EM>, toElementFn?: (rawElement: RM) => EM, thisArg?: any): MinPriorityQueue<EM, RM>;
72
26
  }
@@ -3,92 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MinPriorityQueue = void 0;
4
4
  const priority_queue_1 = require("./priority-queue");
5
5
  /**
6
- *
6
+ * Min-oriented priority queue (min-heap) built on {@link PriorityQueue}.
7
+ * The queue removes the smallest element first under the provided comparator.
8
+ * Provide a custom comparator if you store non-primitive objects.
9
+ * @template E Element type stored in the queue.
10
+ * @template R Extra record/metadata associated with each element.
11
+ * @example
7
12
  */
8
13
  class MinPriorityQueue extends priority_queue_1.PriorityQueue {
9
14
  /**
10
- * The constructor initializes a PriorityQueue with optional elements and options, including a
11
- * comparator function.
12
- * @param elements - The `elements` parameter is an iterable object that contains the initial
13
- * elements to be added to the priority queue. It is optional and defaults to an empty array if not
14
- * provided.
15
- * @param options - The `options` parameter is an object that contains additional configuration
16
- * options for the priority queue. In this case, it has a property called `comparator,` which is a
17
- * function used to compare elements in the priority queue. The `comparator` function takes two
18
- * parameters `a` and `b`
15
+ * Creates a min-priority queue.
16
+ * @param elements Optional initial elements to insert.
17
+ * @param options Optional configuration (e.g., `comparator`, `toElementFn`).
18
+ * @remarks Complexity Time: O(n log n) when inserting n elements incrementally; Space: O(n).
19
19
  */
20
20
  constructor(elements = [], options) {
21
21
  super(elements, options);
22
22
  }
23
- /**
24
- * The `clone` function returns a new instance of the `MinPriorityQueue` class with the same
25
- * comparator and toElementFn as the original instance.
26
- * @returns The method is returning a new instance of the `MinPriorityQueue` class with the same
27
- * properties as the current instance.
28
- */
29
- clone() {
30
- return new MinPriorityQueue(this, { comparator: this.comparator, toElementFn: this.toElementFn });
31
- }
32
- /**
33
- * Time Complexity: O(n)
34
- * Space Complexity: O(n)
35
- *
36
- * The `filter` function creates a new MinPriorityQueue object containing elements that pass a given callback
37
- * function.
38
- * @param callback - The `callback` parameter is a function that will be called for each element in
39
- * the heap. It takes three arguments: the current element, the index of the current element, and the
40
- * heap itself. The callback function should return a boolean value indicating whether the current
41
- * element should be included in the filtered list
42
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
43
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
44
- * passed as the `this` value to the `callback` function. If `thisArg` is
45
- * @returns The `filter` method is returning a new `MinPriorityQueue` object that contains the elements that pass
46
- * the filter condition specified by the `callback` function.
47
- */
48
- filter(callback, thisArg) {
49
- const filteredPriorityQueue = new MinPriorityQueue([], {
50
- toElementFn: this.toElementFn,
51
- comparator: this.comparator
52
- });
53
- let index = 0;
54
- for (const current of this) {
55
- if (callback.call(thisArg, current, index, this)) {
56
- filteredPriorityQueue.add(current);
57
- }
58
- index++;
59
- }
60
- return filteredPriorityQueue;
61
- }
62
- /**
63
- * Time Complexity: O(n log n)
64
- * Space Complexity: O(n)
65
- *
66
- * The `map` function creates a new heap by applying a callback function to each element of the
67
- * original heap.
68
- * @param callback - The `callback` parameter is a function that will be called for each element in
69
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
70
- * element), and `this` (the heap itself). The callback function should return a value of
71
- * @param comparator - The `comparator` parameter is a function that defines the order of the
72
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
73
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
74
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
75
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
76
- * returns a value of type `T`. This function is used to transform the elements of the original
77
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
78
- * specify the value of `this` within the callback function. It is used to set the context or scope
79
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
80
- * value of
81
- * @returns a new instance of the `MinPriorityQueue` class with the mapped elements.
82
- */
83
- map(callback, comparator, toElementFn, thisArg) {
84
- const mappedPriorityQueue = new MinPriorityQueue([], { comparator, toElementFn });
85
- let index = 0;
86
- for (const el of this) {
87
- mappedPriorityQueue.add(callback.call(thisArg, el, index, this));
88
- index++;
89
- }
90
- return mappedPriorityQueue;
91
- }
92
23
  }
93
24
  exports.MinPriorityQueue = MinPriorityQueue;
94
25
  //# sourceMappingURL=min-priority-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"min-priority-queue.js","sourceRoot":"","sources":["../../../../src/data-structures/priority-queue/min-priority-queue.ts"],"names":[],"mappings":";;;AAQA,qDAAiD;AAEjD;;GAEG;AACH,MAAa,gBAAmC,SAAQ,8BAAmB;IACzE;;;;;;;;;;OAUG;IACH,YAAY,WAAsC,EAAE,EAAE,OAAoC;QACxF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACM,KAAK;QACZ,OAAO,IAAI,gBAAgB,CAAO,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACM,MAAM,CAAC,QAAwC,EAAE,OAAa;QACrE,MAAM,qBAAqB,GAAG,IAAI,gBAAgB,CAAO,EAAE,EAAE;YAC3D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACjD,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACM,GAAG,CACV,QAAmC,EACnC,UAA0B,EAC1B,WAAoC,EACpC,OAAa;QAEb,MAAM,mBAAmB,GAA6B,IAAI,gBAAgB,CAAS,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACpH,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACjE,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF;AA5FD,4CA4FC"}
1
+ {"version":3,"file":"min-priority-queue.js","sourceRoot":"","sources":["../../../../src/data-structures/priority-queue/min-priority-queue.ts"],"names":[],"mappings":";;;AAQA,qDAAiD;AAEjD;;;;;;;GAOG;AACH,MAAa,gBAAmC,SAAQ,8BAAmB;IACzE;;;;;OAKG;IACH,YAAY,WAAsC,EAAE,EAAE,OAAoC;QACxF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF;AAVD,4CAUC"}
@@ -5,70 +5,11 @@
5
5
  * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { Comparator, ElementCallback, PriorityQueueOptions } from '../../types';
8
+ import type { PriorityQueueOptions } from '../../types';
9
9
  import { Heap } from '../heap';
10
10
  /**
11
- * 1. Element Priority: In a PriorityQueue, elements are sorted according to their priority. Each dequeue (element removal) operation removes the element with the highest priority. The priority can be determined based on the natural ordering of the elements or through a provided comparator (Comparator).
12
- * 2. Heap-Based Implementation: PriorityQueue is typically implemented using a binary heap, allowing both insertion and removal operations to be completed in O(log n) time, where n is the number of elements in the queue.
13
- * 3. Task Scheduling: In systems where tasks need to be processed based on the urgency of tasks rather than the order of arrival.
14
- * 4. Dijkstra's Algorithm: In shortest path algorithms for graphs, used to select the next shortest edge to visit.
15
- * 5. Huffman Coding: Used to select the smallest node combination when constructing a Huffman tree.
16
- * 6. Kth Largest Element in a Data Stream: Used to maintain a min-heap of size K for quickly finding the Kth largest element in stream data
11
+ * @example
17
12
  */
18
13
  export declare class PriorityQueue<E = any, R = any> extends Heap<E, R> {
19
- /**
20
- * The constructor initializes a priority queue with optional elements and options.
21
- * @param elements - The `elements` parameter is an iterable object that contains the initial
22
- * elements to be added to the priority queue. It is an optional parameter, and if not provided, the
23
- * priority queue will be initialized as empty.
24
- * @param [options] - The `options` parameter is an optional object that can be used to customize the
25
- * behavior of the priority queue. It can contain the following properties:
26
- */
27
14
  constructor(elements?: Iterable<E> | Iterable<R>, options?: PriorityQueueOptions<E, R>);
28
- /**
29
- * The `clone` function returns a new instance of the `PriorityQueue` class with the same comparator
30
- * and toElementFn as the original instance.
31
- * @returns The method is returning a new instance of the `PriorityQueue` class with the same
32
- * elements and properties as the current instance.
33
- */
34
- clone(): PriorityQueue<E, R>;
35
- /**
36
- * Time Complexity: O(n)
37
- * Space Complexity: O(n)
38
- *
39
- * The `filter` function creates a new PriorityQueue object containing elements that pass a given callback
40
- * function.
41
- * @param callback - The `callback` parameter is a function that will be called for each element in
42
- * the heap. It takes three arguments: the current element, the index of the current element, and the
43
- * heap itself. The callback function should return a boolean value indicating whether the current
44
- * element should be included in the filtered list
45
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
46
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
47
- * passed as the `this` value to the `callback` function. If `thisArg` is
48
- * @returns The `filter` method is returning a new `PriorityQueue` object that contains the elements that pass
49
- * the filter condition specified by the `callback` function.
50
- */
51
- filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): PriorityQueue<E, R>;
52
- /**
53
- * Time Complexity: O(n log n)
54
- * Space Complexity: O(n)
55
- *
56
- * The `map` function creates a new heap by applying a callback function to each element of the
57
- * original heap.
58
- * @param callback - The `callback` parameter is a function that will be called for each element in
59
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
60
- * element), and `this` (the heap itself). The callback function should return a value of
61
- * @param comparator - The `comparator` parameter is a function that defines the order of the
62
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
63
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
64
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
65
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
66
- * returns a value of type `T`. This function is used to transform the elements of the original
67
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
68
- * specify the value of `this` within the callback function. It is used to set the context or scope
69
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
70
- * value of
71
- * @returns a new instance of the `PriorityQueue` class with the mapped elements.
72
- */
73
- map<EM, RM>(callback: ElementCallback<E, R, EM>, comparator: Comparator<EM>, toElementFn?: (rawElement: RM) => EM, thisArg?: any): PriorityQueue<EM, RM>;
74
15
  }
@@ -1,96 +1,21 @@
1
1
  "use strict";
2
+ /**
3
+ * data-structure-typed
4
+ *
5
+ * @author Kirk Qi
6
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
7
+ * @license MIT License
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  exports.PriorityQueue = void 0;
4
11
  const heap_1 = require("../heap");
5
12
  /**
6
- * 1. Element Priority: In a PriorityQueue, elements are sorted according to their priority. Each dequeue (element removal) operation removes the element with the highest priority. The priority can be determined based on the natural ordering of the elements or through a provided comparator (Comparator).
7
- * 2. Heap-Based Implementation: PriorityQueue is typically implemented using a binary heap, allowing both insertion and removal operations to be completed in O(log n) time, where n is the number of elements in the queue.
8
- * 3. Task Scheduling: In systems where tasks need to be processed based on the urgency of tasks rather than the order of arrival.
9
- * 4. Dijkstra's Algorithm: In shortest path algorithms for graphs, used to select the next shortest edge to visit.
10
- * 5. Huffman Coding: Used to select the smallest node combination when constructing a Huffman tree.
11
- * 6. Kth Largest Element in a Data Stream: Used to maintain a min-heap of size K for quickly finding the Kth largest element in stream data
13
+ * @example
12
14
  */
13
15
  class PriorityQueue extends heap_1.Heap {
14
- /**
15
- * The constructor initializes a priority queue with optional elements and options.
16
- * @param elements - The `elements` parameter is an iterable object that contains the initial
17
- * elements to be added to the priority queue. It is an optional parameter, and if not provided, the
18
- * priority queue will be initialized as empty.
19
- * @param [options] - The `options` parameter is an optional object that can be used to customize the
20
- * behavior of the priority queue. It can contain the following properties:
21
- */
22
16
  constructor(elements = [], options) {
23
17
  super(elements, options);
24
18
  }
25
- /**
26
- * The `clone` function returns a new instance of the `PriorityQueue` class with the same comparator
27
- * and toElementFn as the original instance.
28
- * @returns The method is returning a new instance of the `PriorityQueue` class with the same
29
- * elements and properties as the current instance.
30
- */
31
- clone() {
32
- return new PriorityQueue(this, { comparator: this.comparator, toElementFn: this.toElementFn });
33
- }
34
- /**
35
- * Time Complexity: O(n)
36
- * Space Complexity: O(n)
37
- *
38
- * The `filter` function creates a new PriorityQueue object containing elements that pass a given callback
39
- * function.
40
- * @param callback - The `callback` parameter is a function that will be called for each element in
41
- * the heap. It takes three arguments: the current element, the index of the current element, and the
42
- * heap itself. The callback function should return a boolean value indicating whether the current
43
- * element should be included in the filtered list
44
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
45
- * to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
46
- * passed as the `this` value to the `callback` function. If `thisArg` is
47
- * @returns The `filter` method is returning a new `PriorityQueue` object that contains the elements that pass
48
- * the filter condition specified by the `callback` function.
49
- */
50
- filter(callback, thisArg) {
51
- const filteredPriorityQueue = new PriorityQueue([], {
52
- toElementFn: this.toElementFn,
53
- comparator: this.comparator
54
- });
55
- let index = 0;
56
- for (const current of this) {
57
- if (callback.call(thisArg, current, index, this)) {
58
- filteredPriorityQueue.add(current);
59
- }
60
- index++;
61
- }
62
- return filteredPriorityQueue;
63
- }
64
- /**
65
- * Time Complexity: O(n log n)
66
- * Space Complexity: O(n)
67
- *
68
- * The `map` function creates a new heap by applying a callback function to each element of the
69
- * original heap.
70
- * @param callback - The `callback` parameter is a function that will be called for each element in
71
- * the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
72
- * element), and `this` (the heap itself). The callback function should return a value of
73
- * @param comparator - The `comparator` parameter is a function that defines the order of the
74
- * elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
75
- * if `a` should be placed before `b`, a positive number if `a` should be placed after
76
- * @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
77
- * element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
78
- * returns a value of type `T`. This function is used to transform the elements of the original
79
- * @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
80
- * specify the value of `this` within the callback function. It is used to set the context or scope
81
- * in which the callback function will be executed. If `thisArg` is provided, it will be used as the
82
- * value of
83
- * @returns a new instance of the `PriorityQueue` class with the mapped elements.
84
- */
85
- map(callback, comparator, toElementFn, thisArg) {
86
- const mappedPriorityQueue = new PriorityQueue([], { comparator, toElementFn });
87
- let index = 0;
88
- for (const el of this) {
89
- mappedPriorityQueue.add(callback.call(thisArg, el, index, this));
90
- index++;
91
- }
92
- return mappedPriorityQueue;
93
- }
94
19
  }
95
20
  exports.PriorityQueue = PriorityQueue;
96
21
  //# sourceMappingURL=priority-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"priority-queue.js","sourceRoot":"","sources":["../../../../src/data-structures/priority-queue/priority-queue.ts"],"names":[],"mappings":";;;AAQA,kCAA+B;AAE/B;;;;;;;GAOG;AACH,MAAa,aAAgC,SAAQ,WAAU;IAC7D;;;;;;;OAOG;IACH,YAAY,WAAsC,EAAE,EAAE,OAAoC;QACxF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACM,KAAK;QACZ,OAAO,IAAI,aAAa,CAAO,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACM,MAAM,CAAC,QAAwC,EAAE,OAAa;QACrE,MAAM,qBAAqB,GAAG,IAAI,aAAa,CAAO,EAAE,EAAE;YACxD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACjD,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACM,GAAG,CACV,QAAmC,EACnC,UAA0B,EAC1B,WAAoC,EACpC,OAAa;QAEb,MAAM,mBAAmB,GAA0B,IAAI,aAAa,CAAS,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9G,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACjE,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF;AAzFD,sCAyFC"}
1
+ {"version":3,"file":"priority-queue.js","sourceRoot":"","sources":["../../../../src/data-structures/priority-queue/priority-queue.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,kCAA+B;AAE/B;;GAEG;AACH,MAAa,aAAgC,SAAQ,WAAU;IAC7D,YAAY,WAAsC,EAAE,EAAE,OAAoC;QACxF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF;AAJD,sCAIC"}