@raikuxq/alg-ds 1.1.5 → 1.1.6
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/README.md +0 -14
- package/package.json +1 -1
- package/lib/algorithms/binary-search.d.ts +0 -5
- package/lib/algorithms/binary-search.js +0 -27
- package/lib/algorithms/factorial.d.ts +0 -9
- package/lib/algorithms/factorial.js +0 -17
- package/lib/algorithms/fibonacci.d.ts +0 -9
- package/lib/algorithms/fibonacci.js +0 -17
- package/lib/algorithms/memoize.d.ts +0 -5
- package/lib/algorithms/memoize.js +0 -22
- package/lib/algorithms/sorts/bubble-sort.d.ts +0 -9
- package/lib/algorithms/sorts/bubble-sort.js +0 -23
- package/lib/algorithms/sorts/insertion-sort.d.ts +0 -9
- package/lib/algorithms/sorts/insertion-sort.js +0 -25
- package/lib/algorithms/sorts/merge-sort.d.ts +0 -9
- package/lib/algorithms/sorts/merge-sort.js +0 -61
- package/lib/algorithms/sorts/quick-sort.d.ts +0 -9
- package/lib/algorithms/sorts/quick-sort.js +0 -45
- package/lib/algorithms/sorts/select-sort.d.ts +0 -9
- package/lib/algorithms/sorts/select-sort.js +0 -20
- package/lib/algorithms/transpose-matrix.d.ts +0 -5
- package/lib/algorithms/transpose-matrix.js +0 -20
- package/lib/constants.d.ts +0 -2
- package/lib/constants.js +0 -6
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +0 -15
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +0 -53
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +0 -60
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +0 -36
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +0 -13
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +0 -59
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +0 -70
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +0 -268
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +0 -16
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +0 -70
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +0 -57
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +0 -234
- package/lib/data-structures/Graph/AbstractGraph.d.ts +0 -84
- package/lib/data-structures/Graph/AbstractGraph.js +0 -141
- package/lib/data-structures/Graph/DirectedGraph.d.ts +0 -24
- package/lib/data-structures/Graph/DirectedGraph.js +0 -85
- package/lib/data-structures/Graph/GraphEdge.d.ts +0 -16
- package/lib/data-structures/Graph/GraphEdge.js +0 -43
- package/lib/data-structures/Graph/UndirectedGraph.d.ts +0 -28
- package/lib/data-structures/Graph/UndirectedGraph.js +0 -102
- package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +0 -4
- package/lib/data-structures/Graph/demo/generateRandomGraph.js +0 -72
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +0 -35
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +0 -90
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +0 -28
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +0 -70
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +0 -28
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +0 -70
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +0 -32
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +0 -99
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +0 -19
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +0 -28
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +0 -32
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +0 -48
- package/lib/data-structures/Graph/searching/hasPath.d.ts +0 -9
- package/lib/data-structures/Graph/searching/hasPath.js +0 -29
- package/lib/data-structures/Graph/searching/shortestPath.d.ts +0 -9
- package/lib/data-structures/Graph/searching/shortestPath.js +0 -29
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +0 -6
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +0 -13
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +0 -2
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +0 -14
- package/lib/data-structures/HashTable/HashTable.d.ts +0 -73
- package/lib/data-structures/HashTable/HashTable.js +0 -169
- package/lib/data-structures/HashTable/HashTableNode.d.ts +0 -11
- package/lib/data-structures/HashTable/HashTableNode.js +0 -39
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +0 -125
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +0 -236
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +0 -20
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +0 -41
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +0 -48
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +0 -150
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +0 -25
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +0 -65
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +0 -52
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +0 -137
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +0 -7
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +0 -29
- package/lib/data-structures/LoopedArray/LoopedArray.d.ts +0 -86
- package/lib/data-structures/LoopedArray/LoopedArray.js +0 -161
- package/lib/data-structures/Queue/Queue.d.ts +0 -50
- package/lib/data-structures/Queue/Queue.js +0 -83
- package/lib/data-structures/Stack/Stack.d.ts +0 -50
- package/lib/data-structures/Stack/Stack.js +0 -83
- package/lib/exports/algorithms.d.ts +0 -16
- package/lib/exports/algorithms.js +0 -36
- package/lib/exports/constants.d.ts +0 -2
- package/lib/exports/constants.js +0 -7
- package/lib/exports/data-structures.d.ts +0 -11
- package/lib/exports/data-structures.js +0 -24
- package/lib/exports/helpers.d.ts +0 -6
- package/lib/exports/helpers.js +0 -14
- package/lib/exports/sorts.d.ts +0 -6
- package/lib/exports/sorts.js +0 -14
- package/lib/exports/utils.d.ts +0 -3
- package/lib/exports/utils.js +0 -14
- package/lib/exports.d.ts +0 -44
- package/lib/exports.js +0 -89
- package/lib/helpers/createBinaryTree.d.ts +0 -6
- package/lib/helpers/createBinaryTree.js +0 -22
- package/lib/helpers/createGraph.d.ts +0 -6
- package/lib/helpers/createGraph.js +0 -24
- package/lib/helpers/createGraphFromMatrix.d.ts +0 -7
- package/lib/helpers/createGraphFromMatrix.js +0 -37
- package/lib/helpers/createLinkedList.d.ts +0 -3
- package/lib/helpers/createLinkedList.js +0 -21
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -6
- package/lib/types/ArrayMatrix.d.ts +0 -1
- package/lib/types/ArrayMatrix.js +0 -3
- package/lib/types/EnumBinarySearchTreeType.d.ts +0 -4
- package/lib/types/EnumBinarySearchTreeType.js +0 -9
- package/lib/types/EnumGraphType.d.ts +0 -4
- package/lib/types/EnumGraphType.js +0 -9
- package/lib/types/EnumLinkedListType.d.ts +0 -4
- package/lib/types/EnumLinkedListType.js +0 -9
- package/lib/types/EnumRandomGenerationFormat.d.ts +0 -4
- package/lib/types/EnumRandomGenerationFormat.js +0 -9
- package/lib/types/EnumTreeTraversalType.d.ts +0 -5
- package/lib/types/EnumTreeTraversalType.js +0 -10
- package/lib/types/FnCompareTwo.d.ts +0 -1
- package/lib/types/FnCompareTwo.js +0 -3
- package/lib/types/FnToMemoize.d.ts +0 -1
- package/lib/types/FnToMemoize.js +0 -3
- package/lib/types/IArrayFacade.d.ts +0 -4
- package/lib/types/IArrayFacade.js +0 -3
- package/lib/types/IBiDirectIterable.d.ts +0 -5
- package/lib/types/IBiDirectIterable.js +0 -3
- package/lib/types/IBiDirectIterator.d.ts +0 -11
- package/lib/types/IBiDirectIterator.js +0 -3
- package/lib/types/IBinaryTree.d.ts +0 -12
- package/lib/types/IBinaryTree.js +0 -3
- package/lib/types/IConvertableToArray.d.ts +0 -4
- package/lib/types/IConvertableToArray.js +0 -3
- package/lib/types/IGraph.d.ts +0 -14
- package/lib/types/IGraph.js +0 -3
- package/lib/types/IGraphIterationStrategy.d.ts +0 -5
- package/lib/types/IGraphIterationStrategy.js +0 -3
- package/lib/types/IGraphIterator.d.ts +0 -11
- package/lib/types/IGraphIterator.js +0 -3
- package/lib/types/IIterable.d.ts +0 -4
- package/lib/types/IIterable.js +0 -3
- package/lib/types/IIterator.d.ts +0 -14
- package/lib/types/IIterator.js +0 -3
- package/lib/types/IKeyValueStorage.d.ts +0 -8
- package/lib/types/IKeyValueStorage.js +0 -3
- package/lib/types/ILinearStorage.d.ts +0 -11
- package/lib/types/ILinearStorage.js +0 -3
- package/lib/types/ILinearStorageRA.d.ts +0 -13
- package/lib/types/ILinearStorageRA.js +0 -3
- package/lib/types/ILinkedList.d.ts +0 -4
- package/lib/types/ILinkedList.js +0 -3
- package/lib/utils.d.ts +0 -29
- package/lib/utils.js +0 -95
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var RandBinarySearchNode_1 = require("./RandBinarySearchNode");
|
|
17
|
-
var BinarySearchTree_1 = require("../BinarySearchTree/BinarySearchTree");
|
|
18
|
-
/**
|
|
19
|
-
* Randomized binary search tree implementation
|
|
20
|
-
*/
|
|
21
|
-
var RandBinarySearchTree = /** @class */ (function (_super) {
|
|
22
|
-
__extends(RandBinarySearchTree, _super);
|
|
23
|
-
/**
|
|
24
|
-
* @inheritDoc
|
|
25
|
-
*/
|
|
26
|
-
function RandBinarySearchTree(fnCompare) {
|
|
27
|
-
var _this = _super.call(this, fnCompare) || this;
|
|
28
|
-
_this._head = null;
|
|
29
|
-
return _this;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Will update node rank by summing left and right subtrees tanks and itself rank (1)
|
|
33
|
-
*/
|
|
34
|
-
RandBinarySearchTree.prototype.updateRank = function (node) {
|
|
35
|
-
var _a, _b;
|
|
36
|
-
node.rank = (((_a = node.right) === null || _a === void 0 ? void 0 : _a.rank) || 0) + (((_b = node.left) === null || _b === void 0 ? void 0 : _b.rank) || 0) + 1;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Will set rank and parent attributes and update tree length
|
|
40
|
-
*/
|
|
41
|
-
RandBinarySearchTree.prototype.addCreatedNode = function (node, parentNode) {
|
|
42
|
-
if (parentNode === void 0) { parentNode = null; }
|
|
43
|
-
node.rank = 1;
|
|
44
|
-
if (parentNode !== null) {
|
|
45
|
-
node.parent = parentNode;
|
|
46
|
-
}
|
|
47
|
-
return node;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Will rotate node to the right side
|
|
51
|
-
*/
|
|
52
|
-
RandBinarySearchTree.prototype.rotateNodeRight = function (node) {
|
|
53
|
-
var pivot = node.left;
|
|
54
|
-
if (pivot === null) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
node.left = pivot.right;
|
|
58
|
-
if (pivot.right !== null) {
|
|
59
|
-
pivot.right.parent = node;
|
|
60
|
-
}
|
|
61
|
-
pivot.parent = node.parent;
|
|
62
|
-
if (node.parent === null) {
|
|
63
|
-
this._head = pivot;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
if (node === node.parent.right) {
|
|
67
|
-
node.parent.right = pivot;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
node.parent.left = pivot;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
pivot.right = node;
|
|
74
|
-
node.parent = pivot;
|
|
75
|
-
this.updateRank(node);
|
|
76
|
-
this.updateRank(pivot);
|
|
77
|
-
};
|
|
78
|
-
/**
|
|
79
|
-
* Will rotate node to the left side
|
|
80
|
-
*/
|
|
81
|
-
RandBinarySearchTree.prototype.rotateNodeLeft = function (node) {
|
|
82
|
-
var pivot = node.right;
|
|
83
|
-
if (pivot === null) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
node.right = pivot.left;
|
|
87
|
-
if (pivot.left !== null) {
|
|
88
|
-
pivot.left.parent = node;
|
|
89
|
-
}
|
|
90
|
-
pivot.parent = node.parent;
|
|
91
|
-
if (node.parent === null) {
|
|
92
|
-
this._head = pivot;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
if (node === node.parent.left) {
|
|
96
|
-
node.parent.left = pivot;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
node.parent.right = pivot;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
pivot.left = node;
|
|
103
|
-
node.parent = pivot;
|
|
104
|
-
this.updateRank(node);
|
|
105
|
-
this.updateRank(pivot);
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* @inheritDoc
|
|
109
|
-
*/
|
|
110
|
-
RandBinarySearchTree.prototype.join = function (treeLeft, treeRight) {
|
|
111
|
-
if (treeLeft === null) {
|
|
112
|
-
return treeRight;
|
|
113
|
-
}
|
|
114
|
-
if (treeRight === null) {
|
|
115
|
-
return treeLeft;
|
|
116
|
-
}
|
|
117
|
-
if (Math.random() < treeLeft.rank / (treeLeft.rank + treeRight.rank)) {
|
|
118
|
-
treeLeft.right = this.join(treeLeft.right, treeRight);
|
|
119
|
-
if (treeLeft.right) {
|
|
120
|
-
this.updateLeftRightParents(treeLeft);
|
|
121
|
-
}
|
|
122
|
-
this.updateRank(treeLeft);
|
|
123
|
-
return treeLeft;
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
treeRight.left = this.join(treeLeft, treeRight.left);
|
|
127
|
-
if (treeRight.left) {
|
|
128
|
-
this.updateLeftRightParents(treeRight);
|
|
129
|
-
}
|
|
130
|
-
this.updateRank(treeRight);
|
|
131
|
-
return treeRight;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
/**
|
|
135
|
-
* @inheritDoc
|
|
136
|
-
*/
|
|
137
|
-
RandBinarySearchTree.prototype.updateLeftRightParents = function (node) {
|
|
138
|
-
_super.prototype.updateLeftRightParents.call(this, node);
|
|
139
|
-
this.updateRank(node);
|
|
140
|
-
};
|
|
141
|
-
/**
|
|
142
|
-
* @inheritDoc
|
|
143
|
-
*/
|
|
144
|
-
RandBinarySearchTree.prototype.insertToRoot = function (createdNode, fromNode) {
|
|
145
|
-
var _this = this;
|
|
146
|
-
var recursiveInsert = function (node) {
|
|
147
|
-
if (_this.compare(node.data, createdNode.data)) {
|
|
148
|
-
if (node.left === null) {
|
|
149
|
-
node.left = _this.addCreatedNode(createdNode, node);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
recursiveInsert(node.left);
|
|
153
|
-
}
|
|
154
|
-
_this.rotateNodeRight(node);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
if (node.right === null) {
|
|
158
|
-
node.right = _this.addCreatedNode(createdNode, node);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
recursiveInsert(node.right);
|
|
162
|
-
}
|
|
163
|
-
_this.rotateNodeLeft(node);
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
if (this._head === null) {
|
|
167
|
-
this._head = this.addCreatedNode(createdNode);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
fromNode ? recursiveInsert(fromNode) : recursiveInsert(this._head);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
/**
|
|
174
|
-
* @inheritDoc
|
|
175
|
-
*/
|
|
176
|
-
RandBinarySearchTree.prototype.insertRandomly = function (createdNode) {
|
|
177
|
-
var _this = this;
|
|
178
|
-
var recursiveInsertRandomly = function (node) {
|
|
179
|
-
var shouldInsertToRoot = Math.random() < 1 / (node.rank + 1);
|
|
180
|
-
if (shouldInsertToRoot) {
|
|
181
|
-
_this.insertToRoot(createdNode, node);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
node.rank = node.rank + 1;
|
|
185
|
-
if (_this.compare(node.data, createdNode.data)) {
|
|
186
|
-
if (node.left === null) {
|
|
187
|
-
node.left = _this.addCreatedNode(createdNode, node);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
recursiveInsertRandomly(node.left);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
if (node.right === null) {
|
|
195
|
-
node.right = _this.addCreatedNode(createdNode, node);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
recursiveInsertRandomly(node.right);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
if (this._head === null) {
|
|
204
|
-
this._head = this.addCreatedNode(createdNode);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
recursiveInsertRandomly(this._head);
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
/**
|
|
211
|
-
* @inheritDoc
|
|
212
|
-
*/
|
|
213
|
-
RandBinarySearchTree.prototype.insert = function (value) {
|
|
214
|
-
if (this.has(value)) {
|
|
215
|
-
throw new Error("Node already exists");
|
|
216
|
-
}
|
|
217
|
-
var createdNode = new RandBinarySearchNode_1.default(value);
|
|
218
|
-
this.insertRandomly(createdNode);
|
|
219
|
-
};
|
|
220
|
-
/**
|
|
221
|
-
* @inheritDoc
|
|
222
|
-
*/
|
|
223
|
-
RandBinarySearchTree.prototype.delete = function (value) {
|
|
224
|
-
_super.prototype.delete.call(this, value);
|
|
225
|
-
this._length = this.length();
|
|
226
|
-
};
|
|
227
|
-
RandBinarySearchTree.prototype.length = function () {
|
|
228
|
-
var _a;
|
|
229
|
-
return ((_a = this._head) === null || _a === void 0 ? void 0 : _a.rank) || 0;
|
|
230
|
-
};
|
|
231
|
-
return RandBinarySearchTree;
|
|
232
|
-
}(BinarySearchTree_1.default));
|
|
233
|
-
exports.default = RandBinarySearchTree;
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZEJpbmFyeVNlYXJjaFRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0JpbmFyeVRyZWUvUmFuZEJpbmFyeVNlYXJjaFRyZWUvUmFuZEJpbmFyeVNlYXJjaFRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsK0RBQTBEO0FBQzFELHlFQUFvRTtBQUVwRTs7R0FFRztBQUNIO0lBQXFELHdDQUFtQjtJQU10RTs7T0FFRztJQUNILDhCQUFtQixTQUEyQjtRQUE5QyxZQUNFLGtCQUFNLFNBQVMsQ0FBQyxTQUVqQjtRQURDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSyx5Q0FBVSxHQUFsQixVQUFtQixJQUE2Qjs7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsSUFBSSxLQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLDZDQUFjLEdBQXRCLFVBQ0UsSUFBNkIsRUFDN0IsVUFBaUQ7UUFBakQsMkJBQUEsRUFBQSxpQkFBaUQ7UUFFakQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNLLDhDQUFlLEdBQXZCLFVBQXdCLElBQTZCO1FBQ25ELElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE9B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
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import GraphEdge from "./GraphEdge";
|
|
2
|
-
export default abstract class AbstractGraph<T> {
|
|
3
|
-
protected _vertices: Map<T, Array<T>>;
|
|
4
|
-
protected _edges: Array<GraphEdge<T>>;
|
|
5
|
-
/**
|
|
6
|
-
* Created empty instance
|
|
7
|
-
*/
|
|
8
|
-
protected constructor();
|
|
9
|
-
/**
|
|
10
|
-
* Find edge by its from and to vertices
|
|
11
|
-
*/
|
|
12
|
-
protected abstract getEdgeByValue(from: T, to: T): GraphEdge<T>;
|
|
13
|
-
/**
|
|
14
|
-
* Get vertices list in array format
|
|
15
|
-
*/
|
|
16
|
-
protected getVerticesArrayFormat(): Array<T>;
|
|
17
|
-
/**
|
|
18
|
-
* Find vertex in vertices list by its data
|
|
19
|
-
* @throws when vertex was not found
|
|
20
|
-
*/
|
|
21
|
-
protected tryFindVertex(data: T): T;
|
|
22
|
-
/**
|
|
23
|
-
* Update edge weight between from and to vertices
|
|
24
|
-
*/
|
|
25
|
-
protected updateEdgeWeight(from: T, to: T, weight: number): void;
|
|
26
|
-
/**
|
|
27
|
-
* Will remove all vertex relations with others vertices
|
|
28
|
-
*/
|
|
29
|
-
protected cascadeRemoveVertexRelations(vertexToRemove: T): void;
|
|
30
|
-
/**
|
|
31
|
-
* Will remove all vertices edges with vertex to remove
|
|
32
|
-
*/
|
|
33
|
-
protected cascadeRemoveVertexEdges(vertexToRemove: T): void;
|
|
34
|
-
/**
|
|
35
|
-
* Get sum of all graph edges
|
|
36
|
-
*/
|
|
37
|
-
weight(): number;
|
|
38
|
-
/**
|
|
39
|
-
* Get array of vertices
|
|
40
|
-
*/
|
|
41
|
-
vertices(): Array<T>;
|
|
42
|
-
/**
|
|
43
|
-
* Get vertices count
|
|
44
|
-
*/
|
|
45
|
-
verticesCount(): number;
|
|
46
|
-
/**
|
|
47
|
-
* Get edges count
|
|
48
|
-
*/
|
|
49
|
-
edgesCount(): number;
|
|
50
|
-
/**
|
|
51
|
-
* Add vertex
|
|
52
|
-
* @throws when vertex is already exists
|
|
53
|
-
*/
|
|
54
|
-
addVertex(data: T): this;
|
|
55
|
-
/**
|
|
56
|
-
* Remove vertex
|
|
57
|
-
* @throws when vertex is already does not exist
|
|
58
|
-
*/
|
|
59
|
-
removeVertex(data: T): this;
|
|
60
|
-
/**
|
|
61
|
-
* Add edge between two vertices
|
|
62
|
-
*/
|
|
63
|
-
abstract addEdge(from: T, to: T, weight?: number): this;
|
|
64
|
-
/**
|
|
65
|
-
* Remove edge between two vertices
|
|
66
|
-
*/
|
|
67
|
-
abstract removeEdge(from: T, to: T): this;
|
|
68
|
-
/**
|
|
69
|
-
* Get vertex neighbors by its data
|
|
70
|
-
*/
|
|
71
|
-
getVertexNeighbors(data: T): Array<T>;
|
|
72
|
-
/**
|
|
73
|
-
* Check if graph has vertex
|
|
74
|
-
*/
|
|
75
|
-
hasVertex(data: T): boolean;
|
|
76
|
-
/**
|
|
77
|
-
* Check if graph has edge between from and to vertices
|
|
78
|
-
*/
|
|
79
|
-
hasEdge(from: T, to: T): boolean;
|
|
80
|
-
/**
|
|
81
|
-
* Get edge weight between from and to vertices
|
|
82
|
-
*/
|
|
83
|
-
getEdgeWeight(from: T, to: T): number;
|
|
84
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var AbstractGraph = /** @class */ (function () {
|
|
4
|
-
/**
|
|
5
|
-
* Created empty instance
|
|
6
|
-
*/
|
|
7
|
-
function AbstractGraph() {
|
|
8
|
-
this._vertices = new Map();
|
|
9
|
-
this._edges = new Array();
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Get vertices list in array format
|
|
13
|
-
*/
|
|
14
|
-
AbstractGraph.prototype.getVerticesArrayFormat = function () {
|
|
15
|
-
return Array.from(this._vertices.keys());
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Find vertex in vertices list by its data
|
|
19
|
-
* @throws when vertex was not found
|
|
20
|
-
*/
|
|
21
|
-
AbstractGraph.prototype.tryFindVertex = function (data) {
|
|
22
|
-
var isExists = this._vertices.has(data);
|
|
23
|
-
if (!isExists) {
|
|
24
|
-
throw new Error("Vertex not found");
|
|
25
|
-
}
|
|
26
|
-
return data;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Update edge weight between from and to vertices
|
|
30
|
-
*/
|
|
31
|
-
AbstractGraph.prototype.updateEdgeWeight = function (from, to, weight) {
|
|
32
|
-
var edge = this.getEdgeByValue(from, to);
|
|
33
|
-
edge.weight = weight;
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Will remove all vertex relations with others vertices
|
|
37
|
-
*/
|
|
38
|
-
AbstractGraph.prototype.cascadeRemoveVertexRelations = function (vertexToRemove) {
|
|
39
|
-
var _this = this;
|
|
40
|
-
this.getVerticesArrayFormat().forEach(function (neighbor) {
|
|
41
|
-
var neighborVertexNeighbors = _this._vertices.get(neighbor);
|
|
42
|
-
if (neighborVertexNeighbors) {
|
|
43
|
-
var neighborVertexFilteredNeighbors = neighborVertexNeighbors.filter(function (newNeighbor) { return newNeighbor !== vertexToRemove; });
|
|
44
|
-
_this._vertices.set(neighbor, neighborVertexFilteredNeighbors);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Will remove all vertices edges with vertex to remove
|
|
50
|
-
*/
|
|
51
|
-
AbstractGraph.prototype.cascadeRemoveVertexEdges = function (vertexToRemove) {
|
|
52
|
-
this._edges = this._edges.filter(function (edge) {
|
|
53
|
-
var shouldBeDeleted = edge.toVertex === vertexToRemove || edge.fromVertex === vertexToRemove;
|
|
54
|
-
return !shouldBeDeleted;
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
/**
|
|
58
|
-
* Get sum of all graph edges
|
|
59
|
-
*/
|
|
60
|
-
AbstractGraph.prototype.weight = function () {
|
|
61
|
-
return this._edges.reduce(function (acc, edge) { return acc + edge.weight; }, 0);
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Get array of vertices
|
|
65
|
-
*/
|
|
66
|
-
AbstractGraph.prototype.vertices = function () {
|
|
67
|
-
return this.getVerticesArrayFormat().map(function (vertex) { return vertex; });
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Get vertices count
|
|
71
|
-
*/
|
|
72
|
-
AbstractGraph.prototype.verticesCount = function () {
|
|
73
|
-
return this.vertices().length;
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Get edges count
|
|
77
|
-
*/
|
|
78
|
-
AbstractGraph.prototype.edgesCount = function () {
|
|
79
|
-
return this._edges.length;
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Add vertex
|
|
83
|
-
* @throws when vertex is already exists
|
|
84
|
-
*/
|
|
85
|
-
AbstractGraph.prototype.addVertex = function (data) {
|
|
86
|
-
if (this.hasVertex(data)) {
|
|
87
|
-
throw new Error("Vertex is already exist");
|
|
88
|
-
}
|
|
89
|
-
this._vertices.set(data, new Array());
|
|
90
|
-
return this;
|
|
91
|
-
};
|
|
92
|
-
/**
|
|
93
|
-
* Remove vertex
|
|
94
|
-
* @throws when vertex is already does not exist
|
|
95
|
-
*/
|
|
96
|
-
AbstractGraph.prototype.removeVertex = function (data) {
|
|
97
|
-
try {
|
|
98
|
-
var vertexToRemove = this.tryFindVertex(data);
|
|
99
|
-
this.cascadeRemoveVertexEdges(vertexToRemove);
|
|
100
|
-
this.cascadeRemoveVertexRelations(vertexToRemove);
|
|
101
|
-
this._vertices.delete(vertexToRemove);
|
|
102
|
-
}
|
|
103
|
-
catch (e) {
|
|
104
|
-
throw new Error("Vertex does not exist already");
|
|
105
|
-
}
|
|
106
|
-
return this;
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* Get vertex neighbors by its data
|
|
110
|
-
*/
|
|
111
|
-
AbstractGraph.prototype.getVertexNeighbors = function (data) {
|
|
112
|
-
var vertex = this.tryFindVertex(data);
|
|
113
|
-
return this._vertices.get(vertex) || [];
|
|
114
|
-
};
|
|
115
|
-
/**
|
|
116
|
-
* Check if graph has vertex
|
|
117
|
-
*/
|
|
118
|
-
AbstractGraph.prototype.hasVertex = function (data) {
|
|
119
|
-
return this._vertices.has(data);
|
|
120
|
-
};
|
|
121
|
-
/**
|
|
122
|
-
* Check if graph has edge between from and to vertices
|
|
123
|
-
*/
|
|
124
|
-
AbstractGraph.prototype.hasEdge = function (from, to) {
|
|
125
|
-
return Boolean(this._edges.find(function (edge) {
|
|
126
|
-
return edge.fromVertex === from && edge.toVertex === to;
|
|
127
|
-
}));
|
|
128
|
-
};
|
|
129
|
-
/**
|
|
130
|
-
* Get edge weight between from and to vertices
|
|
131
|
-
*/
|
|
132
|
-
AbstractGraph.prototype.getEdgeWeight = function (from, to) {
|
|
133
|
-
var fromVertex = this.tryFindVertex(from);
|
|
134
|
-
var toVertex = this.tryFindVertex(to);
|
|
135
|
-
var edge = this.getEdgeByValue(fromVertex, toVertex);
|
|
136
|
-
return edge.weight;
|
|
137
|
-
};
|
|
138
|
-
return AbstractGraph;
|
|
139
|
-
}());
|
|
140
|
-
exports.default = AbstractGraph;
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvQWJzdHJhY3RHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0lBSUU7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO0lBQzFDLENBQUM7SUFPRDs7T0FFRztJQUNPLDhDQUFzQixHQUFoQztRQUNFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFDQUFhLEdBQXZCLFVBQXdCLElBQU87UUFDN0IsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08sd0NBQWdCLEdBQTFCLFVBQTJCLElBQU8sRUFBRSxFQUFLLEVBQUUsTUFBYztRQUN2RCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxvREFBNEIsR0FBdEMsVUFBdUMsY0FBaUI7UUFBeEQsaUJBWUM7UUFYQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFXO1lBQ2hELElBQU0sdUJBQXVCLEdBQUcsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0QsSUFBSSx1QkFBdUIsRUFBRTtnQkFDM0IsSUFBTSwrQkFBK0IsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQ3BFLFVBQUMsV0FBYyxJQUFLLE9BQUEsV0FBVyxLQUFLLGNBQWMsRUFBOUIsQ0FBOEIsQ0FDbkQsQ0FBQztnQkFFRixLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQzthQUMvRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0RBQXdCLEdBQWxDLFVBQW1DLGNBQWlCO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBQyxJQUFrQjtZQUNsRCxJQUFNLGVBQWUsR0FDbkIsSUFBSSxDQUFDLFFBQVEsS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUM7WUFFekUsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLDhCQUFNLEdBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUN2QixVQUFDLEdBQVcsRUFBRSxJQUFrQixJQUFLLE9BQUEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQWpCLENBQWlCLEVBQ3RELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0NBQVEsR0FBZjtRQUNFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBUyxJQUFLLE9BQUEsTUFBTSxFQUFOLENBQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLHFDQUFhLEdBQXBCO1FBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGtDQUFVLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUNBQVMsR0FBaEIsVUFBaUIsSUFBTztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFLLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQ0FBWSxHQUFuQixVQUFvQixJQUFPO1FBQ3pCLElBQUk7WUFDRixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVlEOztPQUVHO0lBQ0ksMENBQWtCLEdBQXpCLFVBQTBCLElBQU87UUFDL0IsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQ0FBUyxHQUFoQixVQUFpQixJQUFPO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksK0JBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLE9BQU8sT0FBTyxDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtZQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQ0FBYSxHQUFwQixVQUFxQixJQUFPLEVBQUUsRUFBSztRQUNqQyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUMsQUExTEQsSUEwTEMifQ==
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import AbstractGraph from "./AbstractGraph";
|
|
2
|
-
import GraphEdge from "./GraphEdge";
|
|
3
|
-
/**
|
|
4
|
-
* Directed graph - data structure where edges with same pair of vertices are not equal
|
|
5
|
-
* @example A-B is not the same as B-A
|
|
6
|
-
*/
|
|
7
|
-
export default class DirectedGraph<T> extends AbstractGraph<T> {
|
|
8
|
-
/**
|
|
9
|
-
* @inheritDoc
|
|
10
|
-
*/
|
|
11
|
-
constructor();
|
|
12
|
-
/**
|
|
13
|
-
* @inheritDoc
|
|
14
|
-
*/
|
|
15
|
-
protected getEdgeByValue(from: T, to: T): GraphEdge<T>;
|
|
16
|
-
/**
|
|
17
|
-
* @inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
addEdge(from: T, to: T, weight?: number): this;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
removeEdge(from: T, to: T): this;
|
|
24
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
var AbstractGraph_1 = require("./AbstractGraph");
|
|
17
|
-
var GraphEdge_1 = require("./GraphEdge");
|
|
18
|
-
/**
|
|
19
|
-
* Directed graph - data structure where edges with same pair of vertices are not equal
|
|
20
|
-
* @example A-B is not the same as B-A
|
|
21
|
-
*/
|
|
22
|
-
var DirectedGraph = /** @class */ (function (_super) {
|
|
23
|
-
__extends(DirectedGraph, _super);
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
function DirectedGraph() {
|
|
28
|
-
return _super.call(this) || this;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @inheritDoc
|
|
32
|
-
*/
|
|
33
|
-
DirectedGraph.prototype.getEdgeByValue = function (from, to) {
|
|
34
|
-
var edge = this._edges.find(function (edge) { return edge.fromVertex === from && edge.toVertex === to; });
|
|
35
|
-
if (!edge) {
|
|
36
|
-
throw new Error("Edge not found");
|
|
37
|
-
}
|
|
38
|
-
return edge;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* @inheritDoc
|
|
42
|
-
*/
|
|
43
|
-
DirectedGraph.prototype.addEdge = function (from, to, weight) {
|
|
44
|
-
var _a;
|
|
45
|
-
try {
|
|
46
|
-
var fromVertex = this.tryFindVertex(from);
|
|
47
|
-
var toVertex = this.tryFindVertex(to);
|
|
48
|
-
if (this.hasEdge(fromVertex, toVertex)) {
|
|
49
|
-
if (typeof weight === "number") {
|
|
50
|
-
this.updateEdgeWeight(fromVertex, toVertex, weight);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
var edge = new GraphEdge_1.default(fromVertex, toVertex, weight);
|
|
55
|
-
this._edges.push(edge);
|
|
56
|
-
(_a = this._vertices.get(fromVertex)) === null || _a === void 0 ? void 0 : _a.push(toVertex);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch (_b) {
|
|
60
|
-
throw new Error("Edge cannot be added because one of vertices was not found");
|
|
61
|
-
}
|
|
62
|
-
return this;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* @inheritDoc
|
|
66
|
-
*/
|
|
67
|
-
DirectedGraph.prototype.removeEdge = function (from, to) {
|
|
68
|
-
try {
|
|
69
|
-
var fromVertex = this.tryFindVertex(from);
|
|
70
|
-
var toVertex_1 = this.tryFindVertex(to);
|
|
71
|
-
var edgeToRemove_1 = this.getEdgeByValue(fromVertex, toVertex_1);
|
|
72
|
-
var fromVertexNeighbors = this._vertices.get(fromVertex) || [];
|
|
73
|
-
var fromNewNeighbors = fromVertexNeighbors.filter(function (vertex) { return toVertex_1 !== vertex; });
|
|
74
|
-
this._vertices.set(fromVertex, fromNewNeighbors);
|
|
75
|
-
this._edges = this._edges.filter(function (edge) { return edge !== edgeToRemove_1; });
|
|
76
|
-
}
|
|
77
|
-
catch (_a) {
|
|
78
|
-
throw new Error("Edge cannot be removed because one of vertices was not found");
|
|
79
|
-
}
|
|
80
|
-
return this;
|
|
81
|
-
};
|
|
82
|
-
return DirectedGraph;
|
|
83
|
-
}(AbstractGraph_1.default));
|
|
84
|
-
exports.default = DirectedGraph;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlyZWN0ZWRHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvRGlyZWN0ZWRHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMseUNBQW9DO0FBRXBDOzs7R0FHRztBQUNIO0lBQThDLGlDQUFnQjtJQUM1RDs7T0FFRztJQUNIO2VBQ0UsaUJBQU87SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxzQ0FBYyxHQUF4QixVQUF5QixJQUFPLEVBQUUsRUFBSztRQUNyQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDM0IsVUFBQyxJQUFrQixJQUFLLE9BQUEsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQWhELENBQWdELENBQ3pFLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSwrQkFBTyxHQUFkLFVBQWUsSUFBTyxFQUFFLEVBQUssRUFBRSxNQUFlOztRQUM1QyxJQUFJO1lBQ0YsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXhDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO29CQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDckQ7YUFDRjtpQkFBTTtnQkFDTCxJQUFNLElBQUksR0FBRyxJQUFJLG1CQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLDBDQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDaEQ7U0FDRjtRQUFDLFdBQU07WUFDTixNQUFNLElBQUksS0FBSyxDQUNiLDREQUE0RCxDQUM3RCxDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLGtDQUFVLEdBQWpCLFVBQWtCLElBQU8sRUFBRSxFQUFLO1FBQzlCLElBQUk7WUFDRixJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQU0sVUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBTSxjQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBUSxDQUFDLENBQUM7WUFFL0QsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakUsSUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQ2pELFVBQUMsTUFBUyxJQUFLLE9BQUEsVUFBUSxLQUFLLE1BQU0sRUFBbkIsQ0FBbUIsQ0FDbkMsQ0FBQztZQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQzlCLFVBQUMsSUFBa0IsSUFBSyxPQUFBLElBQUksS0FBSyxjQUFZLEVBQXJCLENBQXFCLENBQzlDLENBQUM7U0FDSDtRQUFDLFdBQU07WUFDTixNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUMvRCxDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCxvQkFBQztBQUFELENBQUMsQUE1RUQsQ0FBOEMsdUJBQWEsR0E0RTFEIn0=
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph edge between two vertices
|
|
3
|
-
*/
|
|
4
|
-
export default class GraphEdge<T> {
|
|
5
|
-
private readonly _fromVertex;
|
|
6
|
-
private readonly _toVertex;
|
|
7
|
-
private _weight;
|
|
8
|
-
/**
|
|
9
|
-
* Create instance with linked "from" and "to" vertices
|
|
10
|
-
*/
|
|
11
|
-
constructor(fromVertex: T, toVertex: T, weight?: number);
|
|
12
|
-
get fromVertex(): T;
|
|
13
|
-
get toVertex(): T;
|
|
14
|
-
get weight(): number;
|
|
15
|
-
set weight(value: number);
|
|
16
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* Graph edge between two vertices
|
|
5
|
-
*/
|
|
6
|
-
var GraphEdge = /** @class */ (function () {
|
|
7
|
-
/**
|
|
8
|
-
* Create instance with linked "from" and "to" vertices
|
|
9
|
-
*/
|
|
10
|
-
function GraphEdge(fromVertex, toVertex, weight) {
|
|
11
|
-
if (weight === void 0) { weight = 0; }
|
|
12
|
-
this._fromVertex = fromVertex;
|
|
13
|
-
this._toVertex = toVertex;
|
|
14
|
-
this._weight = weight;
|
|
15
|
-
}
|
|
16
|
-
Object.defineProperty(GraphEdge.prototype, "fromVertex", {
|
|
17
|
-
get: function () {
|
|
18
|
-
return this._fromVertex;
|
|
19
|
-
},
|
|
20
|
-
enumerable: false,
|
|
21
|
-
configurable: true
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(GraphEdge.prototype, "toVertex", {
|
|
24
|
-
get: function () {
|
|
25
|
-
return this._toVertex;
|
|
26
|
-
},
|
|
27
|
-
enumerable: false,
|
|
28
|
-
configurable: true
|
|
29
|
-
});
|
|
30
|
-
Object.defineProperty(GraphEdge.prototype, "weight", {
|
|
31
|
-
get: function () {
|
|
32
|
-
return this._weight;
|
|
33
|
-
},
|
|
34
|
-
set: function (value) {
|
|
35
|
-
this._weight = value;
|
|
36
|
-
},
|
|
37
|
-
enumerable: false,
|
|
38
|
-
configurable: true
|
|
39
|
-
});
|
|
40
|
-
return GraphEdge;
|
|
41
|
-
}());
|
|
42
|
-
exports.default = GraphEdge;
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9HcmFwaEVkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNIO0lBS0U7O09BRUc7SUFDSCxtQkFBbUIsVUFBYSxFQUFFLFFBQVcsRUFBRSxNQUFVO1FBQVYsdUJBQUEsRUFBQSxVQUFVO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQkFBSSxpQ0FBVTthQUFkO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0JBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDZCQUFNO2FBQVY7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzthQUVELFVBQVcsS0FBYTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDOzs7T0FKQTtJQUtILGdCQUFDO0FBQUQsQ0FBQyxBQTdCRCxJQTZCQyJ9
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import AbstractGraph from "./AbstractGraph";
|
|
2
|
-
import GraphEdge from "./GraphEdge";
|
|
3
|
-
/**
|
|
4
|
-
* Undirected graph - data structure where edges with same pair of vertices are equal
|
|
5
|
-
* @example A-B is same as B-A
|
|
6
|
-
*/
|
|
7
|
-
export default class UndirectedGraph<T> extends AbstractGraph<T> {
|
|
8
|
-
/**
|
|
9
|
-
* @inheritDoc
|
|
10
|
-
*/
|
|
11
|
-
constructor();
|
|
12
|
-
/**
|
|
13
|
-
* @inheritDoc
|
|
14
|
-
*/
|
|
15
|
-
protected getEdgeByValue(from: T, to: T): GraphEdge<T>;
|
|
16
|
-
/**
|
|
17
|
-
* @inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
hasEdge(from: T, to: T): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* @inheritDoc
|
|
22
|
-
*/
|
|
23
|
-
addEdge(from: T, to: T, weight?: number): this;
|
|
24
|
-
/**
|
|
25
|
-
* @inheritDoc
|
|
26
|
-
*/
|
|
27
|
-
removeEdge(from: T, to: T): this;
|
|
28
|
-
}
|