data-structure-typed 2.0.5 → 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.
- package/CHANGELOG.md +1 -1
- package/COMMANDS.md +17 -0
- package/benchmark/report.html +13 -77
- package/benchmark/report.json +145 -177
- package/dist/cjs/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/cjs/data-structures/base/iterable-element-base.js +149 -107
- package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/cjs/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/cjs/data-structures/base/linear-base.d.ts +250 -192
- package/dist/cjs/data-structures/base/linear-base.js +137 -274
- package/dist/cjs/data-structures/base/linear-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +171 -205
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +208 -195
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +594 -865
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/cjs/data-structures/binary-tree/bst.js +505 -481
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +114 -209
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/cjs/data-structures/binary-tree/tree-counter.js +172 -203
- package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -85
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/cjs/data-structures/graph/abstract-graph.js +267 -237
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/cjs/data-structures/graph/directed-graph.js +146 -233
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/cjs/data-structures/graph/map-graph.js +56 -59
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/cjs/data-structures/graph/undirected-graph.js +129 -149
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/cjs/data-structures/hash/hash-map.js +270 -457
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +214 -289
- package/dist/cjs/data-structures/heap/heap.js +340 -349
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/cjs/data-structures/heap/max-heap.js +11 -66
- package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/cjs/data-structures/heap/min-heap.js +11 -66
- package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +368 -494
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +447 -466
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +227 -254
- package/dist/cjs/data-structures/queue/deque.js +309 -348
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +180 -201
- package/dist/cjs/data-structures/queue/queue.js +265 -248
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +124 -102
- package/dist/cjs/data-structures/stack/stack.js +181 -125
- package/dist/cjs/data-structures/stack/stack.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +164 -165
- package/dist/cjs/data-structures/trie/trie.js +189 -172
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +56 -6
- package/dist/cjs/interfaces/graph.d.ts +16 -0
- package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
- package/dist/cjs/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/cjs/types/utils/utils.d.ts +1 -0
- package/dist/cjs/utils/utils.d.ts +1 -1
- package/dist/cjs/utils/utils.js +2 -1
- package/dist/cjs/utils/utils.js.map +1 -1
- package/dist/esm/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/esm/data-structures/base/iterable-element-base.js +155 -107
- package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/esm/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/esm/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/esm/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/esm/data-structures/base/linear-base.d.ts +250 -192
- package/dist/esm/data-structures/base/linear-base.js +137 -274
- package/dist/esm/data-structures/base/linear-base.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +171 -212
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +133 -94
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/esm/data-structures/binary-tree/avl-tree.js +206 -200
- package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/esm/data-structures/binary-tree/binary-tree.js +598 -874
- package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/esm/data-structures/binary-tree/bst.js +507 -487
- package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/esm/data-structures/binary-tree/red-black-tree.js +114 -215
- package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/esm/data-structures/binary-tree/tree-counter.js +175 -209
- package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js +103 -92
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/esm/data-structures/graph/abstract-graph.js +267 -237
- package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/esm/data-structures/graph/directed-graph.js +145 -233
- package/dist/esm/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/esm/data-structures/graph/map-graph.js +56 -59
- package/dist/esm/data-structures/graph/map-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/esm/data-structures/graph/undirected-graph.js +128 -149
- package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/esm/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/esm/data-structures/hash/hash-map.js +270 -457
- package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
- package/dist/esm/data-structures/heap/heap.d.ts +214 -289
- package/dist/esm/data-structures/heap/heap.js +329 -349
- package/dist/esm/data-structures/heap/heap.js.map +1 -1
- package/dist/esm/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/esm/data-structures/heap/max-heap.js +11 -66
- package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
- package/dist/esm/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/esm/data-structures/heap/min-heap.js +11 -66
- package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
- package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js +368 -495
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/esm/data-structures/linked-list/singly-linked-list.js +448 -467
- package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/esm/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/esm/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/esm/data-structures/queue/deque.d.ts +227 -254
- package/dist/esm/data-structures/queue/deque.js +313 -348
- package/dist/esm/data-structures/queue/deque.js.map +1 -1
- package/dist/esm/data-structures/queue/queue.d.ts +180 -201
- package/dist/esm/data-structures/queue/queue.js +263 -248
- package/dist/esm/data-structures/queue/queue.js.map +1 -1
- package/dist/esm/data-structures/stack/stack.d.ts +124 -102
- package/dist/esm/data-structures/stack/stack.js +181 -125
- package/dist/esm/data-structures/stack/stack.js.map +1 -1
- package/dist/esm/data-structures/trie/trie.d.ts +164 -165
- package/dist/esm/data-structures/trie/trie.js +193 -172
- package/dist/esm/data-structures/trie/trie.js.map +1 -1
- package/dist/esm/interfaces/binary-tree.d.ts +56 -6
- package/dist/esm/interfaces/graph.d.ts +16 -0
- package/dist/esm/types/data-structures/base/base.d.ts +1 -1
- package/dist/esm/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/esm/types/utils/utils.d.ts +1 -0
- package/dist/esm/utils/utils.d.ts +1 -1
- package/dist/esm/utils/utils.js +2 -1
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/umd/data-structure-typed.js +4685 -6477
- package/dist/umd/data-structure-typed.min.js +8 -6
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +3 -4
- package/src/data-structures/base/iterable-element-base.ts +238 -115
- package/src/data-structures/base/iterable-entry-base.ts +96 -120
- package/src/data-structures/base/linear-base.ts +271 -277
- package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
- package/src/data-structures/binary-tree/avl-tree.ts +239 -206
- package/src/data-structures/binary-tree/binary-tree.ts +660 -889
- package/src/data-structures/binary-tree/bst.ts +568 -570
- package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
- package/src/data-structures/binary-tree/tree-counter.ts +199 -218
- package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
- package/src/data-structures/graph/abstract-graph.ts +339 -264
- package/src/data-structures/graph/directed-graph.ts +146 -236
- package/src/data-structures/graph/map-graph.ts +63 -60
- package/src/data-structures/graph/undirected-graph.ts +129 -152
- package/src/data-structures/hash/hash-map.ts +274 -496
- package/src/data-structures/heap/heap.ts +389 -402
- package/src/data-structures/heap/max-heap.ts +12 -76
- package/src/data-structures/heap/min-heap.ts +13 -76
- package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
- package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
- package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
- package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
- package/src/data-structures/priority-queue/priority-queue.ts +3 -92
- package/src/data-structures/queue/deque.ts +381 -357
- package/src/data-structures/queue/queue.ts +310 -264
- package/src/data-structures/stack/stack.ts +217 -131
- package/src/data-structures/trie/trie.ts +240 -175
- package/src/interfaces/binary-tree.ts +240 -6
- package/src/interfaces/graph.ts +37 -0
- package/src/types/data-structures/base/base.ts +5 -5
- package/src/types/data-structures/graph/abstract-graph.ts +5 -0
- package/src/types/utils/utils.ts +2 -0
- package/src/utils/utils.ts +9 -14
- package/test/integration/index.html +1 -1
- package/test/performance/benchmark-runner.ts +528 -0
- package/test/performance/reportor.mjs +43 -43
- package/test/performance/runner-config.json +39 -0
- package/test/performance/single-suite-runner.ts +69 -0
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -5
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +350 -90
- package/test/unit/data-structures/binary-tree/bst.test.ts +12 -9
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +25 -24
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +3 -3
- package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -4
- package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
- package/test/unit/data-structures/heap/heap.test.ts +14 -21
- package/test/unit/data-structures/heap/max-heap.test.ts +5 -9
- package/test/unit/data-structures/heap/min-heap.test.ts +1 -4
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +14 -14
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -7
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +8 -11
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -4
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +1 -4
- package/test/unit/data-structures/queue/queue.test.ts +4 -5
- package/test/unit/utils/utils.test.ts +0 -1
- package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -71
- package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +0 -81
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Pablo Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
1
8
|
import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
|
|
2
9
|
import { arrayRemove } from '../../utils';
|
|
3
10
|
export class DirectedVertex extends AbstractVertex {
|
|
4
|
-
/**
|
|
5
|
-
* The constructor function initializes a vertex with an optional value.
|
|
6
|
-
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex. It is
|
|
7
|
-
* used to uniquely identify the vertex within a graph or data structure.
|
|
8
|
-
* @param {V} [value] - The "value" parameter is an optional parameter of type V. It is used to initialize the value of the
|
|
9
|
-
* vertex. If no value is provided, the vertex will be initialized with a default value.
|
|
10
|
-
*/
|
|
11
11
|
constructor(key, value) {
|
|
12
12
|
super(key, value);
|
|
13
13
|
}
|
|
@@ -15,17 +15,6 @@ export class DirectedVertex extends AbstractVertex {
|
|
|
15
15
|
export class DirectedEdge extends AbstractEdge {
|
|
16
16
|
src;
|
|
17
17
|
dest;
|
|
18
|
-
/**
|
|
19
|
-
* The constructor function initializes the source and destination vertexMap of an edge, along with an optional weight
|
|
20
|
-
* and value.
|
|
21
|
-
* @param {VertexKey} src - The `src` parameter is the source vertex ID. It represents the starting point of an edge in
|
|
22
|
-
* a graph.
|
|
23
|
-
* @param {VertexKey} dest - The `dest` parameter represents the destination vertex of an edge. It is of type
|
|
24
|
-
* `VertexKey`, which is likely a unique identifier for a vertex in a graph.
|
|
25
|
-
* @param {number} [weight] - The weight parameter is an optional number that represents the weight of the edge.
|
|
26
|
-
* @param {E} [value] - The `value` parameter is an optional parameter of type `E`. It represents the value associated with
|
|
27
|
-
* the edge.
|
|
28
|
-
*/
|
|
29
18
|
constructor(src, dest, weight, value) {
|
|
30
19
|
super(weight, value);
|
|
31
20
|
this.src = src;
|
|
@@ -33,14 +22,22 @@ export class DirectedEdge extends AbstractEdge {
|
|
|
33
22
|
}
|
|
34
23
|
}
|
|
35
24
|
/**
|
|
36
|
-
*
|
|
25
|
+
* Directed graph implementation.
|
|
26
|
+
* @template V - Vertex value type.
|
|
27
|
+
* @template E - Edge value type.
|
|
28
|
+
* @template VO - Concrete vertex class (extends AbstractVertex<V>).
|
|
29
|
+
* @template EO - Concrete edge class (extends AbstractEdge<E>).
|
|
30
|
+
* @remarks Time O(1), Space O(1)
|
|
31
|
+
* @example examples will be generated by unit test
|
|
37
32
|
*/
|
|
38
33
|
export class DirectedGraph extends AbstractGraph {
|
|
39
34
|
/**
|
|
40
|
-
*
|
|
35
|
+
* Construct a directed graph with runtime defaults.
|
|
36
|
+
* @param options - `GraphOptions<V>` (e.g. `vertexValueInitializer`, `defaultEdgeWeight`).
|
|
37
|
+
* @remarks Time O(1), Space O(1)
|
|
41
38
|
*/
|
|
42
|
-
constructor() {
|
|
43
|
-
super();
|
|
39
|
+
constructor(options) {
|
|
40
|
+
super(options);
|
|
44
41
|
}
|
|
45
42
|
_outEdgeMap = new Map();
|
|
46
43
|
get outEdgeMap() {
|
|
@@ -57,40 +54,61 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
57
54
|
this._inEdgeMap = v;
|
|
58
55
|
}
|
|
59
56
|
/**
|
|
60
|
-
*
|
|
61
|
-
* @
|
|
62
|
-
*
|
|
63
|
-
* @
|
|
64
|
-
*
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
* Construct a directed graph from keys with value initializer `v => v`.
|
|
58
|
+
* @template K - Vertex key type.
|
|
59
|
+
* @param keys - Iterable of vertex keys.
|
|
60
|
+
* @returns DirectedGraph with all keys added.
|
|
61
|
+
* @remarks Time O(V), Space O(V)
|
|
62
|
+
*/
|
|
63
|
+
static fromKeys(keys) {
|
|
64
|
+
const g = new DirectedGraph({
|
|
65
|
+
vertexValueInitializer: (k) => k
|
|
66
|
+
});
|
|
67
|
+
for (const k of keys)
|
|
68
|
+
g.addVertex(k);
|
|
69
|
+
return g;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Construct a directed graph from `[key, value]` entries.
|
|
73
|
+
* @template V - Vertex value type.
|
|
74
|
+
* @param entries - Iterable of `[key, value]` pairs.
|
|
75
|
+
* @returns DirectedGraph with all vertices added.
|
|
76
|
+
* @remarks Time O(V), Space O(V)
|
|
77
|
+
*/
|
|
78
|
+
static fromEntries(entries) {
|
|
79
|
+
const g = new DirectedGraph();
|
|
80
|
+
for (const [k, v] of entries)
|
|
81
|
+
g.addVertex(k, v);
|
|
82
|
+
return g;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a directed vertex instance. Does not insert into the graph.
|
|
86
|
+
* @param key - Vertex identifier.
|
|
87
|
+
* @param value - Optional payload.
|
|
88
|
+
* @returns Concrete vertex instance.
|
|
89
|
+
* @remarks Time O(1), Space O(1)
|
|
67
90
|
*/
|
|
68
91
|
createVertex(key, value) {
|
|
69
92
|
return new DirectedVertex(key, value);
|
|
70
93
|
}
|
|
71
94
|
/**
|
|
72
|
-
*
|
|
73
|
-
* @param
|
|
74
|
-
* @param
|
|
75
|
-
* @param
|
|
76
|
-
*
|
|
77
|
-
* @
|
|
78
|
-
*
|
|
79
|
-
* @returns a new instance of a DirectedEdge object, casted as type EO.
|
|
95
|
+
* Create a directed edge instance. Does not insert into the graph.
|
|
96
|
+
* @param src - Source vertex key.
|
|
97
|
+
* @param dest - Destination vertex key.
|
|
98
|
+
* @param weight - Edge weight; defaults to `defaultEdgeWeight`.
|
|
99
|
+
* @param value - Edge payload.
|
|
100
|
+
* @returns Concrete edge instance.
|
|
101
|
+
* @remarks Time O(1), Space O(1)
|
|
80
102
|
*/
|
|
81
103
|
createEdge(src, dest, weight, value) {
|
|
82
|
-
return new DirectedEdge(src, dest, weight ?? 1, value);
|
|
104
|
+
return new DirectedEdge(src, dest, weight ?? this.options.defaultEdgeWeight ?? 1, value);
|
|
83
105
|
}
|
|
84
106
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* @
|
|
90
|
-
* @param {VO | VertexKey | undefined} destOrKey - The `destOrKey` parameter in the `getEdge` function represents the
|
|
91
|
-
* destination vertex of the edge. It can be either a vertex object (`VO`), a vertex ID (`VertexKey`), or `undefined` if the
|
|
92
|
-
* destination is not specified.
|
|
93
|
-
* @returns the first edge found between the source and destination vertexMap, or undefined if no such edge is found.
|
|
107
|
+
* Get the unique edge from `src` to `dest`, if present.
|
|
108
|
+
* @param srcOrKey - Source vertex or key.
|
|
109
|
+
* @param destOrKey - Destination vertex or key.
|
|
110
|
+
* @returns Edge instance or `undefined`.
|
|
111
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
94
112
|
*/
|
|
95
113
|
getEdge(srcOrKey, destOrKey) {
|
|
96
114
|
let edgeMap = [];
|
|
@@ -107,13 +125,11 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
107
125
|
return edgeMap[0] || undefined;
|
|
108
126
|
}
|
|
109
127
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* @
|
|
115
|
-
* @param {VO | VertexKey} destOrKey - The `destOrKey` parameter represents the destination vertex or its ID.
|
|
116
|
-
* @returns the removed edge (EO) if it exists, or undefined if either the source or destination vertex does not exist.
|
|
128
|
+
* Delete edge `src -> dest` if present.
|
|
129
|
+
* @param srcOrKey - Source vertex or key.
|
|
130
|
+
* @param destOrKey - Destination vertex or key.
|
|
131
|
+
* @returns Removed edge or `undefined`.
|
|
132
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
117
133
|
*/
|
|
118
134
|
deleteEdgeSrcToDest(srcOrKey, destOrKey) {
|
|
119
135
|
const src = this._getVertex(srcOrKey);
|
|
@@ -133,17 +149,11 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
133
149
|
return removed;
|
|
134
150
|
}
|
|
135
151
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* @
|
|
141
|
-
* a `VertexKey` (key of a vertex).
|
|
142
|
-
* @param {VertexKey} [destVertexKey] - The `destVertexKey` parameter is an optional parameter that
|
|
143
|
-
* represents the key of the destination vertex of the edge. It is used to specify the destination
|
|
144
|
-
* vertex when the `edge` parameter is a vertex key. If `destVertexKey` is not provided, the function
|
|
145
|
-
* assumes that the `edge`
|
|
146
|
-
* @returns the removed edge (EO) or undefined if no edge was removed.
|
|
152
|
+
* Delete an edge by instance or by `(srcKey, destKey)`.
|
|
153
|
+
* @param edgeOrSrcVertexKey - Edge instance or source vertex/key.
|
|
154
|
+
* @param destVertexKey - Optional destination vertex/key when deleting by pair.
|
|
155
|
+
* @returns Removed edge or `undefined`.
|
|
156
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
147
157
|
*/
|
|
148
158
|
deleteEdge(edgeOrSrcVertexKey, destVertexKey) {
|
|
149
159
|
let removed = undefined;
|
|
@@ -173,15 +183,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
173
183
|
}
|
|
174
184
|
return removed;
|
|
175
185
|
}
|
|
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
186
|
deleteVertex(vertexOrKey) {
|
|
186
187
|
let vertexKey;
|
|
187
188
|
let vertex;
|
|
@@ -194,9 +195,14 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
194
195
|
vertexKey = this._getVertexKey(vertexOrKey);
|
|
195
196
|
}
|
|
196
197
|
if (vertex) {
|
|
198
|
+
/**
|
|
199
|
+
* One-step neighbors following outgoing edges.
|
|
200
|
+
* @param vertexOrKey - Vertex or key.
|
|
201
|
+
* @returns Array of neighbor vertices.
|
|
202
|
+
* @remarks Time O(deg_out), Space O(deg_out)
|
|
203
|
+
*/
|
|
197
204
|
const neighbors = this.getNeighbors(vertex);
|
|
198
205
|
for (const neighbor of neighbors) {
|
|
199
|
-
// this._inEdgeMap.delete(neighbor);
|
|
200
206
|
this.deleteEdgeSrcToDest(vertex, neighbor);
|
|
201
207
|
}
|
|
202
208
|
this._outEdgeMap.delete(vertex);
|
|
@@ -204,17 +210,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
204
210
|
}
|
|
205
211
|
return this._vertexMap.delete(vertexKey);
|
|
206
212
|
}
|
|
207
|
-
/**
|
|
208
|
-
* Time Complexity: O(|E|) where |E| is the number of edgeMap
|
|
209
|
-
* Space Complexity: O(1)
|
|
210
|
-
*
|
|
211
|
-
* The function removes edgeMap between two vertexMap and returns the removed edgeMap.
|
|
212
|
-
* @param {VertexKey | VO} v1 - The parameter `v1` can be either a `VertexKey` or a `VO`. A `VertexKey` represents the
|
|
213
|
-
* unique identifier of a vertex in a graph, while `VO` represents the actual vertex object.
|
|
214
|
-
* @param {VertexKey | VO} v2 - The parameter `v2` represents either a `VertexKey` or a `VO` object. It is used to specify
|
|
215
|
-
* the second vertex in the edge that needs to be removed.
|
|
216
|
-
* @returns an array of removed edgeMap (EO[]).
|
|
217
|
-
*/
|
|
218
213
|
deleteEdgesBetween(v1, v2) {
|
|
219
214
|
const removed = [];
|
|
220
215
|
if (v1 && v2) {
|
|
@@ -228,13 +223,10 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
228
223
|
return removed;
|
|
229
224
|
}
|
|
230
225
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
236
|
-
* (`VertexKey`).
|
|
237
|
-
* @returns The method `incomingEdgesOf` returns an array of edgeMap (`EO[]`).
|
|
226
|
+
* Incoming edges of a vertex.
|
|
227
|
+
* @param vertexOrKey - Vertex or key.
|
|
228
|
+
* @returns Array of incoming edges.
|
|
229
|
+
* @remarks Time O(deg_in), Space O(deg_in)
|
|
238
230
|
*/
|
|
239
231
|
incomingEdgesOf(vertexOrKey) {
|
|
240
232
|
const target = this._getVertex(vertexOrKey);
|
|
@@ -244,13 +236,10 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
244
236
|
return [];
|
|
245
237
|
}
|
|
246
238
|
/**
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can accept either a vertex object (`VO`) or a vertex ID
|
|
252
|
-
* (`VertexKey`).
|
|
253
|
-
* @returns The method `outgoingEdgesOf` returns an array of edgeMap (`EO[]`).
|
|
239
|
+
* Outgoing edges of a vertex.
|
|
240
|
+
* @param vertexOrKey - Vertex or key.
|
|
241
|
+
* @returns Array of outgoing edges.
|
|
242
|
+
* @remarks Time O(deg_out), Space O(deg_out)
|
|
254
243
|
*/
|
|
255
244
|
outgoingEdgesOf(vertexOrKey) {
|
|
256
245
|
const target = this._getVertex(vertexOrKey);
|
|
@@ -260,79 +249,52 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
260
249
|
return [];
|
|
261
250
|
}
|
|
262
251
|
/**
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
268
|
-
* @returns The sum of the out-degree and in-degree of the specified vertex or vertex ID.
|
|
252
|
+
* Degree (in + out) of a vertex.
|
|
253
|
+
* @param vertexOrKey - Vertex or key.
|
|
254
|
+
* @returns Non-negative integer.
|
|
255
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
269
256
|
*/
|
|
270
257
|
degreeOf(vertexOrKey) {
|
|
258
|
+
/**
|
|
259
|
+
* In-degree of a vertex.
|
|
260
|
+
* @param vertexOrKey - Vertex or key.
|
|
261
|
+
* @returns Non-negative integer.
|
|
262
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
263
|
+
*/
|
|
264
|
+
/**
|
|
265
|
+
* Out-degree of a vertex.
|
|
266
|
+
* @param vertexOrKey - Vertex or key.
|
|
267
|
+
* @returns Non-negative integer.
|
|
268
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
269
|
+
*/
|
|
271
270
|
return this.outDegreeOf(vertexOrKey) + this.inDegreeOf(vertexOrKey);
|
|
272
271
|
}
|
|
273
|
-
/**
|
|
274
|
-
* Time Complexity: O(1)
|
|
275
|
-
* Space Complexity: O(1)
|
|
276
|
-
*
|
|
277
|
-
* The function "inDegreeOf" returns the number of incoming edgeMap for a given vertex.
|
|
278
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
279
|
-
* @returns The number of incoming edgeMap of the specified vertex or vertex ID.
|
|
280
|
-
*/
|
|
281
272
|
inDegreeOf(vertexOrKey) {
|
|
282
273
|
return this.incomingEdgesOf(vertexOrKey).length;
|
|
283
274
|
}
|
|
284
|
-
/**
|
|
285
|
-
* Time Complexity: O(1)
|
|
286
|
-
* Space Complexity: O(1)
|
|
287
|
-
*
|
|
288
|
-
* The function `outDegreeOf` returns the number of outgoing edgeMap from a given vertex.
|
|
289
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
290
|
-
* @returns The number of outgoing edgeMap from the specified vertex or vertex ID.
|
|
291
|
-
*/
|
|
292
275
|
outDegreeOf(vertexOrKey) {
|
|
293
276
|
return this.outgoingEdgesOf(vertexOrKey).length;
|
|
294
277
|
}
|
|
295
278
|
/**
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
301
|
-
* @returns The function `edgesOf` returns an array of edgeMap.
|
|
279
|
+
* All incident edges of a vertex.
|
|
280
|
+
* @param vertexOrKey - Vertex or key.
|
|
281
|
+
* @returns Array of incident edges.
|
|
282
|
+
* @remarks Time O(deg_in + deg_out), Space O(deg_in + deg_out)
|
|
302
283
|
*/
|
|
303
284
|
edgesOf(vertexOrKey) {
|
|
304
285
|
return [...this.outgoingEdgesOf(vertexOrKey), ...this.incomingEdgesOf(vertexOrKey)];
|
|
305
286
|
}
|
|
306
|
-
/**
|
|
307
|
-
* Time Complexity: O(1)
|
|
308
|
-
* Space Complexity: O(1)
|
|
309
|
-
*
|
|
310
|
-
* The function "getEdgeSrc" returns the source vertex of an edge, or undefined if the edge does not exist.
|
|
311
|
-
* @param {EO} e - The parameter "e" is of type EO, which represents an edge in a graph.
|
|
312
|
-
* @returns either a vertex object (VO) or undefined.
|
|
313
|
-
*/
|
|
314
287
|
getEdgeSrc(e) {
|
|
315
288
|
return this._getVertex(e.src);
|
|
316
289
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Time Complexity: O(1)
|
|
319
|
-
* Space Complexity: O(1)
|
|
320
|
-
*
|
|
321
|
-
* The function "getEdgeDest" returns the destination vertex of an edge.
|
|
322
|
-
* @param {EO} e - The parameter "e" is of type "EO", which represents an edge in a graph.
|
|
323
|
-
* @returns either a vertex object of type VO or undefined.
|
|
324
|
-
*/
|
|
325
290
|
getEdgeDest(e) {
|
|
326
291
|
return this._getVertex(e.dest);
|
|
327
292
|
}
|
|
328
293
|
/**
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
* @param {VO | VertexKey | undefined} vertex - The `vertex` parameter represents the starting vertex from which we want to
|
|
334
|
-
* find the destinations. It can be either a `VO` object, a `VertexKey` value, or `undefined`.
|
|
335
|
-
* @returns an array of vertexMap (VO[]).
|
|
294
|
+
* Direct children reachable by one outgoing edge.
|
|
295
|
+
* @param vertex - Vertex or key.
|
|
296
|
+
* @returns Array of neighbor vertices.
|
|
297
|
+
* @remarks Time O(deg_out), Space O(deg_out)
|
|
336
298
|
*/
|
|
337
299
|
getDestinations(vertex) {
|
|
338
300
|
if (vertex === undefined) {
|
|
@@ -349,20 +311,13 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
349
311
|
return destinations;
|
|
350
312
|
}
|
|
351
313
|
/**
|
|
352
|
-
*
|
|
353
|
-
*
|
|
354
|
-
*
|
|
355
|
-
*
|
|
356
|
-
* in the sorted order, or undefined if the graph contains a cycle.
|
|
357
|
-
* @param {'vertex' | 'key'} [propertyName] - The `propertyName` parameter is an optional parameter that specifies the
|
|
358
|
-
* property to use for sorting the vertexMap. It can have two possible values: 'vertex' or 'key'. If 'vertex' is
|
|
359
|
-
* specified, the vertexMap themselves will be used for sorting. If 'key' is specified, the ids of
|
|
360
|
-
* @returns an array of vertexMap or vertex IDs in topological order. If there is a cycle in the graph, it returns undefined.
|
|
314
|
+
* Topological sort if DAG; returns `undefined` if a cycle exists.
|
|
315
|
+
* @param propertyName - `'key'` to map to keys; `'vertex'` to keep instances.
|
|
316
|
+
* @returns Array of keys/vertices, or `undefined` when cycle is found.
|
|
317
|
+
* @remarks Time O(V + E), Space O(V)
|
|
361
318
|
*/
|
|
362
319
|
topologicalSort(propertyName) {
|
|
363
320
|
propertyName = propertyName ?? 'key';
|
|
364
|
-
// When judging whether there is a cycle in the undirected graph, all nodes with degree of **<= 1** are enqueued
|
|
365
|
-
// When judging whether there is a cycle in the directed graph, all nodes with **in degree = 0** are enqueued
|
|
366
321
|
const statusMap = new Map();
|
|
367
322
|
for (const entry of this.vertexMap) {
|
|
368
323
|
statusMap.set(entry[1], 0);
|
|
@@ -395,13 +350,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
395
350
|
sorted = sorted.map(vertex => (vertex instanceof DirectedVertex ? vertex.key : vertex));
|
|
396
351
|
return sorted.reverse();
|
|
397
352
|
}
|
|
398
|
-
/**
|
|
399
|
-
* Time Complexity: O(|E|) where |E| is the number of edgeMap
|
|
400
|
-
* Space Complexity: O(|E|)
|
|
401
|
-
*
|
|
402
|
-
* The `edgeSet` function returns an array of all the edgeMap in the graph.
|
|
403
|
-
* @returns The `edgeSet()` method returns an array of edgeMap (`EO[]`).
|
|
404
|
-
*/
|
|
405
353
|
edgeSet() {
|
|
406
354
|
let edgeMap = [];
|
|
407
355
|
this._outEdgeMap.forEach(outEdges => {
|
|
@@ -409,15 +357,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
409
357
|
});
|
|
410
358
|
return edgeMap;
|
|
411
359
|
}
|
|
412
|
-
/**
|
|
413
|
-
* Time Complexity: O(|E|) where |E| is the number of edgeMap
|
|
414
|
-
* Space Complexity: O(1)
|
|
415
|
-
*
|
|
416
|
-
* The function `getNeighbors` returns an array of neighboring vertexMap of a given vertex or vertex ID in a graph.
|
|
417
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
418
|
-
* (`VertexKey`).
|
|
419
|
-
* @returns an array of vertexMap (VO[]).
|
|
420
|
-
*/
|
|
421
360
|
getNeighbors(vertexOrKey) {
|
|
422
361
|
const neighbors = [];
|
|
423
362
|
const vertex = this._getVertex(vertexOrKey);
|
|
@@ -425,7 +364,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
425
364
|
const outEdges = this.outgoingEdgesOf(vertex);
|
|
426
365
|
for (const outEdge of outEdges) {
|
|
427
366
|
const neighbor = this._getVertex(outEdge.dest);
|
|
428
|
-
// TODO after no-non-undefined-assertion not ensure the logic
|
|
429
367
|
if (neighbor) {
|
|
430
368
|
neighbors.push(neighbor);
|
|
431
369
|
}
|
|
@@ -434,14 +372,10 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
434
372
|
return neighbors;
|
|
435
373
|
}
|
|
436
374
|
/**
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
* otherwise it returns undefined.
|
|
442
|
-
* @param {EO} edge - The parameter `edge` is of type `EO`, which represents an edge in a graph.
|
|
443
|
-
* @returns The function `getEndsOfEdge` returns an array containing two vertexMap `[VO, VO]` if the edge exists in the
|
|
444
|
-
* graph. If the edge does not exist, it returns `undefined`.
|
|
375
|
+
* Resolve an edge's `[src, dest]` endpoints to vertex instances.
|
|
376
|
+
* @param edge - Edge instance.
|
|
377
|
+
* @returns `[src, dest]` or `undefined` if either endpoint is missing.
|
|
378
|
+
* @remarks Time O(1), Space O(1)
|
|
445
379
|
*/
|
|
446
380
|
getEndsOfEdge(edge) {
|
|
447
381
|
if (!this.hasEdge(edge.src, edge.dest)) {
|
|
@@ -457,18 +391,15 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
457
391
|
}
|
|
458
392
|
}
|
|
459
393
|
/**
|
|
460
|
-
*
|
|
461
|
-
*
|
|
462
|
-
* @return A boolean value
|
|
394
|
+
* Whether the graph has no vertices and no edges.
|
|
395
|
+
* @remarks Time O(1), Space O(1)
|
|
463
396
|
*/
|
|
464
397
|
isEmpty() {
|
|
465
398
|
return this.vertexMap.size === 0 && this.inEdgeMap.size === 0 && this.outEdgeMap.size === 0;
|
|
466
399
|
}
|
|
467
400
|
/**
|
|
468
|
-
*
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
* The clear function resets the vertex map, in-edge map, and out-edge map.
|
|
401
|
+
* Remove all vertices and edges.
|
|
402
|
+
* @remarks Time O(V + E), Space O(1)
|
|
472
403
|
*/
|
|
473
404
|
clear() {
|
|
474
405
|
this._vertexMap = new Map();
|
|
@@ -476,27 +407,17 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
476
407
|
this._outEdgeMap = new Map();
|
|
477
408
|
}
|
|
478
409
|
/**
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
* @
|
|
410
|
+
* Deep clone as the same concrete class.
|
|
411
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
412
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
482
413
|
*/
|
|
483
414
|
clone() {
|
|
484
|
-
|
|
485
|
-
cloned.vertexMap = new Map(this.vertexMap);
|
|
486
|
-
cloned.inEdgeMap = new Map(this.inEdgeMap);
|
|
487
|
-
cloned.outEdgeMap = new Map(this.outEdgeMap);
|
|
488
|
-
return cloned;
|
|
415
|
+
return super.clone();
|
|
489
416
|
}
|
|
490
417
|
/**
|
|
491
|
-
*
|
|
492
|
-
*
|
|
493
|
-
*
|
|
494
|
-
* Tarjan can find the SSC(strongly connected components), articulation points, and bridges of directed graphs.
|
|
495
|
-
*
|
|
496
|
-
* The function `tarjan` implements the Tarjan's algorithm to find strongly connected components in a
|
|
497
|
-
* graph.
|
|
498
|
-
* @returns The function `tarjan()` returns an object with three properties: `dfnMap`, `lowMap`, and
|
|
499
|
-
* `SCCs`.
|
|
418
|
+
* Tarjan's algorithm for strongly connected components.
|
|
419
|
+
* @returns `{ dfnMap, lowMap, SCCs }`.
|
|
420
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
500
421
|
*/
|
|
501
422
|
tarjan() {
|
|
502
423
|
const dfnMap = new Map();
|
|
@@ -540,42 +461,34 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
540
461
|
return { dfnMap, lowMap, SCCs };
|
|
541
462
|
}
|
|
542
463
|
/**
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
* The function returns a map that associates each vertex object with its corresponding depth-first
|
|
547
|
-
* number.
|
|
548
|
-
* @returns A Map object with keys of type VO and values of type number.
|
|
464
|
+
* DFN index map computed by `tarjan()`.
|
|
465
|
+
* @returns Map from vertex to DFN index.
|
|
466
|
+
* @remarks Time O(V), Space O(V)
|
|
549
467
|
*/
|
|
550
468
|
getDFNMap() {
|
|
551
469
|
return this.tarjan().dfnMap;
|
|
552
470
|
}
|
|
553
471
|
/**
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
* @
|
|
557
|
-
* type `number`.
|
|
472
|
+
* LOW link map computed by `tarjan()`.
|
|
473
|
+
* @returns Map from vertex to LOW value.
|
|
474
|
+
* @remarks Time O(V), Space O(V)
|
|
558
475
|
*/
|
|
559
476
|
getLowMap() {
|
|
560
477
|
return this.tarjan().lowMap;
|
|
561
478
|
}
|
|
562
479
|
/**
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
* @
|
|
480
|
+
* Strongly connected components computed by `tarjan()`.
|
|
481
|
+
* @returns Map from SCC id to vertices.
|
|
482
|
+
* @remarks Time O(#SCC + V), Space O(V)
|
|
566
483
|
*/
|
|
567
484
|
getSCCs() {
|
|
568
485
|
return this.tarjan().SCCs;
|
|
569
486
|
}
|
|
570
487
|
/**
|
|
571
|
-
*
|
|
572
|
-
*
|
|
573
|
-
*
|
|
574
|
-
*
|
|
575
|
-
* @param {EO} edge - The parameter `edge` is of type `EO`, which represents an edge in a graph. It is the edge that
|
|
576
|
-
* needs to be added to the graph.
|
|
577
|
-
* @returns a boolean value. It returns true if the edge was successfully added to the graph, and false if either the
|
|
578
|
-
* source or destination vertex does not exist in the graph.
|
|
488
|
+
* Internal hook to attach a directed edge into adjacency maps.
|
|
489
|
+
* @param edge - Edge instance.
|
|
490
|
+
* @returns `true` if inserted; otherwise `false`.
|
|
491
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
579
492
|
*/
|
|
580
493
|
_addEdge(edge) {
|
|
581
494
|
if (!(this.hasVertex(edge.src) && this.hasVertex(edge.dest))) {
|
|
@@ -583,7 +496,6 @@ export class DirectedGraph extends AbstractGraph {
|
|
|
583
496
|
}
|
|
584
497
|
const srcVertex = this._getVertex(edge.src);
|
|
585
498
|
const destVertex = this._getVertex(edge.dest);
|
|
586
|
-
// TODO after no-non-undefined-assertion not ensure the logic
|
|
587
499
|
if (srcVertex && destVertex) {
|
|
588
500
|
const srcOutEdges = this._outEdgeMap.get(srcVertex);
|
|
589
501
|
if (srcOutEdges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directed-graph.js","sourceRoot":"","sources":["../../../../src/data-structures/graph/directed-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directed-graph.js","sourceRoot":"","sources":["../../../../src/data-structures/graph/directed-graph.ts"],"names":[],"mappings":"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"}
|