priority-queue-typed 2.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/data-structures/base/iterable-element-base.js +149 -107
- package/dist/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/data-structures/base/linear-base.d.ts +250 -192
- package/dist/data-structures/base/linear-base.js +137 -274
- package/dist/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/data-structures/binary-tree/avl-tree-counter.js +171 -205
- package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
- package/dist/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/data-structures/binary-tree/avl-tree.js +208 -195
- package/dist/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/data-structures/binary-tree/binary-tree.js +612 -879
- package/dist/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/data-structures/binary-tree/bst.js +505 -481
- package/dist/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/data-structures/binary-tree/red-black-tree.js +114 -209
- package/dist/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/data-structures/binary-tree/tree-counter.js +172 -203
- package/dist/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/data-structures/binary-tree/tree-multi-map.js +105 -85
- package/dist/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/data-structures/graph/abstract-graph.js +267 -237
- package/dist/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/data-structures/graph/directed-graph.js +146 -233
- package/dist/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/data-structures/graph/map-graph.js +56 -59
- package/dist/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/data-structures/graph/undirected-graph.js +129 -149
- package/dist/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/data-structures/hash/hash-map.js +270 -457
- package/dist/data-structures/heap/heap.d.ts +214 -289
- package/dist/data-structures/heap/heap.js +340 -349
- package/dist/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/data-structures/heap/max-heap.js +11 -66
- package/dist/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/data-structures/heap/min-heap.js +11 -66
- package/dist/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/data-structures/linked-list/doubly-linked-list.js +368 -494
- package/dist/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/data-structures/linked-list/singly-linked-list.js +447 -466
- package/dist/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/data-structures/queue/deque.d.ts +227 -254
- package/dist/data-structures/queue/deque.js +309 -348
- package/dist/data-structures/queue/queue.d.ts +180 -201
- package/dist/data-structures/queue/queue.js +265 -248
- package/dist/data-structures/stack/stack.d.ts +124 -102
- package/dist/data-structures/stack/stack.js +181 -125
- package/dist/data-structures/trie/trie.d.ts +164 -165
- package/dist/data-structures/trie/trie.js +189 -172
- package/dist/interfaces/binary-tree.d.ts +56 -6
- package/dist/interfaces/graph.d.ts +16 -0
- package/dist/types/data-structures/base/base.d.ts +1 -1
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/types/utils/utils.d.ts +6 -6
- package/dist/utils/utils.d.ts +110 -49
- package/dist/utils/utils.js +148 -73
- package/package.json +2 -2
- 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 +681 -905
- 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 +9 -5
- package/src/utils/utils.ts +152 -86
|
@@ -1,47 +1,35 @@
|
|
|
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 type { MapGraphCoordinate, VertexKey } from '../../types';
|
|
2
9
|
import { DirectedEdge, DirectedGraph, DirectedVertex } from './directed-graph';
|
|
3
10
|
export declare class MapVertex<V = any> extends DirectedVertex<V> {
|
|
4
11
|
lat: number;
|
|
5
12
|
long: number;
|
|
6
|
-
/**
|
|
7
|
-
* The constructor function initializes an object with an key, latitude, longitude, and an optional value.
|
|
8
|
-
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex.
|
|
9
|
-
* @param {number} lat - The "lat" parameter represents the latitude of a vertex. Latitude is a geographic coordinate
|
|
10
|
-
* that specifies the north-south position of a point on the Earth's surface. It is measured in degrees, with positive
|
|
11
|
-
* values representing points north of the equator and negative values representing points south of the equator.
|
|
12
|
-
* @param {number} long - The "long" parameter represents the longitude of a location. Longitude is a geographic
|
|
13
|
-
* coordinate that specifies the east-west position of a point on the Earth's surface. It is measured in degrees, with
|
|
14
|
-
* values ranging from -180 to 180.
|
|
15
|
-
* @param {V} [value] - The "value" parameter is an optional value of type V. It is not required to be provided when
|
|
16
|
-
* creating an instance of the class.
|
|
17
|
-
*/
|
|
18
13
|
constructor(key: VertexKey, value: V, lat: number, long: number);
|
|
19
14
|
}
|
|
20
15
|
export declare class MapEdge<E = any> extends DirectedEdge<E> {
|
|
21
|
-
/**
|
|
22
|
-
* The constructor function initializes a new instance of a class with the given source, destination, weight, and
|
|
23
|
-
* value.
|
|
24
|
-
* @param {VertexKey} src - The `src` parameter is the source vertex ID. It represents the starting point of an edge in
|
|
25
|
-
* a graph.
|
|
26
|
-
* @param {VertexKey} dest - The `dest` parameter is the identifier of the destination vertex for an edge.
|
|
27
|
-
* @param {number} [weight] - The weight parameter is an optional number that represents the weight of the edge.
|
|
28
|
-
* @param {E} [value] - The "value" parameter is an optional parameter of type E. It is used to store additional
|
|
29
|
-
* information or data associated with the edge.
|
|
30
|
-
*/
|
|
31
16
|
constructor(src: VertexKey, dest: VertexKey, weight?: number, value?: E);
|
|
32
17
|
}
|
|
33
18
|
/**
|
|
34
|
-
*
|
|
19
|
+
* Directed graph variant carrying geospatial coordinates.
|
|
20
|
+
* @template V - Vertex value type.
|
|
21
|
+
* @template E - Edge value type.
|
|
22
|
+
* @template VO - Concrete vertex class (MapVertex<V>).
|
|
23
|
+
* @template EO - Concrete edge class (MapEdge<E>).
|
|
24
|
+
* @remarks Time O(1), Space O(1)
|
|
25
|
+
* @example examples will be generated by unit test
|
|
35
26
|
*/
|
|
36
27
|
export declare class MapGraph<V = any, E = any, VO extends MapVertex<V> = MapVertex<V>, EO extends MapEdge<E> = MapEdge<E>> extends DirectedGraph<V, E, VO, EO> {
|
|
37
28
|
/**
|
|
38
|
-
*
|
|
39
|
-
* @param
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* @param {MapGraphCoordinate} [bottomRight] - The `bottomRight` parameter is an optional parameter of type
|
|
43
|
-
* `MapGraphCoordinate`. It represents the bottom right coordinate of a map graph. If this parameter is not provided,
|
|
44
|
-
* it will default to `undefined`.
|
|
29
|
+
* Construct a MapGraph.
|
|
30
|
+
* @param originCoord - Origin coordinate `[lat, long]` used as default.
|
|
31
|
+
* @param bottomRight - Optional bottom-right coordinate for bounding boxes.
|
|
32
|
+
* @remarks Time O(1), Space O(1)
|
|
45
33
|
*/
|
|
46
34
|
constructor(originCoord: MapGraphCoordinate, bottomRight?: MapGraphCoordinate);
|
|
47
35
|
protected _originCoord: MapGraphCoordinate;
|
|
@@ -49,36 +37,42 @@ export declare class MapGraph<V = any, E = any, VO extends MapVertex<V> = MapVer
|
|
|
49
37
|
protected _bottomRight: MapGraphCoordinate | undefined;
|
|
50
38
|
get bottomRight(): MapGraphCoordinate | undefined;
|
|
51
39
|
/**
|
|
52
|
-
*
|
|
53
|
-
* @param
|
|
54
|
-
*
|
|
55
|
-
* @param
|
|
56
|
-
*
|
|
57
|
-
* @
|
|
58
|
-
*
|
|
59
|
-
* @param {number} long - The `long` parameter represents the longitude coordinate of the vertex.
|
|
60
|
-
* @returns The method is returning a new instance of the `MapVertex` class, casted as type `VO`.
|
|
40
|
+
* Create a map vertex with optional coordinates.
|
|
41
|
+
* @param key - Vertex identifier.
|
|
42
|
+
* @param value - Optional payload.
|
|
43
|
+
* @param lat - Latitude (defaults to `originCoord[0]`).
|
|
44
|
+
* @param long - Longitude (defaults to `originCoord[1]`).
|
|
45
|
+
* @returns MapVertex instance.
|
|
46
|
+
* @remarks Time O(1), Space O(1)
|
|
61
47
|
*/
|
|
62
48
|
createVertex(key: VertexKey, value?: V, lat?: number, long?: number): VO;
|
|
63
49
|
/**
|
|
64
|
-
*
|
|
65
|
-
* @param
|
|
66
|
-
* @param
|
|
67
|
-
*
|
|
68
|
-
* @param
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* @param [value] - The `value` parameter is an optional value that can be assigned to the edge. It can be of any type,
|
|
72
|
-
* depending on the specific implementation of the `MapEdge` class.
|
|
73
|
-
* @returns a new instance of the `MapEdge` class, cast as type `EO`.
|
|
50
|
+
* Create a map edge (directed) with optional weight/value.
|
|
51
|
+
* @param src - Source key.
|
|
52
|
+
* @param dest - Destination key.
|
|
53
|
+
* @param weight - Edge weight.
|
|
54
|
+
* @param value - Edge payload.
|
|
55
|
+
* @returns MapEdge instance.
|
|
56
|
+
* @remarks Time O(1), Space O(1)
|
|
74
57
|
*/
|
|
75
58
|
createEdge(src: VertexKey, dest: VertexKey, weight?: number, value?: E): EO;
|
|
76
59
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
* Deep clone as the same concrete class.
|
|
61
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
62
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
63
|
+
*/
|
|
64
|
+
clone(): this;
|
|
65
|
+
/**
|
|
66
|
+
* Include `originCoord` and `bottomRight` so `clone()/filter()` preserve geospatial settings.
|
|
67
|
+
* @returns Options bag extending super snapshot.
|
|
68
|
+
* @remarks Time O(1), Space O(1)
|
|
69
|
+
*/
|
|
70
|
+
protected _snapshotOptions(): Record<string, unknown>;
|
|
71
|
+
/**
|
|
72
|
+
* Re-create a same-species MapGraph instance from snapshot options.
|
|
73
|
+
* @param options - Snapshot options providing `originCoord`/`bottomRight`.
|
|
74
|
+
* @returns Empty MapGraph instance of `this` type.
|
|
75
|
+
* @remarks Time O(1), Space O(1)
|
|
82
76
|
*/
|
|
83
|
-
|
|
77
|
+
protected _createInstance(options?: Partial<Record<string, unknown>>): this;
|
|
84
78
|
}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* data-structure-typed
|
|
4
|
+
*
|
|
5
|
+
* @author Pablo Zeng
|
|
6
|
+
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
7
|
+
* @license MIT License
|
|
8
|
+
*/
|
|
2
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
10
|
exports.MapGraph = exports.MapEdge = exports.MapVertex = void 0;
|
|
4
11
|
const directed_graph_1 = require("./directed-graph");
|
|
5
12
|
class MapVertex extends directed_graph_1.DirectedVertex {
|
|
6
|
-
/**
|
|
7
|
-
* The constructor function initializes an object with an key, latitude, longitude, and an optional value.
|
|
8
|
-
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex.
|
|
9
|
-
* @param {number} lat - The "lat" parameter represents the latitude of a vertex. Latitude is a geographic coordinate
|
|
10
|
-
* that specifies the north-south position of a point on the Earth's surface. It is measured in degrees, with positive
|
|
11
|
-
* values representing points north of the equator and negative values representing points south of the equator.
|
|
12
|
-
* @param {number} long - The "long" parameter represents the longitude of a location. Longitude is a geographic
|
|
13
|
-
* coordinate that specifies the east-west position of a point on the Earth's surface. It is measured in degrees, with
|
|
14
|
-
* values ranging from -180 to 180.
|
|
15
|
-
* @param {V} [value] - The "value" parameter is an optional value of type V. It is not required to be provided when
|
|
16
|
-
* creating an instance of the class.
|
|
17
|
-
*/
|
|
18
13
|
constructor(key, value, lat, long) {
|
|
19
14
|
super(key, value);
|
|
20
15
|
this.lat = lat;
|
|
@@ -23,33 +18,26 @@ class MapVertex extends directed_graph_1.DirectedVertex {
|
|
|
23
18
|
}
|
|
24
19
|
exports.MapVertex = MapVertex;
|
|
25
20
|
class MapEdge extends directed_graph_1.DirectedEdge {
|
|
26
|
-
/**
|
|
27
|
-
* The constructor function initializes a new instance of a class with the given source, destination, weight, and
|
|
28
|
-
* value.
|
|
29
|
-
* @param {VertexKey} src - The `src` parameter is the source vertex ID. It represents the starting point of an edge in
|
|
30
|
-
* a graph.
|
|
31
|
-
* @param {VertexKey} dest - The `dest` parameter is the identifier of the destination vertex for an edge.
|
|
32
|
-
* @param {number} [weight] - The weight parameter is an optional number that represents the weight of the edge.
|
|
33
|
-
* @param {E} [value] - The "value" parameter is an optional parameter of type E. It is used to store additional
|
|
34
|
-
* information or data associated with the edge.
|
|
35
|
-
*/
|
|
36
21
|
constructor(src, dest, weight, value) {
|
|
37
22
|
super(src, dest, weight, value);
|
|
38
23
|
}
|
|
39
24
|
}
|
|
40
25
|
exports.MapEdge = MapEdge;
|
|
41
26
|
/**
|
|
42
|
-
*
|
|
27
|
+
* Directed graph variant carrying geospatial coordinates.
|
|
28
|
+
* @template V - Vertex value type.
|
|
29
|
+
* @template E - Edge value type.
|
|
30
|
+
* @template VO - Concrete vertex class (MapVertex<V>).
|
|
31
|
+
* @template EO - Concrete edge class (MapEdge<E>).
|
|
32
|
+
* @remarks Time O(1), Space O(1)
|
|
33
|
+
* @example examples will be generated by unit test
|
|
43
34
|
*/
|
|
44
35
|
class MapGraph extends directed_graph_1.DirectedGraph {
|
|
45
36
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @param
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @param {MapGraphCoordinate} [bottomRight] - The `bottomRight` parameter is an optional parameter of type
|
|
51
|
-
* `MapGraphCoordinate`. It represents the bottom right coordinate of a map graph. If this parameter is not provided,
|
|
52
|
-
* it will default to `undefined`.
|
|
37
|
+
* Construct a MapGraph.
|
|
38
|
+
* @param originCoord - Origin coordinate `[lat, long]` used as default.
|
|
39
|
+
* @param bottomRight - Optional bottom-right coordinate for bounding boxes.
|
|
40
|
+
* @remarks Time O(1), Space O(1)
|
|
53
41
|
*/
|
|
54
42
|
constructor(originCoord, bottomRight) {
|
|
55
43
|
super();
|
|
@@ -64,47 +52,56 @@ class MapGraph extends directed_graph_1.DirectedGraph {
|
|
|
64
52
|
return this._bottomRight;
|
|
65
53
|
}
|
|
66
54
|
/**
|
|
67
|
-
*
|
|
68
|
-
* @param
|
|
69
|
-
*
|
|
70
|
-
* @param
|
|
71
|
-
*
|
|
72
|
-
* @
|
|
73
|
-
*
|
|
74
|
-
* @param {number} long - The `long` parameter represents the longitude coordinate of the vertex.
|
|
75
|
-
* @returns The method is returning a new instance of the `MapVertex` class, casted as type `VO`.
|
|
55
|
+
* Create a map vertex with optional coordinates.
|
|
56
|
+
* @param key - Vertex identifier.
|
|
57
|
+
* @param value - Optional payload.
|
|
58
|
+
* @param lat - Latitude (defaults to `originCoord[0]`).
|
|
59
|
+
* @param long - Longitude (defaults to `originCoord[1]`).
|
|
60
|
+
* @returns MapVertex instance.
|
|
61
|
+
* @remarks Time O(1), Space O(1)
|
|
76
62
|
*/
|
|
77
63
|
createVertex(key, value, lat = this.originCoord[0], long = this.originCoord[1]) {
|
|
78
64
|
return new MapVertex(key, value, lat, long);
|
|
79
65
|
}
|
|
80
66
|
/**
|
|
81
|
-
*
|
|
82
|
-
* @param
|
|
83
|
-
* @param
|
|
84
|
-
*
|
|
85
|
-
* @param
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* @param [value] - The `value` parameter is an optional value that can be assigned to the edge. It can be of any type,
|
|
89
|
-
* depending on the specific implementation of the `MapEdge` class.
|
|
90
|
-
* @returns a new instance of the `MapEdge` class, cast as type `EO`.
|
|
67
|
+
* Create a map edge (directed) with optional weight/value.
|
|
68
|
+
* @param src - Source key.
|
|
69
|
+
* @param dest - Destination key.
|
|
70
|
+
* @param weight - Edge weight.
|
|
71
|
+
* @param value - Edge payload.
|
|
72
|
+
* @returns MapEdge instance.
|
|
73
|
+
* @remarks Time O(1), Space O(1)
|
|
91
74
|
*/
|
|
92
75
|
createEdge(src, dest, weight, value) {
|
|
93
76
|
return new MapEdge(src, dest, weight, value);
|
|
94
77
|
}
|
|
95
78
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* @return A mapgraph<v, e, vo, eo>
|
|
79
|
+
* Deep clone as the same concrete class.
|
|
80
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
81
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
101
82
|
*/
|
|
102
83
|
clone() {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
84
|
+
return super.clone();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Include `originCoord` and `bottomRight` so `clone()/filter()` preserve geospatial settings.
|
|
88
|
+
* @returns Options bag extending super snapshot.
|
|
89
|
+
* @remarks Time O(1), Space O(1)
|
|
90
|
+
*/
|
|
91
|
+
_snapshotOptions() {
|
|
92
|
+
return Object.assign(Object.assign({}, super._snapshotOptions()), { originCoord: this.originCoord, bottomRight: this.bottomRight });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Re-create a same-species MapGraph instance from snapshot options.
|
|
96
|
+
* @param options - Snapshot options providing `originCoord`/`bottomRight`.
|
|
97
|
+
* @returns Empty MapGraph instance of `this` type.
|
|
98
|
+
* @remarks Time O(1), Space O(1)
|
|
99
|
+
*/
|
|
100
|
+
_createInstance(options) {
|
|
101
|
+
const { originCoord, bottomRight } = (options || {});
|
|
102
|
+
const oc = (originCoord !== null && originCoord !== void 0 ? originCoord : this.originCoord);
|
|
103
|
+
const br = (bottomRight !== null && bottomRight !== void 0 ? bottomRight : this.bottomRight);
|
|
104
|
+
return new MapGraph(oc, br);
|
|
108
105
|
}
|
|
109
106
|
}
|
|
110
107
|
exports.MapGraph = MapGraph;
|
|
@@ -5,193 +5,148 @@
|
|
|
5
5
|
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
|
-
import type { VertexKey } from '../../types';
|
|
8
|
+
import type { GraphOptions, VertexKey } from '../../types';
|
|
9
9
|
import { IGraph } from '../../interfaces';
|
|
10
10
|
import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
|
|
11
11
|
export declare class UndirectedVertex<V = any> extends AbstractVertex<V> {
|
|
12
|
-
/**
|
|
13
|
-
* The constructor function initializes a vertex with an optional value.
|
|
14
|
-
* @param {VertexKey} key - The `key` parameter is of type `VertexKey` and represents the identifier of the vertex. It is
|
|
15
|
-
* used to uniquely identify the vertex within a graph or network.
|
|
16
|
-
* @param {V} [value] - The "value" parameter is an optional parameter of type V. It is used to initialize the value of the
|
|
17
|
-
* vertex. If no value is provided, the vertex will be initialized with a default value.
|
|
18
|
-
*/
|
|
19
12
|
constructor(key: VertexKey, value?: V);
|
|
20
13
|
}
|
|
21
14
|
export declare class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
22
15
|
endpoints: [VertexKey, VertexKey];
|
|
23
|
-
/**
|
|
24
|
-
* The constructor function creates an instance of a class with two vertex IDs, an optional weight, and an optional
|
|
25
|
-
* value.
|
|
26
|
-
* @param {VertexKey} v1 - The first vertex ID of the edge.
|
|
27
|
-
* @param {VertexKey} v2 - The parameter `v2` is a `VertexKey`, which represents the identifier of the second vertex in a
|
|
28
|
-
* graph edge.
|
|
29
|
-
* @param {number} [weight] - The weight parameter is an optional number that represents the weight of the edge.
|
|
30
|
-
* @param {E} [value] - The "value" parameter is an optional parameter of type E. It is used to store a value associated
|
|
31
|
-
* with the edge.
|
|
32
|
-
*/
|
|
33
16
|
constructor(v1: VertexKey, v2: VertexKey, weight?: number, value?: E);
|
|
34
17
|
}
|
|
35
18
|
/**
|
|
36
|
-
*
|
|
19
|
+
* Undirected graph implementation.
|
|
20
|
+
* @template V - Vertex value type.
|
|
21
|
+
* @template E - Edge value type.
|
|
22
|
+
* @template VO - Concrete vertex class (extends AbstractVertex<V>).
|
|
23
|
+
* @template EO - Concrete edge class (extends AbstractEdge<E>).
|
|
24
|
+
* @remarks Time O(1), Space O(1)
|
|
25
|
+
* @example examples will be generated by unit test
|
|
37
26
|
*/
|
|
38
27
|
export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVertex<V> = UndirectedVertex<V>, EO extends UndirectedEdge<E> = UndirectedEdge<E>> extends AbstractGraph<V, E, VO, EO> implements IGraph<V, E, VO, EO> {
|
|
39
28
|
/**
|
|
40
|
-
*
|
|
29
|
+
* Construct an undirected graph with runtime defaults.
|
|
30
|
+
* @param options - `GraphOptions<V>` (e.g. `vertexValueInitializer`, `defaultEdgeWeight`).
|
|
31
|
+
* @remarks Time O(1), Space O(1)
|
|
41
32
|
*/
|
|
42
|
-
constructor();
|
|
33
|
+
constructor(options?: Partial<GraphOptions<V>>);
|
|
43
34
|
protected _edgeMap: Map<VO, EO[]>;
|
|
44
35
|
get edgeMap(): Map<VO, EO[]>;
|
|
45
36
|
set edgeMap(v: Map<VO, EO[]>);
|
|
46
37
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @
|
|
49
|
-
*
|
|
50
|
-
* @
|
|
51
|
-
*
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
* Construct an undirected graph from keys with value initializer `v => v`.
|
|
39
|
+
* @template K - Vertex key type.
|
|
40
|
+
* @param keys - Iterable of vertex keys.
|
|
41
|
+
* @returns UndirectedGraph with all keys added.
|
|
42
|
+
* @remarks Time O(V), Space O(V)
|
|
43
|
+
*/
|
|
44
|
+
static fromKeys<K extends VertexKey>(keys: Iterable<K>): UndirectedGraph<K, any, UndirectedVertex<K>, UndirectedEdge<any>>;
|
|
45
|
+
/**
|
|
46
|
+
* Construct an undirected graph from `[key, value]` entries.
|
|
47
|
+
* @template V - Vertex value type.
|
|
48
|
+
* @param entries - Iterable of `[key, value]` pairs.
|
|
49
|
+
* @returns UndirectedGraph with all vertices added.
|
|
50
|
+
* @remarks Time O(V), Space O(V)
|
|
51
|
+
*/
|
|
52
|
+
static fromEntries<V>(entries: Iterable<[VertexKey, V]>): UndirectedGraph<V, any, UndirectedVertex<V>, UndirectedEdge<any>>;
|
|
53
|
+
/**
|
|
54
|
+
* Create an undirected vertex instance. Does not insert into the graph.
|
|
55
|
+
* @param key - Vertex identifier.
|
|
56
|
+
* @param value - Optional payload.
|
|
57
|
+
* @returns Concrete vertex instance.
|
|
58
|
+
* @remarks Time O(1), Space O(1)
|
|
54
59
|
*/
|
|
55
60
|
createVertex(key: VertexKey, value?: VO['value']): VO;
|
|
56
61
|
/**
|
|
57
|
-
*
|
|
58
|
-
* @param
|
|
59
|
-
* @param
|
|
60
|
-
* @param
|
|
61
|
-
*
|
|
62
|
-
* @
|
|
63
|
-
*
|
|
64
|
-
* @returns a new instance of the `UndirectedEdge` class, which is casted as type `EO`.
|
|
62
|
+
* Create an undirected edge instance. Does not insert into the graph.
|
|
63
|
+
* @param v1 - One endpoint key.
|
|
64
|
+
* @param v2 - The other endpoint key.
|
|
65
|
+
* @param weight - Edge weight; defaults to `defaultEdgeWeight`.
|
|
66
|
+
* @param value - Edge payload.
|
|
67
|
+
* @returns Concrete edge instance.
|
|
68
|
+
* @remarks Time O(1), Space O(1)
|
|
65
69
|
*/
|
|
66
70
|
createEdge(v1: VertexKey, v2: VertexKey, weight?: number, value?: EO['value']): EO;
|
|
67
71
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* @
|
|
73
|
-
* object), `undefined`, or `VertexKey` (a string or number representing the ID of a vertex).
|
|
74
|
-
* @param {VO | VertexKey | undefined} v2 - The parameter `v2` represents a vertex or vertex ID. It can be of type `VO` (vertex
|
|
75
|
-
* object), `undefined`, or `VertexKey` (vertex ID).
|
|
76
|
-
* @returns an edge (EO) or undefined.
|
|
72
|
+
* Get an undirected edge between two vertices, if present.
|
|
73
|
+
* @param v1 - One vertex or key.
|
|
74
|
+
* @param v2 - The other vertex or key.
|
|
75
|
+
* @returns Edge instance or `undefined`.
|
|
76
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
77
77
|
*/
|
|
78
78
|
getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined;
|
|
79
79
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @
|
|
85
|
-
* @param {VO | VertexKey} v2 - VO | VertexKey - This parameter can be either a vertex object (VO) or a vertex ID
|
|
86
|
-
* (VertexKey). It represents the second vertex of the edge that needs to be removed.
|
|
87
|
-
* @returns the removed edge (EO) if it exists, or undefined if either of the endpoints (VO) does not exist.
|
|
80
|
+
* Delete a single undirected edge between two vertices.
|
|
81
|
+
* @param v1 - One vertex or key.
|
|
82
|
+
* @param v2 - The other vertex or key.
|
|
83
|
+
* @returns Removed edge or `undefined`.
|
|
84
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
88
85
|
*/
|
|
89
86
|
deleteEdgeBetween(v1: VO | VertexKey, v2: VO | VertexKey): EO | undefined;
|
|
90
87
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* @
|
|
96
|
-
* either an edge object or a vertex key.
|
|
97
|
-
* @param {VertexKey} [otherSideVertexKey] - The parameter `otherSideVertexKey` is an optional
|
|
98
|
-
* parameter that represents the key of the vertex on the other side of the edge. It is used when the
|
|
99
|
-
* `edgeOrOneSideVertexKey` parameter is a vertex key, and it specifies the key of the vertex on the
|
|
100
|
-
* other side of the
|
|
101
|
-
* @returns The `deleteEdge` function returns either the deleted edge object (EO) or `undefined`.
|
|
88
|
+
* Delete an edge by instance or by a pair of keys.
|
|
89
|
+
* @param edgeOrOneSideVertexKey - Edge instance or one endpoint vertex/key.
|
|
90
|
+
* @param otherSideVertexKey - Required second endpoint when deleting by pair.
|
|
91
|
+
* @returns Removed edge or `undefined`.
|
|
92
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
102
93
|
*/
|
|
103
94
|
deleteEdge(edgeOrOneSideVertexKey: EO | VertexKey, otherSideVertexKey?: VertexKey): EO | undefined;
|
|
104
95
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
110
|
-
* (`VertexKey`).
|
|
111
|
-
* @returns The method is returning a boolean value.
|
|
96
|
+
* Delete a vertex and remove it from all neighbor lists.
|
|
97
|
+
* @param vertexOrKey - Vertex or key.
|
|
98
|
+
* @returns `true` if removed; otherwise `false`.
|
|
99
|
+
* @remarks Time O(deg), Space O(1)
|
|
112
100
|
*/
|
|
113
101
|
deleteVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
114
102
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* vertex.
|
|
120
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
121
|
-
* @returns The function `degreeOf` returns the degree of a vertex in a graph. The degree of a vertex is the number of
|
|
122
|
-
* edgeMap connected to that vertex.
|
|
103
|
+
* Degree of a vertex (# of incident undirected edges).
|
|
104
|
+
* @param vertexOrKey - Vertex or key.
|
|
105
|
+
* @returns Non-negative integer.
|
|
106
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
123
107
|
*/
|
|
124
108
|
degreeOf(vertexOrKey: VertexKey | VO): number;
|
|
125
109
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`. A `VertexKey` is a
|
|
131
|
-
* unique identifier for a vertex in a graph, while `VO` represents the type of the vertex.
|
|
132
|
-
* @returns an array of edgeMap.
|
|
110
|
+
* Incident undirected edges of a vertex.
|
|
111
|
+
* @param vertexOrKey - Vertex or key.
|
|
112
|
+
* @returns Array of incident edges.
|
|
113
|
+
* @remarks Time O(deg), Space O(deg)
|
|
133
114
|
*/
|
|
134
115
|
edgesOf(vertexOrKey: VertexKey | VO): EO[];
|
|
135
116
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* The function "edgeSet" returns an array of unique edgeMap from a set of edgeMap.
|
|
140
|
-
* @returns The method `edgeSet()` returns an array of type `EO[]`.
|
|
117
|
+
* Unique set of undirected edges across endpoints.
|
|
118
|
+
* @returns Array of edges.
|
|
119
|
+
* @remarks Time O(E), Space O(E)
|
|
141
120
|
*/
|
|
142
121
|
edgeSet(): EO[];
|
|
143
|
-
/**
|
|
144
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
145
|
-
* Space Complexity: O(|E|)
|
|
146
|
-
*
|
|
147
|
-
* The function "getNeighbors" returns an array of neighboring endpoints for a given vertex or vertex ID.
|
|
148
|
-
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
149
|
-
* (`VertexKey`).
|
|
150
|
-
* @returns an array of vertexMap (VO[]).
|
|
151
|
-
*/
|
|
152
122
|
getNeighbors(vertexOrKey: VO | VertexKey): VO[];
|
|
153
123
|
/**
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* it returns undefined.
|
|
159
|
-
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
160
|
-
* @returns The function `getEndsOfEdge` returns an array containing two endpoints `[VO, VO]` if the edge exists in the
|
|
161
|
-
* graph. If the edge does not exist, it returns `undefined`.
|
|
124
|
+
* Resolve an edge's two endpoints to vertex instances.
|
|
125
|
+
* @param edge - Edge instance.
|
|
126
|
+
* @returns `[v1, v2]` or `undefined` if either endpoint is missing.
|
|
127
|
+
* @remarks Time O(1), Space O(1)
|
|
162
128
|
*/
|
|
163
129
|
getEndsOfEdge(edge: EO): [VO, VO] | undefined;
|
|
164
130
|
/**
|
|
165
|
-
*
|
|
166
|
-
* @
|
|
131
|
+
* Whether the graph has no vertices and no edges.
|
|
132
|
+
* @remarks Time O(1), Space O(1)
|
|
167
133
|
*/
|
|
168
134
|
isEmpty(): boolean;
|
|
169
135
|
/**
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* The clear function resets the vertex and edge maps to empty maps.
|
|
136
|
+
* Remove all vertices and edges.
|
|
137
|
+
* @remarks Time O(V + E), Space O(1)
|
|
174
138
|
*/
|
|
175
139
|
clear(): void;
|
|
176
140
|
/**
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
*
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Time Complexity: O(V + E)
|
|
188
|
-
* Space Complexity: O(V)
|
|
189
|
-
* Tarjan is an algorithm based on dfs,which is used to solve the connectivity problem of graphs.
|
|
190
|
-
* 1. Tarjan can find the articulation points and bridges(critical edgeMap) of undirected graphs in linear time
|
|
191
|
-
*
|
|
192
|
-
* The function `tarjan` implements the Tarjan's algorithm to find bridges and cut vertices in a
|
|
193
|
-
* graph.
|
|
194
|
-
* @returns The function `tarjan()` returns an object with the following properties:
|
|
141
|
+
* Deep clone as the same concrete class.
|
|
142
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
143
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
144
|
+
*/
|
|
145
|
+
clone(): this;
|
|
146
|
+
/**
|
|
147
|
+
* Tarjan-based bridge and articulation point detection.
|
|
148
|
+
* @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
|
|
149
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
195
150
|
*/
|
|
196
151
|
tarjan(): {
|
|
197
152
|
dfnMap: Map<VO, number>;
|
|
@@ -200,32 +155,34 @@ export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVert
|
|
|
200
155
|
cutVertices: VO[];
|
|
201
156
|
};
|
|
202
157
|
/**
|
|
203
|
-
*
|
|
204
|
-
* @returns
|
|
158
|
+
* Get bridges discovered by `tarjan()`.
|
|
159
|
+
* @returns Array of edges that are bridges.
|
|
160
|
+
* @remarks Time O(B), Space O(1)
|
|
205
161
|
*/
|
|
206
162
|
getBridges(): EO[];
|
|
207
163
|
/**
|
|
208
|
-
*
|
|
209
|
-
* @returns
|
|
164
|
+
* Get articulation points discovered by `tarjan()`.
|
|
165
|
+
* @returns Array of cut vertices.
|
|
166
|
+
* @remarks Time O(C), Space O(1)
|
|
210
167
|
*/
|
|
211
168
|
getCutVertices(): VO[];
|
|
212
169
|
/**
|
|
213
|
-
*
|
|
214
|
-
* @returns
|
|
170
|
+
* DFN index map computed by `tarjan()`.
|
|
171
|
+
* @returns Map from vertex to DFN index.
|
|
172
|
+
* @remarks Time O(V), Space O(V)
|
|
215
173
|
*/
|
|
216
174
|
getDFNMap(): Map<VO, number>;
|
|
217
175
|
/**
|
|
218
|
-
*
|
|
219
|
-
* @returns
|
|
176
|
+
* LOW link map computed by `tarjan()`.
|
|
177
|
+
* @returns Map from vertex to LOW value.
|
|
178
|
+
* @remarks Time O(V), Space O(V)
|
|
220
179
|
*/
|
|
221
180
|
getLowMap(): Map<VO, number>;
|
|
222
181
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
228
|
-
* @returns a boolean value.
|
|
182
|
+
* Internal hook to attach an undirected edge into adjacency maps.
|
|
183
|
+
* @param edge - Edge instance.
|
|
184
|
+
* @returns `true` if both endpoints exist; otherwise `false`.
|
|
185
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
229
186
|
*/
|
|
230
187
|
protected _addEdge(edge: EO): boolean;
|
|
231
188
|
}
|