data-structure-typed 1.49.3 → 1.49.5

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 (162) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +70 -69
  3. package/README_zh-CN.md +44 -49
  4. package/benchmark/report.html +16 -16
  5. package/benchmark/report.json +187 -187
  6. package/dist/cjs/data-structures/base/iterable-base.d.ts +1 -1
  7. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +2 -14
  10. package/dist/cjs/data-structures/binary-tree/binary-tree.js +19 -49
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
  15. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +1 -43
  16. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  17. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +2 -11
  18. package/dist/cjs/data-structures/graph/abstract-graph.js +3 -19
  19. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  20. package/dist/cjs/data-structures/graph/directed-graph.js +4 -0
  21. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  22. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  23. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  24. package/dist/cjs/data-structures/hash/hash-map.d.ts +1 -1
  25. package/dist/cjs/data-structures/hash/hash-map.js +2 -2
  26. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  27. package/dist/cjs/data-structures/heap/heap.js +2 -3
  28. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  29. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  30. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  31. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  32. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  33. package/dist/cjs/data-structures/matrix/index.d.ts +0 -2
  34. package/dist/cjs/data-structures/matrix/index.js +0 -2
  35. package/dist/cjs/data-structures/matrix/index.js.map +1 -1
  36. package/dist/cjs/data-structures/matrix/matrix.d.ts +128 -10
  37. package/dist/cjs/data-structures/matrix/matrix.js +400 -15
  38. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  39. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  40. package/dist/cjs/data-structures/queue/deque.d.ts +2 -2
  41. package/dist/cjs/data-structures/queue/deque.js +5 -7
  42. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  43. package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
  44. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  45. package/dist/cjs/types/data-structures/heap/heap.d.ts +1 -1
  46. package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  47. package/dist/cjs/utils/utils.d.ts +1 -0
  48. package/dist/cjs/utils/utils.js +6 -1
  49. package/dist/cjs/utils/utils.js.map +1 -1
  50. package/dist/mjs/data-structures/base/iterable-base.d.ts +1 -1
  51. package/dist/mjs/data-structures/binary-tree/avl-tree.js +2 -1
  52. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +2 -14
  53. package/dist/mjs/data-structures/binary-tree/binary-tree.js +20 -50
  54. package/dist/mjs/data-structures/binary-tree/bst.js +2 -1
  55. package/dist/mjs/data-structures/binary-tree/rb-tree.js +2 -1
  56. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
  57. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +3 -44
  58. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -11
  59. package/dist/mjs/data-structures/graph/abstract-graph.js +4 -20
  60. package/dist/mjs/data-structures/graph/directed-graph.js +4 -0
  61. package/dist/mjs/data-structures/hash/hash-map.d.ts +1 -1
  62. package/dist/mjs/data-structures/hash/hash-map.js +2 -2
  63. package/dist/mjs/data-structures/heap/heap.js +2 -3
  64. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  65. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +1 -1
  66. package/dist/mjs/data-structures/matrix/index.d.ts +0 -2
  67. package/dist/mjs/data-structures/matrix/index.js +0 -2
  68. package/dist/mjs/data-structures/matrix/matrix.d.ts +128 -10
  69. package/dist/mjs/data-structures/matrix/matrix.js +399 -16
  70. package/dist/mjs/data-structures/queue/deque.d.ts +2 -2
  71. package/dist/mjs/data-structures/queue/deque.js +7 -9
  72. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  73. package/dist/mjs/data-structures/queue/queue.js +1 -1
  74. package/dist/mjs/types/data-structures/base/base.d.ts +1 -1
  75. package/dist/mjs/types/data-structures/heap/heap.d.ts +1 -1
  76. package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  77. package/dist/mjs/utils/utils.d.ts +1 -0
  78. package/dist/mjs/utils/utils.js +4 -0
  79. package/dist/umd/data-structure-typed.js +361 -542
  80. package/dist/umd/data-structure-typed.min.js +2 -2
  81. package/dist/umd/data-structure-typed.min.js.map +1 -1
  82. package/package.json +4 -3
  83. package/src/data-structures/base/index.ts +1 -1
  84. package/src/data-structures/base/iterable-base.ts +7 -10
  85. package/src/data-structures/binary-tree/avl-tree.ts +15 -8
  86. package/src/data-structures/binary-tree/binary-tree.ts +57 -74
  87. package/src/data-structures/binary-tree/bst.ts +16 -13
  88. package/src/data-structures/binary-tree/rb-tree.ts +16 -10
  89. package/src/data-structures/binary-tree/tree-multimap.ts +11 -48
  90. package/src/data-structures/graph/abstract-graph.ts +14 -24
  91. package/src/data-structures/graph/directed-graph.ts +8 -6
  92. package/src/data-structures/graph/map-graph.ts +6 -1
  93. package/src/data-structures/graph/undirected-graph.ts +4 -7
  94. package/src/data-structures/hash/hash-map.ts +18 -16
  95. package/src/data-structures/heap/heap.ts +7 -10
  96. package/src/data-structures/heap/max-heap.ts +2 -1
  97. package/src/data-structures/heap/min-heap.ts +2 -1
  98. package/src/data-structures/linked-list/singly-linked-list.ts +3 -5
  99. package/src/data-structures/matrix/index.ts +0 -2
  100. package/src/data-structures/matrix/matrix.ts +442 -13
  101. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -10
  102. package/src/data-structures/queue/deque.ts +18 -39
  103. package/src/data-structures/queue/queue.ts +1 -1
  104. package/src/interfaces/binary-tree.ts +7 -2
  105. package/src/types/common.ts +4 -4
  106. package/src/types/data-structures/base/base.ts +14 -3
  107. package/src/types/data-structures/base/index.ts +1 -1
  108. package/src/types/data-structures/graph/abstract-graph.ts +4 -2
  109. package/src/types/data-structures/hash/hash-map.ts +3 -3
  110. package/src/types/data-structures/heap/heap.ts +2 -2
  111. package/src/types/data-structures/priority-queue/priority-queue.ts +2 -2
  112. package/src/utils/utils.ts +7 -1
  113. package/test/integration/avl-tree.test.ts +18 -1
  114. package/test/integration/bst.test.ts +2 -2
  115. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +1 -1
  116. package/test/performance/data-structures/comparison/comparison.test.ts +18 -23
  117. package/test/performance/data-structures/hash/hash-map.test.ts +3 -4
  118. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +16 -28
  119. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +4 -12
  120. package/test/performance/data-structures/queue/deque.test.ts +11 -12
  121. package/test/performance/data-structures/queue/queue.test.ts +15 -14
  122. package/test/performance/data-structures/stack/stack.test.ts +11 -11
  123. package/test/performance/reportor.ts +14 -15
  124. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -3
  125. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +65 -15
  126. package/test/unit/data-structures/binary-tree/bst.test.ts +52 -26
  127. package/test/unit/data-structures/binary-tree/overall.test.ts +16 -18
  128. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +17 -6
  129. package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -21
  130. package/test/unit/data-structures/graph/abstract-graph.test.ts +11 -0
  131. package/test/unit/data-structures/graph/directed-graph.test.ts +112 -40
  132. package/test/unit/data-structures/graph/undirected-graph.test.ts +63 -33
  133. package/test/unit/data-structures/hash/hash-map.test.ts +64 -23
  134. package/test/unit/data-structures/hash/hash-table.test.ts +0 -4
  135. package/test/unit/data-structures/heap/heap.test.ts +0 -1
  136. package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
  137. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -4
  138. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +3 -4
  139. package/test/unit/data-structures/matrix/matrix.test.ts +345 -52
  140. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
  141. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -1
  142. package/test/unit/data-structures/queue/deque.test.ts +0 -6
  143. package/test/unit/data-structures/queue/queue.test.ts +1 -1
  144. package/test/unit/data-structures/stack/stack.test.ts +3 -4
  145. package/test/unit/unrestricted-interconversion.test.ts +50 -44
  146. package/test/utils/big-o.ts +14 -14
  147. package/test/utils/performanc.ts +1 -1
  148. package/typedoc.json +30 -0
  149. package/dist/cjs/data-structures/matrix/matrix2d.d.ts +0 -107
  150. package/dist/cjs/data-structures/matrix/matrix2d.js +0 -200
  151. package/dist/cjs/data-structures/matrix/matrix2d.js.map +0 -1
  152. package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -200
  153. package/dist/cjs/data-structures/matrix/vector2d.js +0 -291
  154. package/dist/cjs/data-structures/matrix/vector2d.js.map +0 -1
  155. package/dist/mjs/data-structures/matrix/matrix2d.d.ts +0 -107
  156. package/dist/mjs/data-structures/matrix/matrix2d.js +0 -196
  157. package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -200
  158. package/dist/mjs/data-structures/matrix/vector2d.js +0 -289
  159. package/src/data-structures/matrix/matrix2d.ts +0 -211
  160. package/src/data-structures/matrix/vector2d.ts +0 -315
  161. package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -345
  162. package/test/unit/data-structures/matrix/vector2d.test.ts +0 -171
@@ -45,11 +45,14 @@ export class TreeMultimapNode<
45
45
  /**
46
46
  * The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
47
47
  */
48
- export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N> = TreeMultimapNode<K, V, TreeMultimapNodeNested<K, V>>,
49
- TREE extends TreeMultimap<K, V, N, TREE> = TreeMultimap<K, V, N, TreeMultimapNested<K, V, N>>>
48
+ export class TreeMultimap<
49
+ K = any,
50
+ V = any,
51
+ N extends TreeMultimapNode<K, V, N> = TreeMultimapNode<K, V, TreeMultimapNodeNested<K, V>>,
52
+ TREE extends TreeMultimap<K, V, N, TREE> = TreeMultimap<K, V, N, TreeMultimapNested<K, V, N>>
53
+ >
50
54
  extends AVLTree<K, V, N, TREE>
51
55
  implements IBinaryTree<K, V, N, TREE> {
52
-
53
56
  constructor(elements?: Iterable<BTNExemplar<K, V, N>>, options?: Partial<TreeMultimapOptions<K>>) {
54
57
  super([], options);
55
58
  if (elements) this.addMany(elements);
@@ -60,7 +63,7 @@ export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N>
60
63
  // TODO the _count is not accurate after nodes count modified
61
64
  get count(): number {
62
65
  let sum = 0;
63
- this.subTreeTraverse(node => sum += node.count);
66
+ this.subTreeTraverse(node => (sum += node.count));
64
67
  return sum;
65
68
  }
66
69
 
@@ -80,7 +83,8 @@ export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N>
80
83
  override createTree(options?: TreeMultimapOptions<K>): TREE {
81
84
  return new TreeMultimap<K, V, N, TREE>([], {
82
85
  iterationType: this.iterationType,
83
- variant: this.variant, ...options
86
+ variant: this.variant,
87
+ ...options
84
88
  }) as TREE;
85
89
  }
86
90
 
@@ -101,7 +105,7 @@ export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N>
101
105
  * @returns a boolean value indicating whether the potentialKey is of type number or not.
102
106
  */
103
107
  override isNotNodeInstance(potentialKey: BTNKeyOrNode<K, N>): potentialKey is K {
104
- return !(potentialKey instanceof TreeMultimapNode)
108
+ return !(potentialKey instanceof TreeMultimapNode);
105
109
  }
106
110
 
107
111
  /**
@@ -357,47 +361,6 @@ export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N>
357
361
  return cloned;
358
362
  }
359
363
 
360
- /**
361
- * Time Complexity: O(1) - constant time, as it performs basic pointer assignments.
362
- * Space Complexity: O(1) - constant space, as it only uses a constant amount of memory.
363
- *
364
- * The function adds a new node to a binary tree, either as the left child or the right child of a
365
- * given parent node.
366
- * @param {N | undefined} newNode - The `newNode` parameter represents the node that needs to be
367
- * added to the binary tree. It can be of type `N` (which represents a node in the binary tree) or
368
- * `undefined` if there is no node to add.
369
- * @param {K | N | undefined} parent - The `parent` parameter represents the parent node to
370
- * which the new node will be added as a child. It can be either a node object (`N`) or a key value
371
- * (`K`).
372
- * @returns The method `_addTo` returns either the `parent.left` or `parent.right` node that was
373
- * added, or `undefined` if no node was added.
374
- */
375
- protected override _addTo(newNode: N | undefined, parent: BSTNKeyOrNode<K, N>): N | undefined {
376
- parent = this.ensureNode(parent);
377
- if (parent) {
378
- if (parent.left === undefined) {
379
- parent.left = newNode;
380
- if (newNode !== undefined) {
381
- this._size = this.size + 1;
382
- this._count += newNode.count;
383
- }
384
-
385
- return parent.left;
386
- } else if (parent.right === undefined) {
387
- parent.right = newNode;
388
- if (newNode !== undefined) {
389
- this._size = this.size + 1;
390
- this._count += newNode.count;
391
- }
392
- return parent.right;
393
- } else {
394
- return;
395
- }
396
- } else {
397
- return;
398
- }
399
- }
400
-
401
364
  /**
402
365
  * The `_swapProperties` function swaps the key, value, count, and height properties between two nodes.
403
366
  * @param {K | N | undefined} srcNode - The `srcNode` parameter represents the source node from
@@ -433,7 +396,7 @@ export class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N>
433
396
  }
434
397
 
435
398
  protected _replaceNode(oldNode: N, newNode: N): N {
436
- newNode.count = oldNode.count + newNode.count
399
+ newNode.count = oldNode.count + newNode.count;
437
400
  return super._replaceNode(oldNode, newNode);
438
401
  }
439
402
  }
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import type { DijkstraResult, EntryCallback, VertexKey } from '../../types';
9
9
  import { uuidV4 } from '../../utils';
10
- import { IterableEntryBase } from "../base";
10
+ import { IterableEntryBase } from '../base';
11
11
  import { IGraph } from '../../interfaces';
12
12
  import { Heap } from '../heap';
13
13
  import { Queue } from '../queue';
@@ -65,7 +65,9 @@ export abstract class AbstractGraph<
65
65
  E = any,
66
66
  VO extends AbstractVertex<V> = AbstractVertex<V>,
67
67
  EO extends AbstractEdge<E> = AbstractEdge<E>
68
- > extends IterableEntryBase<VertexKey, V | undefined> implements IGraph<V, E, VO, EO> {
68
+ >
69
+ extends IterableEntryBase<VertexKey, V | undefined>
70
+ implements IGraph<V, E, VO, EO> {
69
71
  constructor() {
70
72
  super();
71
73
  }
@@ -165,7 +167,7 @@ export abstract class AbstractGraph<
165
167
 
166
168
  isVertexKey(potentialKey: any): potentialKey is VertexKey {
167
169
  const potentialKeyType = typeof potentialKey;
168
- return potentialKeyType === "string" || potentialKeyType === "number"
170
+ return potentialKeyType === 'string' || potentialKeyType === 'number';
169
171
  }
170
172
 
171
173
  /**
@@ -173,19 +175,7 @@ export abstract class AbstractGraph<
173
175
  * Space Complexity: O(1) - Constant space, as it creates only a few variables.
174
176
  */
175
177
 
176
- /**
177
- * Time Complexity: O(1) - Constant time for Map operations.
178
- * Space Complexity: O(1) - Constant space, as it creates only a few variables.
179
- *
180
- * The `deleteVertex` function removes a vertex from a graph by its ID or by the vertex object itself.
181
- * @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
182
- * (`VertexKey`).
183
- * @returns The method is returning a boolean value.
184
- */
185
- deleteVertex(vertexOrKey: VO | VertexKey): boolean {
186
- const vertexKey = this._getVertexKey(vertexOrKey);
187
- return this._vertexMap.delete(vertexKey);
188
- }
178
+ abstract deleteVertex(vertexOrKey: VO | VertexKey): boolean;
189
179
 
190
180
  /**
191
181
  * Time Complexity: O(K), where K is the number of vertexMap to be removed.
@@ -674,7 +664,6 @@ export abstract class AbstractGraph<
674
664
  getMinDist: boolean = false,
675
665
  genPaths: boolean = false
676
666
  ): DijkstraResult<VO> {
677
-
678
667
  let minDist = Infinity;
679
668
  let minDest: VO | undefined = undefined;
680
669
  let minPath: VO[] = [];
@@ -1182,7 +1171,10 @@ export abstract class AbstractGraph<
1182
1171
 
1183
1172
  const dfs = (vertex: VO, currentPath: VertexKey[], visited: Set<VO>) => {
1184
1173
  if (visited.has(vertex)) {
1185
- if ((!isInclude2Cycle && currentPath.length > 2 || isInclude2Cycle && currentPath.length >= 2) && currentPath[0] === vertex.key) {
1174
+ if (
1175
+ ((!isInclude2Cycle && currentPath.length > 2) || (isInclude2Cycle && currentPath.length >= 2)) &&
1176
+ currentPath[0] === vertex.key
1177
+ ) {
1186
1178
  cycles.push([...currentPath]);
1187
1179
  }
1188
1180
  return;
@@ -1207,18 +1199,16 @@ export abstract class AbstractGraph<
1207
1199
  const uniqueCycles = new Map<string, VertexKey[]>();
1208
1200
 
1209
1201
  for (const cycle of cycles) {
1210
- const sorted = [...cycle].sort().toString()
1202
+ const sorted = [...cycle].sort().toString();
1211
1203
 
1212
- if (uniqueCycles.has(sorted)) continue
1204
+ if (uniqueCycles.has(sorted)) continue;
1213
1205
  else {
1214
- uniqueCycles.set(sorted, cycle)
1206
+ uniqueCycles.set(sorted, cycle);
1215
1207
  }
1216
1208
  }
1217
1209
 
1218
1210
  // Convert the unique cycles back to an array
1219
- return [...uniqueCycles].map(cycleString =>
1220
- cycleString[1]
1221
- );
1211
+ return [...uniqueCycles].map(cycleString => cycleString[1]);
1222
1212
  }
1223
1213
 
1224
1214
  /**
@@ -182,7 +182,6 @@ export class DirectedGraph<
182
182
  * Space Complexity: O(1)
183
183
  */
184
184
 
185
-
186
185
  /**
187
186
  * Time Complexity: O(E) where E is the number of edgeMap
188
187
  * Space Complexity: O(1)
@@ -240,7 +239,7 @@ export class DirectedGraph<
240
239
  * (`VertexKey`).
241
240
  * @returns The method is returning a boolean value.
242
241
  */
243
- override deleteVertex(vertexOrKey: VO | VertexKey): boolean {
242
+ deleteVertex(vertexOrKey: VO | VertexKey): boolean {
244
243
  let vertexKey: VertexKey;
245
244
  let vertex: VO | undefined;
246
245
  if (this.isVertexKey(vertexOrKey)) {
@@ -248,12 +247,16 @@ export class DirectedGraph<
248
247
  vertexKey = vertexOrKey;
249
248
  } else {
250
249
  vertex = vertexOrKey;
251
- vertexKey = this._getVertexKey(vertexOrKey)
250
+ vertexKey = this._getVertexKey(vertexOrKey);
252
251
  }
253
252
 
254
253
  if (vertex) {
255
- this._outEdgeMap.delete(vertex)
256
- this._inEdgeMap.delete(vertex)
254
+ const neighbors = this.getNeighbors(vertex);
255
+ for (const neighbor of neighbors) {
256
+ this._inEdgeMap.delete(neighbor);
257
+ }
258
+ this._outEdgeMap.delete(vertex);
259
+ this._inEdgeMap.delete(vertex);
257
260
  }
258
261
 
259
262
  return this._vertexMap.delete(vertexKey);
@@ -596,7 +599,6 @@ export class DirectedGraph<
596
599
  }
597
600
  }
598
601
 
599
-
600
602
  /**
601
603
  * Time Complexity: O(1)
602
604
  * Space Complexity: O(1)
@@ -84,7 +84,12 @@ export class MapGraph<
84
84
  * @param {number} long - The `long` parameter represents the longitude coordinate of the vertex.
85
85
  * @returns The method is returning a new instance of the `MapVertex` class, casted as type `VO`.
86
86
  */
87
- override createVertex(key: VertexKey, value?: V, lat: number = this.originCoord[0], long: number = this.originCoord[1]): VO {
87
+ override createVertex(
88
+ key: VertexKey,
89
+ value?: V,
90
+ lat: number = this.originCoord[0],
91
+ long: number = this.originCoord[1]
92
+ ): VO {
88
93
  return new MapVertex(key, value, lat, long) as VO;
89
94
  }
90
95
 
@@ -162,7 +162,6 @@ export class UndirectedGraph<
162
162
  * Space Complexity: O(1)
163
163
  */
164
164
 
165
-
166
165
  /**
167
166
  * Time Complexity: O(E), where E is the number of edgeMap incident to the given vertex.
168
167
  * Space Complexity: O(1)
@@ -192,7 +191,6 @@ export class UndirectedGraph<
192
191
 
193
192
  if (oneSide && otherSide) {
194
193
  return this.deleteEdgeBetween(oneSide, otherSide);
195
-
196
194
  } else {
197
195
  return;
198
196
  }
@@ -212,7 +210,7 @@ export class UndirectedGraph<
212
210
  * (`VertexKey`).
213
211
  * @returns The method is returning a boolean value.
214
212
  */
215
- override deleteVertex(vertexOrKey: VO | VertexKey): boolean {
213
+ deleteVertex(vertexOrKey: VO | VertexKey): boolean {
216
214
  let vertexKey: VertexKey;
217
215
  let vertex: VO | undefined;
218
216
  if (this.isVertexKey(vertexOrKey)) {
@@ -220,10 +218,10 @@ export class UndirectedGraph<
220
218
  vertexKey = vertexOrKey;
221
219
  } else {
222
220
  vertex = vertexOrKey;
223
- vertexKey = this._getVertexKey(vertexOrKey)
221
+ vertexKey = this._getVertexKey(vertexOrKey);
224
222
  }
225
223
 
226
- const neighbors = this.getNeighbors(vertexOrKey)
224
+ const neighbors = this.getNeighbors(vertexOrKey);
227
225
 
228
226
  if (vertex) {
229
227
  neighbors.forEach(neighbor => {
@@ -234,9 +232,8 @@ export class UndirectedGraph<
234
232
  });
235
233
  this._edgeMap.set(neighbor, restEdges);
236
234
  }
237
- })
235
+ });
238
236
  this._edgeMap.delete(vertex);
239
-
240
237
  }
241
238
 
242
239
  return this._vertexMap.delete(vertexKey);
@@ -27,9 +27,12 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
27
27
  * @param [options] - The `options` parameter is an optional object that can contain additional
28
28
  * configuration options for the constructor. In this case, it has one property:
29
29
  */
30
- constructor(elements: Iterable<[K, V]> = [], options?: {
31
- hashFn: (key: K) => string
32
- }) {
30
+ constructor(
31
+ elements: Iterable<[K, V]> = [],
32
+ options?: {
33
+ hashFn: (key: K) => string;
34
+ }
35
+ ) {
33
36
  super();
34
37
  if (options) {
35
38
  const { hashFn } = options;
@@ -73,7 +76,6 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
73
76
  this._size++;
74
77
  }
75
78
  this._objMap.set(key, value);
76
-
77
79
  } else {
78
80
  const strKey = this._getNoObjKey(key);
79
81
  if (this._store[strKey] === undefined) {
@@ -137,7 +139,7 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
137
139
  delete(key: K): boolean {
138
140
  if (this._isObjKey(key)) {
139
141
  if (this._objMap.has(key)) {
140
- this._size--
142
+ this._size--;
141
143
  }
142
144
 
143
145
  return this._objMap.delete(key);
@@ -235,19 +237,19 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
235
237
 
236
238
  protected _hashFn: (key: K) => string = (key: K) => String(key);
237
239
 
238
- protected _isObjKey(key: any): key is (object | ((...args: any[]) => any)) {
240
+ protected _isObjKey(key: any): key is object | ((...args: any[]) => any) {
239
241
  const keyType = typeof key;
240
- return (keyType === 'object' || keyType === 'function') && key !== null
242
+ return (keyType === 'object' || keyType === 'function') && key !== null;
241
243
  }
242
244
 
243
245
  protected _getNoObjKey(key: K): string {
244
246
  const keyType = typeof key;
245
247
 
246
248
  let strKey: string;
247
- if (keyType !== "string" && keyType !== "number" && keyType !== "symbol") {
249
+ if (keyType !== 'string' && keyType !== 'number' && keyType !== 'symbol') {
248
250
  strKey = this._hashFn(key);
249
251
  } else {
250
- if (keyType === "number") {
252
+ if (keyType === 'number') {
251
253
  // TODO numeric key should has its own hash
252
254
  strKey = <string>key;
253
255
  } else {
@@ -264,7 +266,6 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
264
266
  * 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.
265
267
  */
266
268
  export class LinkedHashMap<K = any, V = any> extends IterableEntryBase<K, V> {
267
-
268
269
  protected _noObjMap: Record<string, HashMapLinkedNode<K, V | undefined>> = {};
269
270
  protected _objMap = new WeakMap<object, HashMapLinkedNode<K, V | undefined>>();
270
271
  protected _head: HashMapLinkedNode<K, V | undefined>;
@@ -273,12 +274,13 @@ export class LinkedHashMap<K = any, V = any> extends IterableEntryBase<K, V> {
273
274
  protected _hashFn: (key: K) => string;
274
275
  protected _objHashFn: (key: K) => object;
275
276
 
276
-
277
- constructor(elements?: Iterable<[K, V]>, options: HashMapOptions<K> = {
278
-
279
- hashFn: (key: K) => String(key),
280
- objHashFn: (key: K) => (<object>key)
281
- }) {
277
+ constructor(
278
+ elements?: Iterable<[K, V]>,
279
+ options: HashMapOptions<K> = {
280
+ hashFn: (key: K) => String(key),
281
+ objHashFn: (key: K) => <object>key
282
+ }
283
+ ) {
282
284
  super();
283
285
  this._sentinel = <HashMapLinkedNode<K, V>>{};
284
286
  this._sentinel.prev = this._sentinel.next = this._head = this._tail = this._sentinel;
@@ -31,13 +31,13 @@ export class Heap<E = any> extends IterableElementBase<E> {
31
31
  } else {
32
32
  return a - b;
33
33
  }
34
- }
34
+ };
35
35
  if (options) {
36
- this.options = options
36
+ this.options = options;
37
37
  } else {
38
38
  this.options = {
39
39
  comparator: defaultComparator
40
- }
40
+ };
41
41
  }
42
42
 
43
43
  if (elements) {
@@ -225,7 +225,8 @@ export class Heap<E = any> extends IterableElementBase<E> {
225
225
 
226
226
  // Auxiliary recursive function, traverses the binary heap according to the traversal order
227
227
  const _dfs = (index: number) => {
228
- const left = 2 * index + 1, right = left + 1;
228
+ const left = 2 * index + 1,
229
+ right = left + 1;
229
230
  if (index < this.size) {
230
231
  if (order === 'in') {
231
232
  _dfs(left);
@@ -380,7 +381,6 @@ export class Heap<E = any> extends IterableElementBase<E> {
380
381
  * original Heap.
381
382
  */
382
383
  map<T>(callback: ElementCallback<E, T>, comparator: Comparator<T>, thisArg?: any): Heap<T> {
383
-
384
384
  const mappedHeap: Heap<T> = new Heap<T>([], { comparator: comparator });
385
385
  let index = 0;
386
386
  for (const el of this) {
@@ -432,13 +432,10 @@ export class Heap<E = any> extends IterableElementBase<E> {
432
432
  protected _sinkDown(index: number, halfLength: number): boolean {
433
433
  const element = this.elements[index];
434
434
  while (index < halfLength) {
435
- let left = index << 1 | 1;
435
+ let left = (index << 1) | 1;
436
436
  const right = left + 1;
437
437
  let minItem = this.elements[left];
438
- if (
439
- right < this.elements.length &&
440
- this.options.comparator(minItem, this.elements[right]) > 0
441
- ) {
438
+ if (right < this.elements.length && this.options.comparator(minItem, this.elements[right]) > 0) {
442
439
  left = right;
443
440
  minItem = this.elements[right];
444
441
  }
@@ -29,7 +29,8 @@ export class MaxHeap<E = any> extends Heap<E> {
29
29
  return b - a;
30
30
  }
31
31
  }
32
- }) {
32
+ }
33
+ ) {
33
34
  super(elements, options);
34
35
  }
35
36
  }
@@ -29,7 +29,8 @@ export class MinHeap<E = any> extends Heap<E> {
29
29
  return a - b;
30
30
  }
31
31
  }
32
- }) {
32
+ }
33
+ ) {
33
34
  super(elements, options);
34
35
  }
35
36
  }
@@ -5,8 +5,8 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { ElementCallback } from "../../types";
9
- import { IterableElementBase } from "../base";
8
+ import type { ElementCallback } from '../../types';
9
+ import { IterableElementBase } from '../base';
10
10
 
11
11
  export class SinglyLinkedListNode<E = any> {
12
12
  value: E;
@@ -33,8 +33,7 @@ export class SinglyLinkedList<E = any> extends IterableElementBase<E> {
33
33
  this._tail = undefined;
34
34
  this._size = 0;
35
35
  if (elements) {
36
- for (const el of elements)
37
- this.push(el);
36
+ for (const el of elements) this.push(el);
38
37
  }
39
38
  }
40
39
 
@@ -716,7 +715,6 @@ export class SinglyLinkedList<E = any> extends IterableElementBase<E> {
716
715
  return filteredList;
717
716
  }
718
717
 
719
-
720
718
  /**
721
719
  * Time Complexity: O(n), where n is the number of elements in the linked list.
722
720
  * Space Complexity: O(n)
@@ -1,4 +1,2 @@
1
1
  export * from './matrix';
2
- export * from './vector2d';
3
- export * from './matrix2d';
4
2
  export * from './navigator';