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,43 +1,41 @@
|
|
|
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 UndirectedVertex 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 network.
|
|
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
|
}
|
|
14
14
|
}
|
|
15
15
|
export class UndirectedEdge extends AbstractEdge {
|
|
16
16
|
endpoints;
|
|
17
|
-
/**
|
|
18
|
-
* The constructor function creates an instance of a class with two vertex IDs, an optional weight, and an optional
|
|
19
|
-
* value.
|
|
20
|
-
* @param {VertexKey} v1 - The first vertex ID of the edge.
|
|
21
|
-
* @param {VertexKey} v2 - The parameter `v2` is a `VertexKey`, which represents the identifier of the second vertex in a
|
|
22
|
-
* graph edge.
|
|
23
|
-
* @param {number} [weight] - The weight parameter is an optional number that represents the weight of the edge.
|
|
24
|
-
* @param {E} [value] - The "value" parameter is an optional parameter of type E. It is used to store a value associated
|
|
25
|
-
* with the edge.
|
|
26
|
-
*/
|
|
27
17
|
constructor(v1, v2, weight, value) {
|
|
28
18
|
super(weight, value);
|
|
29
19
|
this.endpoints = [v1, v2];
|
|
30
20
|
}
|
|
31
21
|
}
|
|
32
22
|
/**
|
|
33
|
-
*
|
|
23
|
+
* Undirected graph implementation.
|
|
24
|
+
* @template V - Vertex value type.
|
|
25
|
+
* @template E - Edge value type.
|
|
26
|
+
* @template VO - Concrete vertex class (extends AbstractVertex<V>).
|
|
27
|
+
* @template EO - Concrete edge class (extends AbstractEdge<E>).
|
|
28
|
+
* @remarks Time O(1), Space O(1)
|
|
29
|
+
* @example examples will be generated by unit test
|
|
34
30
|
*/
|
|
35
31
|
export class UndirectedGraph extends AbstractGraph {
|
|
36
32
|
/**
|
|
37
|
-
*
|
|
33
|
+
* Construct an undirected graph with runtime defaults.
|
|
34
|
+
* @param options - `GraphOptions<V>` (e.g. `vertexValueInitializer`, `defaultEdgeWeight`).
|
|
35
|
+
* @remarks Time O(1), Space O(1)
|
|
38
36
|
*/
|
|
39
|
-
constructor() {
|
|
40
|
-
super();
|
|
37
|
+
constructor(options) {
|
|
38
|
+
super(options);
|
|
41
39
|
this._edgeMap = new Map();
|
|
42
40
|
}
|
|
43
41
|
_edgeMap;
|
|
@@ -48,40 +46,61 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
48
46
|
this._edgeMap = v;
|
|
49
47
|
}
|
|
50
48
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
53
|
-
*
|
|
54
|
-
* @
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
* Construct an undirected graph from keys with value initializer `v => v`.
|
|
50
|
+
* @template K - Vertex key type.
|
|
51
|
+
* @param keys - Iterable of vertex keys.
|
|
52
|
+
* @returns UndirectedGraph with all keys added.
|
|
53
|
+
* @remarks Time O(V), Space O(V)
|
|
54
|
+
*/
|
|
55
|
+
static fromKeys(keys) {
|
|
56
|
+
const g = new UndirectedGraph({
|
|
57
|
+
vertexValueInitializer: (k) => k
|
|
58
|
+
});
|
|
59
|
+
for (const k of keys)
|
|
60
|
+
g.addVertex(k);
|
|
61
|
+
return g;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Construct an undirected graph from `[key, value]` entries.
|
|
65
|
+
* @template V - Vertex value type.
|
|
66
|
+
* @param entries - Iterable of `[key, value]` pairs.
|
|
67
|
+
* @returns UndirectedGraph with all vertices added.
|
|
68
|
+
* @remarks Time O(V), Space O(V)
|
|
69
|
+
*/
|
|
70
|
+
static fromEntries(entries) {
|
|
71
|
+
const g = new UndirectedGraph();
|
|
72
|
+
for (const [k, v] of entries)
|
|
73
|
+
g.addVertex(k, v);
|
|
74
|
+
return g;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create an undirected vertex instance. Does not insert into the graph.
|
|
78
|
+
* @param key - Vertex identifier.
|
|
79
|
+
* @param value - Optional payload.
|
|
80
|
+
* @returns Concrete vertex instance.
|
|
81
|
+
* @remarks Time O(1), Space O(1)
|
|
58
82
|
*/
|
|
59
83
|
createVertex(key, value) {
|
|
60
|
-
return new UndirectedVertex(key, value
|
|
84
|
+
return new UndirectedVertex(key, value);
|
|
61
85
|
}
|
|
62
86
|
/**
|
|
63
|
-
*
|
|
64
|
-
* @param
|
|
65
|
-
* @param
|
|
66
|
-
* @param
|
|
67
|
-
*
|
|
68
|
-
* @
|
|
69
|
-
*
|
|
70
|
-
* @returns a new instance of the `UndirectedEdge` class, which is casted as type `EO`.
|
|
87
|
+
* Create an undirected edge instance. Does not insert into the graph.
|
|
88
|
+
* @param v1 - One endpoint key.
|
|
89
|
+
* @param v2 - The other endpoint key.
|
|
90
|
+
* @param weight - Edge weight; defaults to `defaultEdgeWeight`.
|
|
91
|
+
* @param value - Edge payload.
|
|
92
|
+
* @returns Concrete edge instance.
|
|
93
|
+
* @remarks Time O(1), Space O(1)
|
|
71
94
|
*/
|
|
72
95
|
createEdge(v1, v2, weight, value) {
|
|
73
|
-
return new UndirectedEdge(v1, v2, weight ?? 1, value);
|
|
96
|
+
return new UndirectedEdge(v1, v2, weight ?? this.options.defaultEdgeWeight ?? 1, value);
|
|
74
97
|
}
|
|
75
98
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* @
|
|
81
|
-
* object), `undefined`, or `VertexKey` (a string or number representing the ID of a vertex).
|
|
82
|
-
* @param {VO | VertexKey | undefined} v2 - The parameter `v2` represents a vertex or vertex ID. It can be of type `VO` (vertex
|
|
83
|
-
* object), `undefined`, or `VertexKey` (vertex ID).
|
|
84
|
-
* @returns an edge (EO) or undefined.
|
|
99
|
+
* Get an undirected edge between two vertices, if present.
|
|
100
|
+
* @param v1 - One vertex or key.
|
|
101
|
+
* @param v2 - The other vertex or key.
|
|
102
|
+
* @returns Edge instance or `undefined`.
|
|
103
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
85
104
|
*/
|
|
86
105
|
getEdge(v1, v2) {
|
|
87
106
|
let edgeMap = [];
|
|
@@ -95,14 +114,11 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
95
114
|
return edgeMap ? edgeMap[0] || undefined : undefined;
|
|
96
115
|
}
|
|
97
116
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* @
|
|
103
|
-
* @param {VO | VertexKey} v2 - VO | VertexKey - This parameter can be either a vertex object (VO) or a vertex ID
|
|
104
|
-
* (VertexKey). It represents the second vertex of the edge that needs to be removed.
|
|
105
|
-
* @returns the removed edge (EO) if it exists, or undefined if either of the endpoints (VO) does not exist.
|
|
117
|
+
* Delete a single undirected edge between two vertices.
|
|
118
|
+
* @param v1 - One vertex or key.
|
|
119
|
+
* @param v2 - The other vertex or key.
|
|
120
|
+
* @returns Removed edge or `undefined`.
|
|
121
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
106
122
|
*/
|
|
107
123
|
deleteEdgeBetween(v1, v2) {
|
|
108
124
|
const vertex1 = this._getVertex(v1);
|
|
@@ -122,17 +138,11 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
122
138
|
return removed;
|
|
123
139
|
}
|
|
124
140
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* @
|
|
130
|
-
* either an edge object or a vertex key.
|
|
131
|
-
* @param {VertexKey} [otherSideVertexKey] - The parameter `otherSideVertexKey` is an optional
|
|
132
|
-
* parameter that represents the key of the vertex on the other side of the edge. It is used when the
|
|
133
|
-
* `edgeOrOneSideVertexKey` parameter is a vertex key, and it specifies the key of the vertex on the
|
|
134
|
-
* other side of the
|
|
135
|
-
* @returns The `deleteEdge` function returns either the deleted edge object (EO) or `undefined`.
|
|
141
|
+
* Delete an edge by instance or by a pair of keys.
|
|
142
|
+
* @param edgeOrOneSideVertexKey - Edge instance or one endpoint vertex/key.
|
|
143
|
+
* @param otherSideVertexKey - Required second endpoint when deleting by pair.
|
|
144
|
+
* @returns Removed edge or `undefined`.
|
|
145
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
136
146
|
*/
|
|
137
147
|
deleteEdge(edgeOrOneSideVertexKey, otherSideVertexKey) {
|
|
138
148
|
let oneSide, otherSide;
|
|
@@ -157,13 +167,10 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
157
167
|
}
|
|
158
168
|
}
|
|
159
169
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
165
|
-
* (`VertexKey`).
|
|
166
|
-
* @returns The method is returning a boolean value.
|
|
170
|
+
* Delete a vertex and remove it from all neighbor lists.
|
|
171
|
+
* @param vertexOrKey - Vertex or key.
|
|
172
|
+
* @returns `true` if removed; otherwise `false`.
|
|
173
|
+
* @remarks Time O(deg), Space O(1)
|
|
167
174
|
*/
|
|
168
175
|
deleteVertex(vertexOrKey) {
|
|
169
176
|
let vertexKey;
|
|
@@ -176,6 +183,12 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
176
183
|
vertex = vertexOrKey;
|
|
177
184
|
vertexKey = this._getVertexKey(vertexOrKey);
|
|
178
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* All neighbors connected via undirected edges.
|
|
188
|
+
* @param vertexOrKey - Vertex or key.
|
|
189
|
+
* @returns Array of neighbor vertices.
|
|
190
|
+
* @remarks Time O(deg), Space O(deg)
|
|
191
|
+
*/
|
|
179
192
|
const neighbors = this.getNeighbors(vertexOrKey);
|
|
180
193
|
if (vertex) {
|
|
181
194
|
neighbors.forEach(neighbor => {
|
|
@@ -192,14 +205,10 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
192
205
|
return this._vertexMap.delete(vertexKey);
|
|
193
206
|
}
|
|
194
207
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
* vertex.
|
|
200
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
201
|
-
* @returns The function `degreeOf` returns the degree of a vertex in a graph. The degree of a vertex is the number of
|
|
202
|
-
* edgeMap connected to that vertex.
|
|
208
|
+
* Degree of a vertex (# of incident undirected edges).
|
|
209
|
+
* @param vertexOrKey - Vertex or key.
|
|
210
|
+
* @returns Non-negative integer.
|
|
211
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
203
212
|
*/
|
|
204
213
|
degreeOf(vertexOrKey) {
|
|
205
214
|
const vertex = this._getVertex(vertexOrKey);
|
|
@@ -211,13 +220,10 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
211
220
|
}
|
|
212
221
|
}
|
|
213
222
|
/**
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`. A `VertexKey` is a
|
|
219
|
-
* unique identifier for a vertex in a graph, while `VO` represents the type of the vertex.
|
|
220
|
-
* @returns an array of edgeMap.
|
|
223
|
+
* Incident undirected edges of a vertex.
|
|
224
|
+
* @param vertexOrKey - Vertex or key.
|
|
225
|
+
* @returns Array of incident edges.
|
|
226
|
+
* @remarks Time O(deg), Space O(deg)
|
|
221
227
|
*/
|
|
222
228
|
edgesOf(vertexOrKey) {
|
|
223
229
|
const vertex = this._getVertex(vertexOrKey);
|
|
@@ -229,11 +235,9 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
229
235
|
}
|
|
230
236
|
}
|
|
231
237
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* The function "edgeSet" returns an array of unique edgeMap from a set of edgeMap.
|
|
236
|
-
* @returns The method `edgeSet()` returns an array of type `EO[]`.
|
|
238
|
+
* Unique set of undirected edges across endpoints.
|
|
239
|
+
* @returns Array of edges.
|
|
240
|
+
* @remarks Time O(E), Space O(E)
|
|
237
241
|
*/
|
|
238
242
|
edgeSet() {
|
|
239
243
|
const edgeSet = new Set();
|
|
@@ -244,15 +248,6 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
244
248
|
});
|
|
245
249
|
return [...edgeSet];
|
|
246
250
|
}
|
|
247
|
-
/**
|
|
248
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
249
|
-
* Space Complexity: O(|E|)
|
|
250
|
-
*
|
|
251
|
-
* The function "getNeighbors" returns an array of neighboring endpoints for a given vertex or vertex ID.
|
|
252
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
253
|
-
* (`VertexKey`).
|
|
254
|
-
* @returns an array of vertexMap (VO[]).
|
|
255
|
-
*/
|
|
256
251
|
getNeighbors(vertexOrKey) {
|
|
257
252
|
const neighbors = [];
|
|
258
253
|
const vertex = this._getVertex(vertexOrKey);
|
|
@@ -268,14 +263,10 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
268
263
|
return neighbors;
|
|
269
264
|
}
|
|
270
265
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* it returns undefined.
|
|
276
|
-
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
277
|
-
* @returns The function `getEndsOfEdge` returns an array containing two endpoints `[VO, VO]` if the edge exists in the
|
|
278
|
-
* graph. If the edge does not exist, it returns `undefined`.
|
|
266
|
+
* Resolve an edge's two endpoints to vertex instances.
|
|
267
|
+
* @param edge - Edge instance.
|
|
268
|
+
* @returns `[v1, v2]` or `undefined` if either endpoint is missing.
|
|
269
|
+
* @remarks Time O(1), Space O(1)
|
|
279
270
|
*/
|
|
280
271
|
getEndsOfEdge(edge) {
|
|
281
272
|
if (!this.hasEdge(edge.endpoints[0], edge.endpoints[1])) {
|
|
@@ -291,46 +282,32 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
291
282
|
}
|
|
292
283
|
}
|
|
293
284
|
/**
|
|
294
|
-
*
|
|
295
|
-
* @
|
|
285
|
+
* Whether the graph has no vertices and no edges.
|
|
286
|
+
* @remarks Time O(1), Space O(1)
|
|
296
287
|
*/
|
|
297
288
|
isEmpty() {
|
|
298
289
|
return this.vertexMap.size === 0 && this.edgeMap.size === 0;
|
|
299
290
|
}
|
|
300
291
|
/**
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
* The clear function resets the vertex and edge maps to empty maps.
|
|
292
|
+
* Remove all vertices and edges.
|
|
293
|
+
* @remarks Time O(V + E), Space O(1)
|
|
305
294
|
*/
|
|
306
295
|
clear() {
|
|
307
296
|
this._vertexMap = new Map();
|
|
308
297
|
this._edgeMap = new Map();
|
|
309
298
|
}
|
|
310
299
|
/**
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
* cloned graph. The clone function returns a reference to this newly created,
|
|
315
|
-
* cloned UndirectedGraph object.
|
|
316
|
-
*
|
|
317
|
-
* @return A new instance of the undirectedgraph class
|
|
300
|
+
* Deep clone as the same concrete class.
|
|
301
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
302
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
318
303
|
*/
|
|
319
304
|
clone() {
|
|
320
|
-
|
|
321
|
-
cloned.vertexMap = new Map(this.vertexMap);
|
|
322
|
-
cloned.edgeMap = new Map(this.edgeMap);
|
|
323
|
-
return cloned;
|
|
305
|
+
return super.clone();
|
|
324
306
|
}
|
|
325
307
|
/**
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
* 1. Tarjan can find the articulation points and bridges(critical edgeMap) of undirected graphs in linear time
|
|
330
|
-
*
|
|
331
|
-
* The function `tarjan` implements the Tarjan's algorithm to find bridges and cut vertices in a
|
|
332
|
-
* graph.
|
|
333
|
-
* @returns The function `tarjan()` returns an object with the following properties:
|
|
308
|
+
* Tarjan-based bridge and articulation point detection.
|
|
309
|
+
* @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
|
|
310
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
334
311
|
*/
|
|
335
312
|
tarjan() {
|
|
336
313
|
const dfnMap = new Map();
|
|
@@ -383,40 +360,42 @@ export class UndirectedGraph extends AbstractGraph {
|
|
|
383
360
|
};
|
|
384
361
|
}
|
|
385
362
|
/**
|
|
386
|
-
*
|
|
387
|
-
* @returns
|
|
363
|
+
* Get bridges discovered by `tarjan()`.
|
|
364
|
+
* @returns Array of edges that are bridges.
|
|
365
|
+
* @remarks Time O(B), Space O(1)
|
|
388
366
|
*/
|
|
389
367
|
getBridges() {
|
|
390
368
|
return this.tarjan().bridges;
|
|
391
369
|
}
|
|
392
370
|
/**
|
|
393
|
-
*
|
|
394
|
-
* @returns
|
|
371
|
+
* Get articulation points discovered by `tarjan()`.
|
|
372
|
+
* @returns Array of cut vertices.
|
|
373
|
+
* @remarks Time O(C), Space O(1)
|
|
395
374
|
*/
|
|
396
375
|
getCutVertices() {
|
|
397
376
|
return this.tarjan().cutVertices;
|
|
398
377
|
}
|
|
399
378
|
/**
|
|
400
|
-
*
|
|
401
|
-
* @returns
|
|
379
|
+
* DFN index map computed by `tarjan()`.
|
|
380
|
+
* @returns Map from vertex to DFN index.
|
|
381
|
+
* @remarks Time O(V), Space O(V)
|
|
402
382
|
*/
|
|
403
383
|
getDFNMap() {
|
|
404
384
|
return this.tarjan().dfnMap;
|
|
405
385
|
}
|
|
406
386
|
/**
|
|
407
|
-
*
|
|
408
|
-
* @returns
|
|
387
|
+
* LOW link map computed by `tarjan()`.
|
|
388
|
+
* @returns Map from vertex to LOW value.
|
|
389
|
+
* @remarks Time O(V), Space O(V)
|
|
409
390
|
*/
|
|
410
391
|
getLowMap() {
|
|
411
392
|
return this.tarjan().lowMap;
|
|
412
393
|
}
|
|
413
394
|
/**
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
419
|
-
* @returns a boolean value.
|
|
395
|
+
* Internal hook to attach an undirected edge into adjacency maps.
|
|
396
|
+
* @param edge - Edge instance.
|
|
397
|
+
* @returns `true` if both endpoints exist; otherwise `false`.
|
|
398
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
420
399
|
*/
|
|
421
400
|
_addEdge(edge) {
|
|
422
401
|
for (const end of edge.endpoints) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undirected-graph.js","sourceRoot":"","sources":["../../../../src/data-structures/graph/undirected-graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"undirected-graph.js","sourceRoot":"","sources":["../../../../src/data-structures/graph/undirected-graph.ts"],"names":[],"mappings":"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"}
|