@raikuxq/alg-ds 1.1.6 → 1.2.1
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 +71 -88
- package/lib/app/algorithms/binary-search.d.ts +5 -0
- package/lib/app/algorithms/binary-search.js +27 -0
- package/lib/app/algorithms/factorial.d.ts +9 -0
- package/lib/app/algorithms/factorial.js +17 -0
- package/lib/app/algorithms/fibonacci.d.ts +9 -0
- package/lib/app/algorithms/fibonacci.js +17 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
- package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
- package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
- package/lib/app/algorithms/memoize.d.ts +5 -0
- package/lib/app/algorithms/memoize.js +22 -0
- package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
- package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
- package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/merge-sort.js +61 -0
- package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/quick-sort.js +45 -0
- package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/select-sort.js +20 -0
- package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
- package/lib/app/algorithms/transpose-matrix.js +18 -0
- package/lib/app/constants.d.ts +2 -0
- package/lib/app/constants.js +6 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
- package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
- package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
- package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
- package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
- package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
- package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
- package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
- package/lib/app/data-structures/HashTable/HashTable.js +171 -0
- package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
- package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
- package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
- package/lib/app/data-structures/Queue/Queue.js +85 -0
- package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
- package/lib/app/data-structures/Stack/Stack.js +85 -0
- package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
- package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsFullException.js +28 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
- package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
- package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
- package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
- package/lib/app/exceptions/IsNotFoundException.js +28 -0
- package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
- package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
- package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
- package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalStateException.js +27 -0
- package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
- package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
- package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
- package/lib/app/types/EnumGraphTraversalType.js +10 -0
- package/lib/app/types/EnumGraphType.d.ts +4 -0
- package/lib/app/types/EnumGraphType.js +9 -0
- package/lib/app/types/EnumLinkedListType.d.ts +4 -0
- package/lib/app/types/EnumLinkedListType.js +9 -0
- package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
- package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
- package/lib/app/types/EnumSortType.d.ts +7 -0
- package/lib/app/types/EnumSortType.js +12 -0
- package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
- package/lib/app/types/EnumTreeTraversalType.js +10 -0
- package/lib/app/types/FnCompareTwo.d.ts +1 -0
- package/lib/app/types/FnCompareTwo.js +3 -0
- package/lib/app/types/FnToMemoize.d.ts +1 -0
- package/lib/app/types/FnToMemoize.js +3 -0
- package/lib/app/types/IArrayFacade.d.ts +4 -0
- package/lib/app/types/IArrayFacade.js +3 -0
- package/lib/app/types/IBiDirectIterable.d.ts +5 -0
- package/lib/app/types/IBiDirectIterable.js +3 -0
- package/lib/app/types/IBiDirectIterator.d.ts +11 -0
- package/lib/app/types/IBiDirectIterator.js +3 -0
- package/lib/app/types/IBinaryTree.d.ts +12 -0
- package/lib/app/types/IBinaryTree.js +3 -0
- package/lib/app/types/IConvertableToArray.d.ts +4 -0
- package/lib/app/types/IConvertableToArray.js +3 -0
- package/lib/app/types/IGraph.d.ts +14 -0
- package/lib/app/types/IGraph.js +3 -0
- package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
- package/lib/app/types/IGraphIterationStrategy.js +3 -0
- package/lib/app/types/IGraphIterator.d.ts +11 -0
- package/lib/app/types/IGraphIterator.js +3 -0
- package/lib/app/types/IIterable.d.ts +4 -0
- package/lib/app/types/IIterable.js +3 -0
- package/lib/app/types/IIterator.d.ts +14 -0
- package/lib/app/types/IIterator.js +3 -0
- package/lib/app/types/IKeyValueStorage.d.ts +8 -0
- package/lib/app/types/IKeyValueStorage.js +3 -0
- package/lib/app/types/ILinearStorage.d.ts +11 -0
- package/lib/app/types/ILinearStorage.js +3 -0
- package/lib/app/types/ILinearStorageRA.d.ts +13 -0
- package/lib/app/types/ILinearStorageRA.js +3 -0
- package/lib/app/types/ILinkedList.d.ts +4 -0
- package/lib/app/types/ILinkedList.js +3 -0
- package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
- package/lib/app/types/TypeArrayMatrix.js +3 -0
- package/lib/app/utils.d.ts +37 -0
- package/lib/app/utils.js +114 -0
- package/lib/exports/algorithms.d.ts +16 -0
- package/lib/exports/algorithms.js +36 -0
- package/lib/exports/constants.d.ts +2 -0
- package/lib/exports/constants.js +7 -0
- package/lib/exports/data-structures.d.ts +11 -0
- package/lib/exports/data-structures.js +24 -0
- package/lib/exports/helpers.d.ts +6 -0
- package/lib/exports/helpers.js +14 -0
- package/lib/exports/sorts.d.ts +6 -0
- package/lib/exports/sorts.js +14 -0
- package/lib/exports/types.d.ts +16 -0
- package/lib/exports/types.js +34 -0
- package/lib/exports/utils.d.ts +3 -0
- package/lib/exports/utils.js +14 -0
- package/lib/exports.d.ts +53 -0
- package/lib/exports.js +105 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +5 -0
- package/package.json +11 -6
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBinaryTree = void 0;
|
|
4
|
+
var EnumBinarySearchTreeType_1 = require("../../../types/EnumBinarySearchTreeType");
|
|
5
|
+
var BinarySearchTree_1 = require("../BinarySearchTree/BinarySearchTree");
|
|
6
|
+
var RandBinarySearchTree_1 = require("../RandBinarySearchTree/RandBinarySearchTree");
|
|
7
|
+
/**
|
|
8
|
+
* Returns binary tree by type
|
|
9
|
+
*/
|
|
10
|
+
exports.createBinaryTree = function (type) {
|
|
11
|
+
var binaryTree;
|
|
12
|
+
switch (type) {
|
|
13
|
+
case EnumBinarySearchTreeType_1.EnumBinarySearchTreeType.BST:
|
|
14
|
+
binaryTree = new BinarySearchTree_1.default();
|
|
15
|
+
break;
|
|
16
|
+
case EnumBinarySearchTreeType_1.EnumBinarySearchTreeType.RANDOMIZED_BST:
|
|
17
|
+
binaryTree = new RandBinarySearchTree_1.default();
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
return binaryTree;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQmluYXJ5VHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0JpbmFyeVRyZWUvX2hlbHBlcnMvY3JlYXRlQmluYXJ5VHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRkFBbUY7QUFDbkYseUVBQW9FO0FBQ3BFLHFGQUFnRjtBQUdoRjs7R0FFRztBQUNVLFFBQUEsZ0JBQWdCLEdBQUcsVUFDOUIsSUFBOEI7SUFFOUIsSUFBSSxVQUEwQixDQUFDO0lBRS9CLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxtREFBd0IsQ0FBQyxHQUFHO1lBQy9CLFVBQVUsR0FBRyxJQUFJLDBCQUFnQixFQUFFLENBQUM7WUFDcEMsTUFBTTtRQUNSLEtBQUssbURBQXdCLENBQUMsY0FBYztZQUMxQyxVQUFVLEdBQUcsSUFBSSw4QkFBb0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU07S0FDVDtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyJ9
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL0Fic3RyYWN0R3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw0RUFBdUU7QUFDdkUsc0ZBQWlGO0FBRWpGO0lBSUU7O09BRUc7SUFDSDtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFnQixDQUFDO0lBQzFDLENBQUM7SUFPRDs7T0FFRztJQUNPLDhDQUFzQixHQUFoQztRQUNFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFDQUFhLEdBQXZCLFVBQXdCLElBQU87UUFDN0IsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSw2QkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3Q0FBZ0IsR0FBMUIsVUFBMkIsSUFBTyxFQUFFLEVBQUssRUFBRSxNQUFjO1FBQ3ZELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNPLG9EQUE0QixHQUF0QyxVQUF1QyxjQUFpQjtRQUF4RCxpQkFZQztRQVhDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFFB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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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlyZWN0ZWRHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL0RpcmVjdGVkR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHlDQUFvQztBQUNwQyw0RUFBdUU7QUFFdkU7OztHQUdHO0FBQ0g7SUFBOEMsaUNBQWdCO0lBQzVEOztPQUVHO0lBQ0g7ZUFDRSxpQkFBTztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNPLHNDQUFjLEdBQXhCLFVBQXlCLElBQU8sRUFBRSxFQUFLO1FBQ3JDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMzQixVQUFDLElBQWtCLElBQUssT0FBQSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsRUFBaEQsQ0FBZ0QsQ0FDekUsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksNkJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksK0JBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLLEVBQUUsTUFBZTs7UUFDNUMsSUFBSTtZQUNGLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV4QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3JEO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBTSxJQUFJLEdBQUcsSUFBSSxtQkFBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXpELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ2hEO1NBQ0Y7UUFBQyxXQUFNO1lBQ04sTUFBTSxJQUFJLDZCQUFtQixDQUMzQiw0REFBNEQsQ0FDN0QsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQ0FBVSxHQUFqQixVQUFrQixJQUFPLEVBQUUsRUFBSztRQUM5QixJQUFJO1lBQ0YsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFNLFVBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQU0sY0FBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVEsQ0FBQyxDQUFDO1lBRS9ELElBQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUNqRCxVQUFDLE1BQVMsSUFBSyxPQUFBLFVBQVEsS0FBSyxNQUFNLEVBQW5CLENBQW1CLENBQ25DLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUM5QixVQUFDLElBQWtCLElBQUssT0FBQSxJQUFJLEtBQUssY0FBWSxFQUFyQixDQUFxQixDQUM5QyxDQUFDO1NBQ0g7UUFBQyxXQUFNO1lBQ04sTUFBTSxJQUFJLDZCQUFtQixDQUMzQiw4REFBOEQsQ0FDL0QsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0gsb0JBQUM7QUFBRCxDQUFDLEFBNUVELENBQThDLHVCQUFhLEdBNEUxRCJ9
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvR3JhcGhFZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSDtJQUtFOztPQUVHO0lBQ0gsbUJBQW1CLFVBQWEsRUFBRSxRQUFXLEVBQUUsTUFBVTtRQUFWLHVCQUFBLEVBQUEsVUFBVTtRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQUksaUNBQVU7YUFBZDtZQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLCtCQUFRO2FBQVo7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSw2QkFBTTthQUFWO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RCLENBQUM7YUFFRCxVQUFXLEtBQWE7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQzs7O09BSkE7SUFLSCxnQkFBQztBQUFELENBQUMsQUE3QkQsSUE2QkMifQ==
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|
+
* Undirected graph - data structure where edges with same pair of vertices are equal
|
|
21
|
+
* @example A-B is same as B-A
|
|
22
|
+
*/
|
|
23
|
+
var UndirectedGraph = /** @class */ (function (_super) {
|
|
24
|
+
__extends(UndirectedGraph, _super);
|
|
25
|
+
/**
|
|
26
|
+
* @inheritDoc
|
|
27
|
+
*/
|
|
28
|
+
function UndirectedGraph() {
|
|
29
|
+
return _super.call(this) || this;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @inheritDoc
|
|
33
|
+
*/
|
|
34
|
+
UndirectedGraph.prototype.getEdgeByValue = function (from, to) {
|
|
35
|
+
var edge = this._edges.find(function (edge) {
|
|
36
|
+
return (edge.fromVertex === from && edge.toVertex === to) ||
|
|
37
|
+
(edge.fromVertex === to && edge.toVertex === from);
|
|
38
|
+
});
|
|
39
|
+
if (!edge) {
|
|
40
|
+
throw new IsNotFoundException_1.default("Edge not found");
|
|
41
|
+
}
|
|
42
|
+
return edge;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* @inheritDoc
|
|
46
|
+
*/
|
|
47
|
+
UndirectedGraph.prototype.hasEdge = function (from, to) {
|
|
48
|
+
return Boolean(this._edges.find(function (edge) {
|
|
49
|
+
return ((edge.fromVertex === from && edge.toVertex === to) ||
|
|
50
|
+
(edge.fromVertex === to && edge.toVertex === from));
|
|
51
|
+
}));
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* @inheritDoc
|
|
55
|
+
*/
|
|
56
|
+
UndirectedGraph.prototype.addEdge = function (from, to, weight) {
|
|
57
|
+
var _a, _b;
|
|
58
|
+
try {
|
|
59
|
+
var fromVertex = this.tryFindVertex(from);
|
|
60
|
+
var toVertex = this.tryFindVertex(to);
|
|
61
|
+
/** When edge is already exist, we should only update its weight */
|
|
62
|
+
if (this.hasEdge(fromVertex, toVertex)) {
|
|
63
|
+
if (typeof weight === "number") {
|
|
64
|
+
this.updateEdgeWeight(fromVertex, toVertex, weight);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
var edge = new GraphEdge_1.default(fromVertex, toVertex, weight);
|
|
69
|
+
this._edges.push(edge);
|
|
70
|
+
(_a = this._vertices.get(fromVertex)) === null || _a === void 0 ? void 0 : _a.push(toVertex);
|
|
71
|
+
(_b = this._vertices.get(toVertex)) === null || _b === void 0 ? void 0 : _b.push(fromVertex);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (_c) {
|
|
75
|
+
throw new IsNotFoundException_1.default("Edge cannot be added because one of vertices was not found");
|
|
76
|
+
}
|
|
77
|
+
return this;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* @inheritDoc
|
|
81
|
+
*/
|
|
82
|
+
UndirectedGraph.prototype.removeEdge = function (from, to) {
|
|
83
|
+
try {
|
|
84
|
+
var fromVertex_1 = this.tryFindVertex(from);
|
|
85
|
+
var toVertex_1 = this.tryFindVertex(to);
|
|
86
|
+
var edgeToRemove_1 = this.getEdgeByValue(fromVertex_1, toVertex_1);
|
|
87
|
+
var fromVertexNeighbors = this._vertices.get(fromVertex_1) || [];
|
|
88
|
+
var toVertexNeighbors = this._vertices.get(toVertex_1) || [];
|
|
89
|
+
var fromNewNeighbors = fromVertexNeighbors.filter(function (vertex) { return toVertex_1 !== vertex; });
|
|
90
|
+
var toNewNeighbors = toVertexNeighbors.filter(function (vertex) { return fromVertex_1 !== vertex; });
|
|
91
|
+
this._vertices.set(fromVertex_1, fromNewNeighbors);
|
|
92
|
+
this._vertices.set(toVertex_1, toNewNeighbors);
|
|
93
|
+
this._edges = this._edges.filter(function (edge) { return edge !== edgeToRemove_1; });
|
|
94
|
+
}
|
|
95
|
+
catch (_a) {
|
|
96
|
+
throw new IsNotFoundException_1.default("Edge cannot be removed because one of vertices was not found");
|
|
97
|
+
}
|
|
98
|
+
return this;
|
|
99
|
+
};
|
|
100
|
+
return UndirectedGraph;
|
|
101
|
+
}(AbstractGraph_1.default));
|
|
102
|
+
exports.default = UndirectedGraph;
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kaXJlY3RlZEdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvVW5kaXJlY3RlZEdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUE0QztBQUM1Qyx5Q0FBb0M7QUFDcEMsNEVBQXVFO0FBRXZFOzs7R0FHRztBQUNIO0lBQWdELG1DQUFnQjtJQUM5RDs7T0FFRztJQUNIO2VBQ0UsaUJBQU87SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3Q0FBYyxHQUF4QixVQUF5QixJQUFPLEVBQUUsRUFBSztRQUNyQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDM0IsVUFBQyxJQUFrQjtZQUNqQixPQUFBLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ2xELENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7UUFEbEQsQ0FDa0QsQ0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksNkJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUNBQU8sR0FBZCxVQUFlLElBQU8sRUFBRSxFQUFLO1FBQzNCLE9BQU8sT0FBTyxDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSTtZQUNwQixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztnQkFDbEQsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUUsSUFBSSxJQUFJ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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGraph = void 0;
|
|
4
|
+
var DirectedGraph_1 = require("../DirectedGraph");
|
|
5
|
+
var UndirectedGraph_1 = require("../UndirectedGraph");
|
|
6
|
+
var EnumGraphType_1 = require("../../../types/EnumGraphType");
|
|
7
|
+
/**
|
|
8
|
+
* Returns graph by type
|
|
9
|
+
*/
|
|
10
|
+
exports.createGraph = function (type) {
|
|
11
|
+
var graph;
|
|
12
|
+
switch (type) {
|
|
13
|
+
case EnumGraphType_1.EnumGraphType.Directed:
|
|
14
|
+
graph = new DirectedGraph_1.default();
|
|
15
|
+
break;
|
|
16
|
+
case EnumGraphType_1.EnumGraphType.Undirected:
|
|
17
|
+
graph = new UndirectedGraph_1.default();
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
return graph;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9faGVscGVycy9jcmVhdGVHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrREFBNkM7QUFDN0Msc0RBQWlEO0FBQ2pELDhEQUE2RDtBQUU3RDs7R0FFRztBQUNVLFFBQUEsV0FBVyxHQUFHLFVBQUksSUFBbUI7SUFDaEQsSUFBSSxLQUFnQixDQUFDO0lBRXJCLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyw2QkFBYSxDQUFDLFFBQVE7WUFDekIsS0FBSyxHQUFHLElBQUksdUJBQWEsRUFBRSxDQUFDO1lBQzVCLE1BQU07UUFDUixLQUFLLDZCQUFhLENBQUMsVUFBVTtZQUMzQixLQUFLLEdBQUcsSUFBSSx5QkFBZSxFQUFFLENBQUM7WUFDOUIsTUFBTTtLQUNUO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import { EnumGraphType } from "../../../types/EnumGraphType";
|
|
3
|
+
import { TypeArrayMatrix } from "../../../types/TypeArrayMatrix";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a graph from N*N matrix that contains 1 in case of edge exists or 0 in case it does not
|
|
6
|
+
*/
|
|
7
|
+
export declare const createGraphFromMatrix: <T>(matrix: TypeArrayMatrix, fieldsList: T[], type: EnumGraphType) => IGraph<T>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createGraphFromMatrix = void 0;
|
|
4
|
+
var EnumGraphType_1 = require("../../../types/EnumGraphType");
|
|
5
|
+
var createGraph_1 = require("./createGraph");
|
|
6
|
+
var constants_1 = require("../../../constants");
|
|
7
|
+
var IllegalArgumentException_1 = require("../../../exceptions/base/IllegalArgumentException");
|
|
8
|
+
var utils_1 = require("../../../utils");
|
|
9
|
+
/**
|
|
10
|
+
* Creates a graph from N*N matrix that contains 1 in case of edge exists or 0 in case it does not
|
|
11
|
+
*/
|
|
12
|
+
exports.createGraphFromMatrix = function (matrix, fieldsList, type) {
|
|
13
|
+
if (!utils_1.checkIsArrayMatrix(matrix)) {
|
|
14
|
+
throw new IllegalArgumentException_1.default("Given array is not a matrix");
|
|
15
|
+
}
|
|
16
|
+
var graph = createGraph_1.createGraph(type);
|
|
17
|
+
fieldsList.forEach(function (fieldName) {
|
|
18
|
+
graph.addVertex(fieldName);
|
|
19
|
+
});
|
|
20
|
+
matrix.forEach(function (row, rowIndex) {
|
|
21
|
+
row.forEach(function (col, colIndex) {
|
|
22
|
+
var rowColState = matrix[rowIndex][colIndex];
|
|
23
|
+
var colRowState = matrix[colIndex][rowIndex];
|
|
24
|
+
if (type === EnumGraphType_1.EnumGraphType.Undirected) {
|
|
25
|
+
if (rowColState === constants_1.EDGE_EXISTS_STATE &&
|
|
26
|
+
colRowState === constants_1.EDGE_EXISTS_STATE) {
|
|
27
|
+
graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (type === EnumGraphType_1.EnumGraphType.Directed) {
|
|
31
|
+
if (rowColState === constants_1.EDGE_EXISTS_STATE) {
|
|
32
|
+
graph.addEdge(fieldsList[rowIndex], fieldsList[colIndex]);
|
|
33
|
+
}
|
|
34
|
+
if (colRowState === constants_1.EDGE_EXISTS_STATE) {
|
|
35
|
+
graph.addEdge(fieldsList[colIndex], fieldsList[rowIndex]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
return graph;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlR3JhcGhGcm9tTWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvX2hlbHBlcnMvY3JlYXRlR3JhcGhGcm9tTWF0cml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDhEQUE2RDtBQUU3RCw2Q0FBNEM7QUFDNUMsZ0RBQXVEO0FBQ3ZELDhGQUF5RjtBQUN6Rix3Q0FBb0Q7QUFFcEQ7O0dBRUc7QUFDVSxRQUFBLHFCQUFxQixHQUFHLFVBQ25DLE1BQXVCLEVBQ3ZCLFVBQW9CLEVBQ3BCLElBQW1CO0lBRW5CLElBQUksQ0FBQywwQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksa0NBQXdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNuRTtJQUVELElBQU0sS0FBSyxHQUFjLHlCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFDLFNBQVM7UUFDM0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFrQixFQUFFLFFBQWdCO1FBQ2xELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFXLEVBQUUsUUFBZ0I7WUFDeEMsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUvQyxJQUFJLElBQUksS0FBSyw2QkFBYSxDQUFDLFVBQVUsRUFBRTtnQkFDckMsSUFDRSxXQUFXLEtBQUssNkJBQWlCO29CQUNqQyxXQUFXLEtBQUssNkJBQWlCLEVBQ2pDO29CQUNBLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1lBRUQsSUFBSSxJQUFJLEtBQUssNkJBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ25DLElBQUksV0FBVyxLQUFLLDZCQUFpQixFQUFFO29CQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7Z0JBQ0QsSUFBSSxXQUFXLEtBQUssNkJBQWlCLEVBQUU7b0JBQ3JDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import { EnumGraphType } from "../../../types/EnumGraphType";
|
|
3
|
+
import { EnumRandomGenerationFormat } from "../../../types/EnumRandomGenerationFormat";
|
|
4
|
+
export declare const generateRandomGraph: (verticesCount: number, edgesCount: number, type?: EnumGraphType, format?: EnumRandomGenerationFormat) => IGraph<string>;
|