@raikuxq/alg-ds 1.1.6 → 1.1.7

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