data-structure-typed 2.6.0 → 2.6.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.
- package/.github/workflows/ci.yml +7 -2
- package/.github/workflows/release-package.yml +9 -2
- package/CHANGELOG.md +9 -1
- package/dist/cjs/binary-tree.cjs +2927 -23688
- package/dist/cjs/graph.cjs +845 -2634
- package/dist/cjs/hash.cjs +185 -616
- package/dist/cjs/heap.cjs +266 -818
- package/dist/cjs/index.cjs +5116 -31358
- package/dist/cjs/linked-list.cjs +644 -2615
- package/dist/cjs/matrix.cjs +220 -535
- package/dist/cjs/priority-queue.cjs +266 -818
- package/dist/cjs/queue.cjs +637 -2343
- package/dist/cjs/stack.cjs +124 -530
- package/dist/cjs/trie.cjs +145 -592
- package/dist/cjs-legacy/binary-tree.cjs +4352 -25113
- package/dist/cjs-legacy/graph.cjs +847 -2636
- package/dist/cjs-legacy/hash.cjs +181 -612
- package/dist/cjs-legacy/heap.cjs +266 -818
- package/dist/cjs-legacy/index.cjs +6657 -32899
- package/dist/cjs-legacy/linked-list.cjs +640 -2611
- package/dist/cjs-legacy/matrix.cjs +220 -535
- package/dist/cjs-legacy/priority-queue.cjs +266 -818
- package/dist/cjs-legacy/queue.cjs +634 -2340
- package/dist/cjs-legacy/stack.cjs +124 -530
- package/dist/cjs-legacy/trie.cjs +145 -592
- package/dist/esm/binary-tree.mjs +2927 -23688
- package/dist/esm/graph.mjs +845 -2634
- package/dist/esm/hash.mjs +185 -616
- package/dist/esm/heap.mjs +266 -818
- package/dist/esm/index.mjs +5116 -31358
- package/dist/esm/linked-list.mjs +644 -2615
- package/dist/esm/matrix.mjs +220 -535
- package/dist/esm/priority-queue.mjs +266 -818
- package/dist/esm/queue.mjs +637 -2343
- package/dist/esm/stack.mjs +124 -530
- package/dist/esm/trie.mjs +145 -592
- package/dist/esm-legacy/binary-tree.mjs +4352 -25113
- package/dist/esm-legacy/graph.mjs +847 -2636
- package/dist/esm-legacy/hash.mjs +181 -612
- package/dist/esm-legacy/heap.mjs +266 -818
- package/dist/esm-legacy/index.mjs +6657 -32899
- package/dist/esm-legacy/linked-list.mjs +640 -2611
- package/dist/esm-legacy/matrix.mjs +220 -535
- package/dist/esm-legacy/priority-queue.mjs +266 -818
- package/dist/esm-legacy/queue.mjs +634 -2340
- package/dist/esm-legacy/stack.mjs +124 -530
- package/dist/esm-legacy/trie.mjs +145 -592
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +29 -500
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +38 -563
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +230 -1212
- package/dist/types/data-structures/binary-tree/bst.d.ts +124 -1063
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +99 -854
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +62 -314
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +366 -5057
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +277 -4885
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +253 -3929
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +261 -4782
- package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -44
- package/dist/types/data-structures/graph/directed-graph.d.ts +130 -527
- package/dist/types/data-structures/graph/undirected-graph.d.ts +125 -482
- package/dist/types/data-structures/hash/hash-map.d.ts +132 -562
- package/dist/types/data-structures/heap/heap.d.ts +194 -746
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +120 -809
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -733
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +193 -863
- package/dist/types/data-structures/matrix/matrix.d.ts +159 -474
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +1 -6
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +6 -11
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
- package/dist/types/data-structures/queue/deque.d.ts +196 -804
- package/dist/types/data-structures/queue/queue.d.ts +99 -585
- package/dist/types/data-structures/stack/stack.d.ts +75 -481
- package/dist/types/data-structures/trie/trie.d.ts +98 -584
- package/dist/umd/data-structure-typed.js +6580 -32822
- package/dist/umd/data-structure-typed.min.js +3 -3
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +162 -215
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +9 -9
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +47 -47
- package/docs-site-docusaurus/docs/api/classes/BST.md +155 -208
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +7 -7
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +13 -29
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +104 -158
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/Deque.md +253 -101
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +60 -80
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +244 -114
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +9 -9
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +52 -48
- package/docs-site-docusaurus/docs/api/classes/Heap.md +119 -64
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +84 -14
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +138 -34
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +149 -41
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +23 -23
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +172 -92
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +60 -80
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +57 -52
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +117 -62
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +120 -70
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +117 -62
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +125 -75
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +119 -64
- package/docs-site-docusaurus/docs/api/classes/Queue.md +158 -74
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +171 -225
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -22
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +172 -94
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +4 -4
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +98 -75
- package/docs-site-docusaurus/docs/api/classes/Stack.md +112 -50
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +104 -129
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +90 -121
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +298 -107
- package/docs-site-docusaurus/docs/api/classes/Trie.md +116 -58
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +59 -77
- package/package.json +45 -46
- package/src/common/error.ts +15 -32
- package/src/common/index.ts +0 -3
- package/src/data-structures/base/iterable-element-base.ts +0 -3
- package/src/data-structures/base/linear-base.ts +2 -36
- package/src/data-structures/binary-tree/avl-tree.ts +31 -529
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +47 -572
- package/src/data-structures/binary-tree/binary-tree.ts +326 -1311
- package/src/data-structures/binary-tree/bst.ts +158 -1082
- package/src/data-structures/binary-tree/red-black-tree.ts +451 -1290
- package/src/data-structures/binary-tree/segment-tree.ts +73 -351
- package/src/data-structures/binary-tree/tree-map.ts +462 -5124
- package/src/data-structures/binary-tree/tree-multi-map.ts +302 -4914
- package/src/data-structures/binary-tree/tree-multi-set.ts +299 -3983
- package/src/data-structures/binary-tree/tree-set.ts +338 -4836
- package/src/data-structures/graph/abstract-graph.ts +98 -167
- package/src/data-structures/graph/directed-graph.ts +137 -562
- package/src/data-structures/graph/map-graph.ts +0 -3
- package/src/data-structures/graph/undirected-graph.ts +132 -511
- package/src/data-structures/hash/hash-map.ts +154 -582
- package/src/data-structures/heap/heap.ts +200 -795
- package/src/data-structures/linked-list/doubly-linked-list.ts +121 -865
- package/src/data-structures/linked-list/singly-linked-list.ts +122 -794
- package/src/data-structures/linked-list/skip-linked-list.ts +211 -918
- package/src/data-structures/matrix/matrix.ts +179 -518
- package/src/data-structures/matrix/navigator.ts +0 -1
- package/src/data-structures/priority-queue/max-priority-queue.ts +1 -6
- package/src/data-structures/priority-queue/min-priority-queue.ts +6 -11
- package/src/data-structures/priority-queue/priority-queue.ts +1 -2
- package/src/data-structures/queue/deque.ts +214 -882
- package/src/data-structures/queue/queue.ts +102 -625
- package/src/data-structures/stack/stack.ts +76 -505
- package/src/data-structures/trie/trie.ts +98 -628
- package/src/types/common.ts +0 -10
- package/src/types/data-structures/binary-tree/bst.ts +0 -7
- package/src/types/data-structures/binary-tree/red-black-tree.ts +0 -1
- package/src/types/data-structures/graph/abstract-graph.ts +0 -2
- package/src/types/data-structures/hash/hash-map.ts +0 -3
- package/src/types/data-structures/hash/index.ts +0 -1
- package/src/types/data-structures/matrix/navigator.ts +0 -2
- package/src/types/utils/utils.ts +0 -7
- package/src/types/utils/validate-type.ts +0 -7
- package/src/utils/number.ts +0 -2
- package/src/utils/utils.ts +0 -5
|
@@ -110,13 +110,13 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
110
110
|
* @remarks Time O(1), Space O(1)
|
|
111
111
|
*/
|
|
112
112
|
constructor(options?: Partial<GraphOptions<V>>);
|
|
113
|
-
protected get _edgeConnector(): string;
|
|
114
113
|
protected _outEdgeMap: Map<VO, EO[]>;
|
|
115
114
|
get outEdgeMap(): Map<VO, EO[]>;
|
|
116
115
|
set outEdgeMap(v: Map<VO, EO[]>);
|
|
117
116
|
protected _inEdgeMap: Map<VO, EO[]>;
|
|
118
117
|
get inEdgeMap(): Map<VO, EO[]>;
|
|
119
118
|
set inEdgeMap(v: Map<VO, EO[]>);
|
|
119
|
+
protected get _edgeConnector(): string;
|
|
120
120
|
/**
|
|
121
121
|
* Construct a directed graph from keys with value initializer `v => v`.
|
|
122
122
|
* @template K - Vertex key type.
|
|
@@ -157,53 +157,14 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
157
157
|
* @param destOrKey - Destination vertex or key.
|
|
158
158
|
* @returns Edge instance or `undefined`.
|
|
159
159
|
* @remarks Time O(1) avg, Space O(1)
|
|
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
|
-
* @example
|
|
200
|
-
* // Get edge between vertices
|
|
201
|
-
* const g = new DirectedGraph();
|
|
202
|
-
* g.addVertex('A');
|
|
203
|
-
* g.addVertex('B');
|
|
204
|
-
* g.addEdge('A', 'B', 5);
|
|
205
|
-
* const edge = g.getEdge('A', 'B');
|
|
206
|
-
* console.log(edge?.weight); // 5;
|
|
160
|
+
* @example
|
|
161
|
+
* // Get edge between vertices
|
|
162
|
+
* const g = new DirectedGraph();
|
|
163
|
+
* g.addVertex('A');
|
|
164
|
+
* g.addVertex('B');
|
|
165
|
+
* g.addEdge('A', 'B', 5);
|
|
166
|
+
* const edge = g.getEdge('A', 'B');
|
|
167
|
+
* console.log(edge?.weight); // 5;
|
|
207
168
|
*/
|
|
208
169
|
getEdge(srcOrKey: VO | VertexKey | undefined, destOrKey: VO | VertexKey | undefined): EO | undefined;
|
|
209
170
|
/**
|
|
@@ -220,126 +181,45 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
220
181
|
* @param destVertexKey - Optional destination vertex/key when deleting by pair.
|
|
221
182
|
* @returns Removed edge or `undefined`.
|
|
222
183
|
* @remarks Time O(1) avg, Space O(1)
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
* @example
|
|
266
|
-
* // DirectedGraph deleteEdge and vertex operations
|
|
267
|
-
* const graph = new DirectedGraph<string>();
|
|
268
|
-
*
|
|
269
|
-
* // Build a small graph
|
|
270
|
-
* graph.addVertex('X');
|
|
271
|
-
* graph.addVertex('Y');
|
|
272
|
-
* graph.addVertex('Z');
|
|
273
|
-
* graph.addEdge('X', 'Y', 1);
|
|
274
|
-
* graph.addEdge('Y', 'Z', 2);
|
|
275
|
-
*
|
|
276
|
-
* // Delete an edge
|
|
277
|
-
* graph.deleteEdgeSrcToDest('X', 'Y');
|
|
278
|
-
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
279
|
-
*
|
|
280
|
-
* // Edge in other direction should not exist
|
|
281
|
-
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
282
|
-
*
|
|
283
|
-
* // Other edges should remain
|
|
284
|
-
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
285
|
-
*
|
|
286
|
-
* // Delete a vertex
|
|
287
|
-
* graph.deleteVertex('Y');
|
|
288
|
-
* console.log(graph.hasVertex('Y')); // false;
|
|
289
|
-
* console.log(graph.size); // 2;
|
|
184
|
+
* @example
|
|
185
|
+
* // DirectedGraph deleteEdge and vertex operations
|
|
186
|
+
* const graph = new DirectedGraph<string>();
|
|
187
|
+
*
|
|
188
|
+
* // Build a small graph
|
|
189
|
+
* graph.addVertex('X');
|
|
190
|
+
* graph.addVertex('Y');
|
|
191
|
+
* graph.addVertex('Z');
|
|
192
|
+
* graph.addEdge('X', 'Y', 1);
|
|
193
|
+
* graph.addEdge('Y', 'Z', 2);
|
|
194
|
+
*
|
|
195
|
+
* // Delete an edge
|
|
196
|
+
* graph.deleteEdgeSrcToDest('X', 'Y');
|
|
197
|
+
* console.log(graph.hasEdge('X', 'Y')); // false;
|
|
198
|
+
*
|
|
199
|
+
* // Edge in other direction should not exist
|
|
200
|
+
* console.log(graph.hasEdge('Y', 'X')); // false;
|
|
201
|
+
*
|
|
202
|
+
* // Other edges should remain
|
|
203
|
+
* console.log(graph.hasEdge('Y', 'Z')); // true;
|
|
204
|
+
*
|
|
205
|
+
* // Delete a vertex
|
|
206
|
+
* graph.deleteVertex('Y');
|
|
207
|
+
* console.log(graph.hasVertex('Y')); // false;
|
|
208
|
+
* console.log(graph.size); // 2;
|
|
290
209
|
*/
|
|
291
210
|
deleteEdge(edgeOrSrcVertexKey: EO | VertexKey, destVertexKey?: VertexKey): EO | undefined;
|
|
292
211
|
/**
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
* @example
|
|
334
|
-
* // Remove a vertex
|
|
335
|
-
* const g = new DirectedGraph();
|
|
336
|
-
* g.addVertex('A');
|
|
337
|
-
* g.addVertex('B');
|
|
338
|
-
* g.addEdge('A', 'B');
|
|
339
|
-
* g.deleteVertex('A');
|
|
340
|
-
* console.log(g.hasVertex('A')); // false;
|
|
341
|
-
* console.log(g.hasEdge('A', 'B')); // false;
|
|
342
|
-
*/
|
|
212
|
+
* Remove a vertex
|
|
213
|
+
* @example
|
|
214
|
+
* // Remove a vertex
|
|
215
|
+
* const g = new DirectedGraph();
|
|
216
|
+
* g.addVertex('A');
|
|
217
|
+
* g.addVertex('B');
|
|
218
|
+
* g.addEdge('A', 'B');
|
|
219
|
+
* g.deleteVertex('A');
|
|
220
|
+
* console.log(g.hasVertex('A')); // false;
|
|
221
|
+
* console.log(g.hasEdge('A', 'B')); // false;
|
|
222
|
+
*/
|
|
343
223
|
deleteVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
344
224
|
deleteEdgesBetween(v1: VertexKey | VO, v2: VertexKey | VO): EO[];
|
|
345
225
|
/**
|
|
@@ -347,54 +227,15 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
347
227
|
* @param vertexOrKey - Vertex or key.
|
|
348
228
|
* @returns Array of incoming edges.
|
|
349
229
|
* @remarks Time O(deg_in), Space O(deg_in)
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
* @example
|
|
390
|
-
* // Get incoming edges
|
|
391
|
-
* const g = new DirectedGraph();
|
|
392
|
-
* g.addVertex('A');
|
|
393
|
-
* g.addVertex('B');
|
|
394
|
-
* g.addVertex('C');
|
|
395
|
-
* g.addEdge('A', 'C');
|
|
396
|
-
* g.addEdge('B', 'C');
|
|
397
|
-
* console.log(g.incomingEdgesOf('C').length); // 2;
|
|
230
|
+
* @example
|
|
231
|
+
* // Get incoming edges
|
|
232
|
+
* const g = new DirectedGraph();
|
|
233
|
+
* g.addVertex('A');
|
|
234
|
+
* g.addVertex('B');
|
|
235
|
+
* g.addVertex('C');
|
|
236
|
+
* g.addEdge('A', 'C');
|
|
237
|
+
* g.addEdge('B', 'C');
|
|
238
|
+
* console.log(g.incomingEdgesOf('C').length); // 2;
|
|
398
239
|
*/
|
|
399
240
|
incomingEdgesOf(vertexOrKey: VO | VertexKey): EO[];
|
|
400
241
|
/**
|
|
@@ -402,54 +243,15 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
402
243
|
* @param vertexOrKey - Vertex or key.
|
|
403
244
|
* @returns Array of outgoing edges.
|
|
404
245
|
* @remarks Time O(deg_out), Space O(deg_out)
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
* @example
|
|
445
|
-
* // Get outgoing edges
|
|
446
|
-
* const g = new DirectedGraph();
|
|
447
|
-
* g.addVertex('A');
|
|
448
|
-
* g.addVertex('B');
|
|
449
|
-
* g.addVertex('C');
|
|
450
|
-
* g.addEdge('A', 'B');
|
|
451
|
-
* g.addEdge('A', 'C');
|
|
452
|
-
* console.log(g.outgoingEdgesOf('A').length); // 2;
|
|
246
|
+
* @example
|
|
247
|
+
* // Get outgoing edges
|
|
248
|
+
* const g = new DirectedGraph();
|
|
249
|
+
* g.addVertex('A');
|
|
250
|
+
* g.addVertex('B');
|
|
251
|
+
* g.addVertex('C');
|
|
252
|
+
* g.addEdge('A', 'B');
|
|
253
|
+
* g.addEdge('A', 'C');
|
|
254
|
+
* console.log(g.outgoingEdgesOf('A').length); // 2;
|
|
453
255
|
*/
|
|
454
256
|
outgoingEdgesOf(vertexOrKey: VO | VertexKey): EO[];
|
|
455
257
|
/**
|
|
@@ -482,175 +284,54 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
482
284
|
* @param propertyName - `'key'` to map to keys; `'vertex'` to keep instances.
|
|
483
285
|
* @returns Array of keys/vertices, or `undefined` when cycle is found.
|
|
484
286
|
* @remarks Time O(V + E), Space O(V)
|
|
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
|
-
* @example
|
|
528
|
-
* // DirectedGraph topologicalSort for task scheduling
|
|
529
|
-
* const graph = new DirectedGraph<string>();
|
|
530
|
-
*
|
|
531
|
-
* // Build a DAG (Directed Acyclic Graph) for task dependencies
|
|
532
|
-
* graph.addVertex('Design');
|
|
533
|
-
* graph.addVertex('Implement');
|
|
534
|
-
* graph.addVertex('Test');
|
|
535
|
-
* graph.addVertex('Deploy');
|
|
536
|
-
*
|
|
537
|
-
* // Add dependency edges
|
|
538
|
-
* graph.addEdge('Design', 'Implement', 1); // Design must come before Implement
|
|
539
|
-
* graph.addEdge('Implement', 'Test', 1); // Implement must come before Test
|
|
540
|
-
* graph.addEdge('Test', 'Deploy', 1); // Test must come before Deploy
|
|
541
|
-
*
|
|
542
|
-
* // Topological sort gives valid execution order
|
|
543
|
-
* const executionOrder = graph.topologicalSort();
|
|
544
|
-
* console.log(executionOrder); // defined;
|
|
545
|
-
* console.log(executionOrder); // ['Design', 'Implement', 'Test', 'Deploy'];
|
|
546
|
-
*
|
|
547
|
-
* // All vertices should be included
|
|
548
|
-
* console.log(executionOrder?.length); // 4;
|
|
287
|
+
* @example
|
|
288
|
+
* // DirectedGraph topologicalSort for task scheduling
|
|
289
|
+
* const graph = new DirectedGraph<string>();
|
|
290
|
+
*
|
|
291
|
+
* // Build a DAG (Directed Acyclic Graph) for task dependencies
|
|
292
|
+
* graph.addVertex('Design');
|
|
293
|
+
* graph.addVertex('Implement');
|
|
294
|
+
* graph.addVertex('Test');
|
|
295
|
+
* graph.addVertex('Deploy');
|
|
296
|
+
*
|
|
297
|
+
* // Add dependency edges
|
|
298
|
+
* graph.addEdge('Design', 'Implement', 1); // Design must come before Implement
|
|
299
|
+
* graph.addEdge('Implement', 'Test', 1); // Implement must come before Test
|
|
300
|
+
* graph.addEdge('Test', 'Deploy', 1); // Test must come before Deploy
|
|
301
|
+
*
|
|
302
|
+
* // Topological sort gives valid execution order
|
|
303
|
+
* const executionOrder = graph.topologicalSort();
|
|
304
|
+
* console.log(executionOrder); // defined;
|
|
305
|
+
* console.log(executionOrder); // ['Design', 'Implement', 'Test', 'Deploy'];
|
|
306
|
+
*
|
|
307
|
+
* // All vertices should be included
|
|
308
|
+
* console.log(executionOrder?.length); // 4;
|
|
549
309
|
*/
|
|
550
310
|
topologicalSort(propertyName?: 'vertex' | 'key'): Array<VO | VertexKey> | undefined;
|
|
551
311
|
/**
|
|
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
|
-
* @example
|
|
593
|
-
* // Get all edges
|
|
594
|
-
* const g = new DirectedGraph();
|
|
595
|
-
* g.addVertex('A');
|
|
596
|
-
* g.addVertex('B');
|
|
597
|
-
* g.addEdge('A', 'B', 3);
|
|
598
|
-
* console.log(g.edgeSet().length); // 1;
|
|
599
|
-
*/
|
|
312
|
+
* Get all edges
|
|
313
|
+
* @example
|
|
314
|
+
* // Get all edges
|
|
315
|
+
* const g = new DirectedGraph();
|
|
316
|
+
* g.addVertex('A');
|
|
317
|
+
* g.addVertex('B');
|
|
318
|
+
* g.addEdge('A', 'B', 3);
|
|
319
|
+
* console.log(g.edgeSet().length); // 1;
|
|
320
|
+
*/
|
|
600
321
|
edgeSet(): EO[];
|
|
601
322
|
/**
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
* @example
|
|
644
|
-
* // Get outgoing neighbors
|
|
645
|
-
* const g = new DirectedGraph();
|
|
646
|
-
* g.addVertex('A');
|
|
647
|
-
* g.addVertex('B');
|
|
648
|
-
* g.addVertex('C');
|
|
649
|
-
* g.addEdge('A', 'B');
|
|
650
|
-
* g.addEdge('A', 'C');
|
|
651
|
-
* const neighbors = g.getNeighbors('A');
|
|
652
|
-
* console.log(neighbors.map(v => v.key).sort()); // ['B', 'C'];
|
|
653
|
-
*/
|
|
323
|
+
* Get outgoing neighbors
|
|
324
|
+
* @example
|
|
325
|
+
* // Get outgoing neighbors
|
|
326
|
+
* const g = new DirectedGraph();
|
|
327
|
+
* g.addVertex('A');
|
|
328
|
+
* g.addVertex('B');
|
|
329
|
+
* g.addVertex('C');
|
|
330
|
+
* g.addEdge('A', 'B');
|
|
331
|
+
* g.addEdge('A', 'C');
|
|
332
|
+
* const neighbors = g.getNeighbors('A');
|
|
333
|
+
* console.log(neighbors.map(v => v.key).sort()); // ['B', 'C'];
|
|
334
|
+
*/
|
|
654
335
|
getNeighbors(vertexOrKey: VO | VertexKey): VO[];
|
|
655
336
|
/**
|
|
656
337
|
* Resolve an edge's `[src, dest]` endpoints to vertex instances.
|
|
@@ -679,58 +360,19 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
679
360
|
* Tarjan's algorithm for strongly connected components.
|
|
680
361
|
* @returns `{ dfnMap, lowMap, SCCs }`.
|
|
681
362
|
* @remarks Time O(V + E), Space O(V + E)
|
|
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
|
-
* @example
|
|
722
|
-
* // Find strongly connected components
|
|
723
|
-
* const g = new DirectedGraph();
|
|
724
|
-
* g.addVertex('A');
|
|
725
|
-
* g.addVertex('B');
|
|
726
|
-
* g.addVertex('C');
|
|
727
|
-
* g.addEdge('A', 'B');
|
|
728
|
-
* g.addEdge('B', 'C');
|
|
729
|
-
* g.addEdge('C', 'A');
|
|
730
|
-
* const { SCCs } = g.tarjan();
|
|
731
|
-
* // A→B→C→A forms one SCC with 3 members
|
|
732
|
-
* const sccArrays = [...SCCs.values()];
|
|
733
|
-
* console.log(sccArrays.some(scc => scc.length === 3)); // true;
|
|
363
|
+
* @example
|
|
364
|
+
* // Find strongly connected components
|
|
365
|
+
* const g = new DirectedGraph();
|
|
366
|
+
* g.addVertex('A');
|
|
367
|
+
* g.addVertex('B');
|
|
368
|
+
* g.addVertex('C');
|
|
369
|
+
* g.addEdge('A', 'B');
|
|
370
|
+
* g.addEdge('B', 'C');
|
|
371
|
+
* g.addEdge('C', 'A');
|
|
372
|
+
* const { SCCs } = g.tarjan();
|
|
373
|
+
* // A→B→C→A forms one SCC with 3 members
|
|
374
|
+
* const sccArrays = [...SCCs.values()];
|
|
375
|
+
* console.log(sccArrays.some(scc => scc.length === 3)); // true;
|
|
734
376
|
*/
|
|
735
377
|
tarjan(): {
|
|
736
378
|
dfnMap: Map<VO, number>;
|
|
@@ -753,56 +395,17 @@ export declare class DirectedGraph<V = any, E = any, VO extends DirectedVertex<V
|
|
|
753
395
|
* Strongly connected components computed by `tarjan()`.
|
|
754
396
|
* @returns Map from SCC id to vertices.
|
|
755
397
|
* @remarks Time O(#SCC + V), Space O(V)
|
|
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
|
-
* @example
|
|
796
|
-
* // Get strongly connected components
|
|
797
|
-
* const g = new DirectedGraph();
|
|
798
|
-
* g.addVertex(1);
|
|
799
|
-
* g.addVertex(2);
|
|
800
|
-
* g.addVertex(3);
|
|
801
|
-
* g.addEdge(1, 2);
|
|
802
|
-
* g.addEdge(2, 3);
|
|
803
|
-
* g.addEdge(3, 1);
|
|
804
|
-
* const sccs = g.getSCCs(); // Map<number, VO[]>
|
|
805
|
-
* console.log(sccs.size); // >= 1;
|
|
398
|
+
* @example
|
|
399
|
+
* // Get strongly connected components
|
|
400
|
+
* const g = new DirectedGraph();
|
|
401
|
+
* g.addVertex(1);
|
|
402
|
+
* g.addVertex(2);
|
|
403
|
+
* g.addVertex(3);
|
|
404
|
+
* g.addEdge(1, 2);
|
|
405
|
+
* g.addEdge(2, 3);
|
|
406
|
+
* g.addEdge(3, 1);
|
|
407
|
+
* const sccs = g.getSCCs(); // Map<number, VO[]>
|
|
408
|
+
* console.log(sccs.size); // >= 1;
|
|
806
409
|
*/
|
|
807
410
|
getSCCs(): Map<number, VO[]>;
|
|
808
411
|
/**
|