@raikuxq/alg-ds 1.1.3 → 1.1.4
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/lib/algorithms/binary-search.d.ts +5 -0
- package/lib/algorithms/binary-search.js +27 -0
- package/lib/algorithms/factorial.d.ts +9 -0
- package/lib/algorithms/factorial.js +17 -0
- package/lib/algorithms/fibonacci.d.ts +9 -0
- package/lib/algorithms/fibonacci.js +17 -0
- package/lib/algorithms/memoize.d.ts +5 -0
- package/lib/algorithms/memoize.js +22 -0
- package/lib/algorithms/sorts/bubble-sort.d.ts +9 -0
- package/lib/algorithms/sorts/bubble-sort.js +23 -0
- package/lib/algorithms/sorts/insertion-sort.d.ts +9 -0
- package/lib/algorithms/sorts/insertion-sort.js +25 -0
- package/lib/algorithms/sorts/merge-sort.d.ts +9 -0
- package/lib/algorithms/sorts/merge-sort.js +61 -0
- package/lib/algorithms/sorts/quick-sort.d.ts +9 -0
- package/lib/algorithms/sorts/quick-sort.js +45 -0
- package/lib/algorithms/sorts/select-sort.d.ts +9 -0
- package/lib/algorithms/sorts/select-sort.js +20 -0
- package/lib/algorithms/transpose-matrix.d.ts +5 -0
- package/lib/algorithms/transpose-matrix.js +20 -0
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +6 -0
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
- package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +268 -0
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
- package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +234 -0
- package/lib/data-structures/Graph/AbstractGraph.d.ts +84 -0
- package/lib/data-structures/Graph/AbstractGraph.js +141 -0
- package/lib/data-structures/Graph/DirectedGraph.d.ts +24 -0
- package/lib/data-structures/Graph/DirectedGraph.js +85 -0
- package/lib/data-structures/Graph/GraphEdge.d.ts +16 -0
- package/lib/data-structures/Graph/GraphEdge.js +43 -0
- package/lib/data-structures/Graph/UndirectedGraph.d.ts +28 -0
- package/lib/data-structures/Graph/UndirectedGraph.js +102 -0
- package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +4 -0
- package/lib/data-structures/Graph/demo/generateRandomGraph.js +72 -0
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +35 -0
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +90 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +28 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +70 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +28 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +70 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
- package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +99 -0
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +19 -0
- package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +28 -0
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
- package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +48 -0
- package/lib/data-structures/Graph/searching/hasPath.d.ts +9 -0
- package/lib/data-structures/Graph/searching/hasPath.js +29 -0
- package/lib/data-structures/Graph/searching/shortestPath.d.ts +9 -0
- package/lib/data-structures/Graph/searching/shortestPath.js +29 -0
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +6 -0
- package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +13 -0
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +6 -0
- package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +13 -0
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +6 -0
- package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +13 -0
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +2 -0
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +14 -0
- package/lib/data-structures/HashTable/HashTable.d.ts +73 -0
- package/lib/data-structures/HashTable/HashTable.js +169 -0
- package/lib/data-structures/HashTable/HashTableNode.d.ts +11 -0
- package/lib/data-structures/HashTable/HashTableNode.js +39 -0
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +236 -0
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +150 -0
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
- package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +137 -0
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
- package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
- package/lib/data-structures/LoopedArray/LoopedArray.d.ts +86 -0
- package/lib/data-structures/LoopedArray/LoopedArray.js +161 -0
- package/lib/data-structures/Queue/Queue.d.ts +50 -0
- package/lib/data-structures/Queue/Queue.js +83 -0
- package/lib/data-structures/Stack/Stack.d.ts +50 -0
- package/lib/data-structures/Stack/Stack.js +83 -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/utils.d.ts +3 -0
- package/lib/exports/utils.js +14 -0
- package/lib/exports.d.ts +44 -0
- package/lib/exports.js +89 -0
- package/lib/helpers/createBinaryTree.d.ts +6 -0
- package/lib/helpers/createBinaryTree.js +22 -0
- package/lib/helpers/createGraph.d.ts +6 -0
- package/lib/helpers/createGraph.js +24 -0
- package/lib/helpers/createGraphFromMatrix.d.ts +7 -0
- package/lib/helpers/createGraphFromMatrix.js +37 -0
- package/lib/helpers/createLinkedList.d.ts +3 -0
- package/lib/helpers/createLinkedList.js +21 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +6 -0
- package/lib/types/ArrayMatrix.d.ts +1 -0
- package/lib/types/ArrayMatrix.js +3 -0
- package/lib/types/EnumBinarySearchTreeType.d.ts +4 -0
- package/lib/types/EnumBinarySearchTreeType.js +9 -0
- package/lib/types/EnumGraphType.d.ts +4 -0
- package/lib/types/EnumGraphType.js +9 -0
- package/lib/types/EnumLinkedListType.d.ts +4 -0
- package/lib/types/EnumLinkedListType.js +9 -0
- package/lib/types/EnumRandomGenerationFormat.d.ts +4 -0
- package/lib/types/EnumRandomGenerationFormat.js +9 -0
- package/lib/types/EnumTreeTraversalType.d.ts +5 -0
- package/lib/types/EnumTreeTraversalType.js +10 -0
- package/lib/types/FnCompareTwo.d.ts +1 -0
- package/lib/types/FnCompareTwo.js +3 -0
- package/lib/types/FnToMemoize.d.ts +1 -0
- package/lib/types/FnToMemoize.js +3 -0
- package/lib/types/IArrayFacade.d.ts +4 -0
- package/lib/types/IArrayFacade.js +3 -0
- package/lib/types/IBiDirectIterable.d.ts +5 -0
- package/lib/types/IBiDirectIterable.js +3 -0
- package/lib/types/IBiDirectIterator.d.ts +11 -0
- package/lib/types/IBiDirectIterator.js +3 -0
- package/lib/types/IBinaryTree.d.ts +12 -0
- package/lib/types/IBinaryTree.js +3 -0
- package/lib/types/IConvertableToArray.d.ts +4 -0
- package/lib/types/IConvertableToArray.js +3 -0
- package/lib/types/IGraph.d.ts +14 -0
- package/lib/types/IGraph.js +3 -0
- package/lib/types/IGraphIterationStrategy.d.ts +5 -0
- package/lib/types/IGraphIterationStrategy.js +3 -0
- package/lib/types/IGraphIterator.d.ts +11 -0
- package/lib/types/IGraphIterator.js +3 -0
- package/lib/types/IIterable.d.ts +4 -0
- package/lib/types/IIterable.js +3 -0
- package/lib/types/IIterator.d.ts +14 -0
- package/lib/types/IIterator.js +3 -0
- package/lib/types/IKeyValueStorage.d.ts +8 -0
- package/lib/types/IKeyValueStorage.js +3 -0
- package/lib/types/ILinearStorage.d.ts +11 -0
- package/lib/types/ILinearStorage.js +3 -0
- package/lib/types/ILinearStorageRA.d.ts +13 -0
- package/lib/types/ILinearStorageRA.js +3 -0
- package/lib/types/ILinkedList.d.ts +4 -0
- package/lib/types/ILinkedList.js +3 -0
- package/lib/utils.d.ts +29 -0
- package/lib/utils.js +95 -0
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
/**
|
|
3
|
+
* Get graph adjacency list
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
*
|
|
7
|
+
* Directed graph:
|
|
8
|
+
* - Bob [Maria]
|
|
9
|
+
* - Maria [Bob, John]
|
|
10
|
+
* - John []
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
*
|
|
14
|
+
* Undirected graph:
|
|
15
|
+
* - Bob [Maria]
|
|
16
|
+
* - Maria [Bob, John]
|
|
17
|
+
* - John [Maria]
|
|
18
|
+
**/
|
|
19
|
+
export declare const presenterAdjacencyLists: <T>(graph: IGraph<T>) => Map<T, T[]>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.presenterAdjacencyLists = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Get graph adjacency list
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
*
|
|
9
|
+
* Directed graph:
|
|
10
|
+
* - Bob [Maria]
|
|
11
|
+
* - Maria [Bob, John]
|
|
12
|
+
* - John []
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
*
|
|
16
|
+
* Undirected graph:
|
|
17
|
+
* - Bob [Maria]
|
|
18
|
+
* - Maria [Bob, John]
|
|
19
|
+
* - John [Maria]
|
|
20
|
+
**/
|
|
21
|
+
exports.presenterAdjacencyLists = function (graph) {
|
|
22
|
+
return graph.vertices().reduce(function (map, vertex) {
|
|
23
|
+
var neighbors = graph.getVertexNeighbors(vertex);
|
|
24
|
+
map.set(vertex, neighbors);
|
|
25
|
+
return map;
|
|
26
|
+
}, new Map());
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGVyQWRqYWNlbmN5TGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL3ByZXNlbnRlci9wcmVzZW50ZXJBZGphY2VuY3lMaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7OztJQWdCSTtBQUNTLFFBQUEsdUJBQXVCLEdBQUcsVUFDckMsS0FBZ0I7SUFFaEIsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBcUIsRUFBRSxNQUFTO1FBQzlELElBQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUzQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEIsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import { ArrayMatrix } from "../../../types/ArrayMatrix";
|
|
3
|
+
/**
|
|
4
|
+
* Get graph adjacency matrix N x N
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
*
|
|
8
|
+
* Directed graph:
|
|
9
|
+
* - Bob [Maria]
|
|
10
|
+
* - Maria [Bob, John]
|
|
11
|
+
* - John []
|
|
12
|
+
*
|
|
13
|
+
* Its matrix:
|
|
14
|
+
* | Bob | Maria | John |
|
|
15
|
+
* Bob | 0 | 1 | 0 |
|
|
16
|
+
* Maria | 1 | 0 | 1 |
|
|
17
|
+
* John | 0 | 0 | 0 |
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* Undirected graph:
|
|
22
|
+
* - Bob [Maria]
|
|
23
|
+
* - Maria [Bob, John]
|
|
24
|
+
* - John [Maria]
|
|
25
|
+
*
|
|
26
|
+
* Its matrix:
|
|
27
|
+
* | Bob | Maria | John |
|
|
28
|
+
* Bob | 0 | 1 | 0 |
|
|
29
|
+
* Maria | 1 | 0 | 1 |
|
|
30
|
+
* John | 0 | 1 | 0 |
|
|
31
|
+
*/
|
|
32
|
+
export declare const presenterAdjacencyMatrix: <T>(graph: IGraph<T>) => ArrayMatrix;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.presenterAdjacencyMatrix = void 0;
|
|
4
|
+
var constants_1 = require("../../../constants");
|
|
5
|
+
/**
|
|
6
|
+
* Get graph adjacency matrix N x N
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
*
|
|
10
|
+
* Directed graph:
|
|
11
|
+
* - Bob [Maria]
|
|
12
|
+
* - Maria [Bob, John]
|
|
13
|
+
* - John []
|
|
14
|
+
*
|
|
15
|
+
* Its matrix:
|
|
16
|
+
* | Bob | Maria | John |
|
|
17
|
+
* Bob | 0 | 1 | 0 |
|
|
18
|
+
* Maria | 1 | 0 | 1 |
|
|
19
|
+
* John | 0 | 0 | 0 |
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* Undirected graph:
|
|
24
|
+
* - Bob [Maria]
|
|
25
|
+
* - Maria [Bob, John]
|
|
26
|
+
* - John [Maria]
|
|
27
|
+
*
|
|
28
|
+
* Its matrix:
|
|
29
|
+
* | Bob | Maria | John |
|
|
30
|
+
* Bob | 0 | 1 | 0 |
|
|
31
|
+
* Maria | 1 | 0 | 1 |
|
|
32
|
+
* John | 0 | 1 | 0 |
|
|
33
|
+
*/
|
|
34
|
+
exports.presenterAdjacencyMatrix = function (graph) {
|
|
35
|
+
var vertices = graph.vertices();
|
|
36
|
+
var matrix = new Array(graph.verticesCount());
|
|
37
|
+
vertices.forEach(function (graphVertexRow, rowIndex) {
|
|
38
|
+
matrix[rowIndex] = new Array(graph.verticesCount());
|
|
39
|
+
vertices.forEach(function (graphVertexColumn, columnIndex) {
|
|
40
|
+
var isElementLinked = graph.hasEdge(graphVertexRow, graphVertexColumn);
|
|
41
|
+
matrix[rowIndex][columnIndex] = isElementLinked
|
|
42
|
+
? constants_1.EDGE_EXISTS_STATE
|
|
43
|
+
: constants_1.EDGE_NOT_EXISTS_STATE;
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return matrix;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VudGVyQWRqYWNlbmN5TWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9wcmVzZW50ZXIvcHJlc2VudGVyQWRqYWNlbmN5TWF0cml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGdEQUE4RTtBQUc5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNVLFFBQUEsd0JBQXdCLEdBQUcsVUFBSSxLQUFnQjtJQUMxRCxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsSUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFFaEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFDLGNBQWMsRUFBRSxRQUFRO1FBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUVwRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsaUJBQWlCLEVBQUUsV0FBVztZQUM5QyxJQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxlQUFlO2dCQUM3QyxDQUFDLENBQUMsNkJBQWlCO2dCQUNuQixDQUFDLENBQUMsaUNBQXFCLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import IGraphIterationStrategy from "../../../types/IGraphIterationStrategy";
|
|
3
|
+
/**
|
|
4
|
+
* Check if graph has a path between two vertices
|
|
5
|
+
* @throws when start vertex was not found
|
|
6
|
+
* @throws when end vertex was not found
|
|
7
|
+
* @throws when there is no path between two vertices
|
|
8
|
+
*/
|
|
9
|
+
export declare const hasPath: <T>(graph: IGraph<T>, from: T, to: T, strategy: IGraphIterationStrategy<T>) => boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasPath = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Check if graph has a path between two vertices
|
|
6
|
+
* @throws when start vertex was not found
|
|
7
|
+
* @throws when end vertex was not found
|
|
8
|
+
* @throws when there is no path between two vertices
|
|
9
|
+
*/
|
|
10
|
+
exports.hasPath = function (graph, from, to, strategy) {
|
|
11
|
+
/* Validate */
|
|
12
|
+
if (!graph.hasVertex(from)) {
|
|
13
|
+
throw new Error("Start vertex was not found");
|
|
14
|
+
}
|
|
15
|
+
if (!graph.hasVertex(to)) {
|
|
16
|
+
throw new Error("End vertex was not found");
|
|
17
|
+
}
|
|
18
|
+
var iterator = strategy.createIterator(graph);
|
|
19
|
+
iterator.initIterator(from);
|
|
20
|
+
/* Find target element */
|
|
21
|
+
while (iterator.hasNext()) {
|
|
22
|
+
var next = iterator.next();
|
|
23
|
+
if (next === to) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzUGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvc2VhcmNoaW5nL2hhc1BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUE7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxVQUNyQixLQUFnQixFQUNoQixJQUFPLEVBQ1AsRUFBSyxFQUNMLFFBQW9DO0lBRXBDLGNBQWM7SUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDL0M7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDN0M7SUFFRCxJQUFNLFFBQVEsR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVCLHlCQUF5QjtJQUN6QixPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN6QixJQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFN0IsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import IGraphIterationStrategy from "../../../types/IGraphIterationStrategy";
|
|
3
|
+
/**
|
|
4
|
+
* Find the shortest path between two vertices
|
|
5
|
+
* @throws when start vertex was not found
|
|
6
|
+
* @throws when end vertex was not found
|
|
7
|
+
* @throws when there is no path between two vertices
|
|
8
|
+
*/
|
|
9
|
+
export declare const shortestPath: <T>(graph: IGraph<T>, from: T, to: T, strategy: IGraphIterationStrategy<T>) => T[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shortestPath = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Find the shortest path between two vertices
|
|
6
|
+
* @throws when start vertex was not found
|
|
7
|
+
* @throws when end vertex was not found
|
|
8
|
+
* @throws when there is no path between two vertices
|
|
9
|
+
*/
|
|
10
|
+
exports.shortestPath = function (graph, from, to, strategy) {
|
|
11
|
+
/* Validate */
|
|
12
|
+
if (!graph.hasVertex(from)) {
|
|
13
|
+
throw new Error("Start vertex was not found");
|
|
14
|
+
}
|
|
15
|
+
if (!graph.hasVertex(to)) {
|
|
16
|
+
throw new Error("End vertex was not found");
|
|
17
|
+
}
|
|
18
|
+
var iterator = strategy.createIterator(graph);
|
|
19
|
+
iterator.initIterator(from);
|
|
20
|
+
/* Find target element */
|
|
21
|
+
while (iterator.hasNext()) {
|
|
22
|
+
var next = iterator.next();
|
|
23
|
+
if (next === to) {
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return iterator.getPath(from, to);
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRlc3RQYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9HcmFwaC9zZWFyY2hpbmcvc2hvcnRlc3RQYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOzs7OztHQUtHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsVUFDMUIsS0FBZ0IsRUFDaEIsSUFBTyxFQUNQLEVBQUssRUFDTCxRQUFvQztJQUVwQyxjQUFjO0lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsSUFBTSxRQUFRLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1Qix5QkFBeUI7SUFDekIsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDekIsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdCLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNmLE1BQU07U0FDUDtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import IGraphIterationStrategy from "../../../types/IGraphIterationStrategy";
|
|
2
|
+
import IGraphIterator from "../../../types/IGraphIterator";
|
|
3
|
+
import IGraph from "../../../types/IGraph";
|
|
4
|
+
export default class BFSIterationStrategy<T> implements IGraphIterationStrategy<T> {
|
|
5
|
+
createIterator(graph: IGraph<T>): IGraphIterator<T>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var GraphIteratorBFS_1 = require("../iterator/GraphIteratorBFS");
|
|
4
|
+
var BFSIterationStrategy = /** @class */ (function () {
|
|
5
|
+
function BFSIterationStrategy() {
|
|
6
|
+
}
|
|
7
|
+
BFSIterationStrategy.prototype.createIterator = function (graph) {
|
|
8
|
+
return new GraphIteratorBFS_1.default(graph);
|
|
9
|
+
};
|
|
10
|
+
return BFSIterationStrategy;
|
|
11
|
+
}());
|
|
12
|
+
exports.default = BFSIterationStrategy;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQkZTSXRlcmF0aW9uU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL3N0cmF0ZWd5L0JGU0l0ZXJhdGlvblN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsaUVBQTREO0FBRTVEO0lBQUE7SUFLQSxDQUFDO0lBSFEsNkNBQWMsR0FBckIsVUFBc0IsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLDBCQUFnQixDQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQUFMRCxJQUtDIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import IGraphIterationStrategy from "../../../types/IGraphIterationStrategy";
|
|
3
|
+
import IGraphIterator from "../../../types/IGraphIterator";
|
|
4
|
+
export default class DFSIterationStrategy<T> implements IGraphIterationStrategy<T> {
|
|
5
|
+
createIterator(graph: IGraph<T>): IGraphIterator<T>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var GraphIteratorDFS_1 = require("../iterator/GraphIteratorDFS");
|
|
4
|
+
var DFSIterationStrategy = /** @class */ (function () {
|
|
5
|
+
function DFSIterationStrategy() {
|
|
6
|
+
}
|
|
7
|
+
DFSIterationStrategy.prototype.createIterator = function (graph) {
|
|
8
|
+
return new GraphIteratorDFS_1.default(graph);
|
|
9
|
+
};
|
|
10
|
+
return DFSIterationStrategy;
|
|
11
|
+
}());
|
|
12
|
+
exports.default = DFSIterationStrategy;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiREZTSXRlcmF0aW9uU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0dyYXBoL3N0cmF0ZWd5L0RGU0l0ZXJhdGlvblN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsaUVBQTREO0FBRTVEO0lBQUE7SUFLQSxDQUFDO0lBSFEsNkNBQWMsR0FBckIsVUFBc0IsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLDBCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQUFMRCxJQUtDIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import IGraph from "../../../types/IGraph";
|
|
2
|
+
import IGraphIterationStrategy from "../../../types/IGraphIterationStrategy";
|
|
3
|
+
import IGraphIterator from "../../../types/IGraphIterator";
|
|
4
|
+
export default class DijkstraIterationStrategy<T> implements IGraphIterationStrategy<T> {
|
|
5
|
+
createIterator(graph: IGraph<T>): IGraphIterator<T>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var GraphIteratorDijkstra_1 = require("../iterator/GraphIteratorDijkstra");
|
|
4
|
+
var DijkstraIterationStrategy = /** @class */ (function () {
|
|
5
|
+
function DijkstraIterationStrategy() {
|
|
6
|
+
}
|
|
7
|
+
DijkstraIterationStrategy.prototype.createIterator = function (graph) {
|
|
8
|
+
return new GraphIteratorDijkstra_1.default(graph);
|
|
9
|
+
};
|
|
10
|
+
return DijkstraIterationStrategy;
|
|
11
|
+
}());
|
|
12
|
+
exports.default = DijkstraIterationStrategy;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlqa3N0cmFJdGVyYXRpb25TdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvc3RyYXRlZ3kvRGlqa3N0cmFJdGVyYXRpb25TdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLDJFQUFzRTtBQUV0RTtJQUFBO0lBS0EsQ0FBQztJQUhRLGtEQUFjLEdBQXJCLFVBQXNCLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSwrQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0gsZ0NBQUM7QUFBRCxDQUFDLEFBTEQsSUFLQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transposeDirectedGraph = void 0;
|
|
4
|
+
var createGraphFromMatrix_1 = require("../../../helpers/createGraphFromMatrix");
|
|
5
|
+
var EnumGraphType_1 = require("../../../types/EnumGraphType");
|
|
6
|
+
var presenterAdjacencyMatrix_1 = require("../presenter/presenterAdjacencyMatrix");
|
|
7
|
+
var transpose_matrix_1 = require("../../../algorithms/transpose-matrix");
|
|
8
|
+
exports.transposeDirectedGraph = function (sourceGraph) {
|
|
9
|
+
var verticesList = sourceGraph.vertices();
|
|
10
|
+
var matrix = presenterAdjacencyMatrix_1.presenterAdjacencyMatrix(sourceGraph);
|
|
11
|
+
var transposedMatrix = transpose_matrix_1.transposeMatrix(matrix);
|
|
12
|
+
return createGraphFromMatrix_1.createGraphFromMatrix(transposedMatrix, verticesList, EnumGraphType_1.EnumGraphType.Directed);
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlRGlyZWN0ZWRHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvR3JhcGgvdHJhbnNwb3NpbmcvdHJhbnNwb3NlRGlyZWN0ZWRHcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxnRkFBK0U7QUFDL0UsOERBQTZEO0FBQzdELGtGQUFpRjtBQUNqRix5RUFBdUU7QUFFMUQsUUFBQSxzQkFBc0IsR0FBRyxVQUNwQyxXQUFzQjtJQUV0QixJQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUMsSUFBTSxNQUFNLEdBQUcsbURBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckQsSUFBTSxnQkFBZ0IsR0FBRyxrQ0FBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpELE9BQU8sNkNBQXFCLENBQzFCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osNkJBQWEsQ0FBQyxRQUFRLENBQ3ZCLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import IKeyValueStorage from "../../types/IKeyValueStorage";
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of open addressing hash table using quadratic probing
|
|
4
|
+
*/
|
|
5
|
+
export default class HashTable<T> implements IKeyValueStorage<T> {
|
|
6
|
+
/**
|
|
7
|
+
Constants
|
|
8
|
+
*/
|
|
9
|
+
private static DEFAULT_MAX_CAPACITY;
|
|
10
|
+
private static MAX_LOAD_FACTOR;
|
|
11
|
+
/**
|
|
12
|
+
* State
|
|
13
|
+
*/
|
|
14
|
+
private storage;
|
|
15
|
+
private maxCapacity;
|
|
16
|
+
private storageCapacity;
|
|
17
|
+
/**
|
|
18
|
+
* Given init capacity size will be used
|
|
19
|
+
* @throws when initial capacity value is not larger than 0
|
|
20
|
+
*/
|
|
21
|
+
constructor(initialCapacity?: number);
|
|
22
|
+
/**
|
|
23
|
+
* Main-hash function
|
|
24
|
+
*/
|
|
25
|
+
private hashFn;
|
|
26
|
+
/**
|
|
27
|
+
* Helper-hash function
|
|
28
|
+
*/
|
|
29
|
+
private innerHashFn;
|
|
30
|
+
/**
|
|
31
|
+
* Max capacity will be increased and storage will be overwritten
|
|
32
|
+
*/
|
|
33
|
+
private resizeStorage;
|
|
34
|
+
/**
|
|
35
|
+
* Will find node instance by its key
|
|
36
|
+
* @throws when element does not exist
|
|
37
|
+
*/
|
|
38
|
+
private findNode;
|
|
39
|
+
/**
|
|
40
|
+
* Will create new node instance and set in to storage by index
|
|
41
|
+
*/
|
|
42
|
+
private addNode;
|
|
43
|
+
/**
|
|
44
|
+
* Will create new node instance and set in to storage by index
|
|
45
|
+
*/
|
|
46
|
+
private updateNode;
|
|
47
|
+
/**
|
|
48
|
+
* Will insert item to hash table
|
|
49
|
+
*/
|
|
50
|
+
set(key: string, data: T): void;
|
|
51
|
+
/**
|
|
52
|
+
* Will update item property isDeleted to false
|
|
53
|
+
* @throws when element does not exist
|
|
54
|
+
*/
|
|
55
|
+
delete(key: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Will find item in hash table
|
|
58
|
+
* @throws when element does not exist
|
|
59
|
+
*/
|
|
60
|
+
get(key: string): T;
|
|
61
|
+
/**
|
|
62
|
+
* Check if node with given key exists
|
|
63
|
+
*/
|
|
64
|
+
has(key: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Added elements count
|
|
67
|
+
*/
|
|
68
|
+
length(): number;
|
|
69
|
+
/**
|
|
70
|
+
* Will overwrite storage with array of null elements
|
|
71
|
+
*/
|
|
72
|
+
clear(): void;
|
|
73
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var HashTableNode_1 = require("./HashTableNode");
|
|
4
|
+
/**
|
|
5
|
+
* Implementation of open addressing hash table using quadratic probing
|
|
6
|
+
*/
|
|
7
|
+
var HashTable = /** @class */ (function () {
|
|
8
|
+
/**
|
|
9
|
+
* Given init capacity size will be used
|
|
10
|
+
* @throws when initial capacity value is not larger than 0
|
|
11
|
+
*/
|
|
12
|
+
function HashTable(initialCapacity) {
|
|
13
|
+
if (initialCapacity === void 0) { initialCapacity = HashTable.DEFAULT_MAX_CAPACITY; }
|
|
14
|
+
this.storageCapacity = 0;
|
|
15
|
+
if (initialCapacity <= 0) {
|
|
16
|
+
throw new Error("Size must be larger than 0");
|
|
17
|
+
}
|
|
18
|
+
this.maxCapacity = initialCapacity;
|
|
19
|
+
this.storage = new Array(this.maxCapacity).fill(null);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Main-hash function
|
|
23
|
+
*/
|
|
24
|
+
HashTable.prototype.hashFn = function (key, number) {
|
|
25
|
+
return ((this.innerHashFn(key) + 127 * number + 365 * number * number) %
|
|
26
|
+
this.maxCapacity);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Helper-hash function
|
|
30
|
+
*/
|
|
31
|
+
HashTable.prototype.innerHashFn = function (key) {
|
|
32
|
+
var length = key.length;
|
|
33
|
+
if (length === 0) {
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
var substring = key.substring(0, length - 1);
|
|
37
|
+
var symbol = key.charCodeAt(length - 1);
|
|
38
|
+
return (127 * this.innerHashFn(substring) + symbol) % this.maxCapacity;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Max capacity will be increased and storage will be overwritten
|
|
42
|
+
*/
|
|
43
|
+
HashTable.prototype.resizeStorage = function () {
|
|
44
|
+
this.maxCapacity *= 2;
|
|
45
|
+
var newArray = new Array(this.maxCapacity).fill(null);
|
|
46
|
+
for (var i = 0; i < this.storage.length; i++) {
|
|
47
|
+
var element = this.storage[i];
|
|
48
|
+
if (element != null) {
|
|
49
|
+
for (var j = 0; j < this.maxCapacity; j++) {
|
|
50
|
+
var newIndex = this.hashFn(element.key, j);
|
|
51
|
+
if (newArray[newIndex] == null) {
|
|
52
|
+
newArray[newIndex] = element;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return newArray;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Will find node instance by its key
|
|
62
|
+
* @throws when element does not exist
|
|
63
|
+
*/
|
|
64
|
+
HashTable.prototype.findNode = function (key) {
|
|
65
|
+
for (var i = 0; i < this.maxCapacity; i++) {
|
|
66
|
+
var index = this.hashFn(key, i);
|
|
67
|
+
var node = this.storage[index];
|
|
68
|
+
if ((node === null || node === void 0 ? void 0 : node.key) === key) {
|
|
69
|
+
if (node === null || node === void 0 ? void 0 : node.isDeleted) {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
return node;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
throw new Error("Element does not exist");
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Will create new node instance and set in to storage by index
|
|
79
|
+
*/
|
|
80
|
+
HashTable.prototype.addNode = function (key, data, index) {
|
|
81
|
+
this.storage[index] = new HashTableNode_1.default(key, data);
|
|
82
|
+
this.storageCapacity++;
|
|
83
|
+
var loadFactor = this.storageCapacity / this.maxCapacity;
|
|
84
|
+
if (loadFactor >= HashTable.MAX_LOAD_FACTOR) {
|
|
85
|
+
this.storage = this.resizeStorage();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Will create new node instance and set in to storage by index
|
|
90
|
+
*/
|
|
91
|
+
HashTable.prototype.updateNode = function (data, index) {
|
|
92
|
+
this.storage[index].data = data;
|
|
93
|
+
this.storage[index].isDeleted = false;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Will insert item to hash table
|
|
97
|
+
*/
|
|
98
|
+
HashTable.prototype.set = function (key, data) {
|
|
99
|
+
for (var i = 0; i < this.maxCapacity; i++) {
|
|
100
|
+
var index = this.hashFn(key, i);
|
|
101
|
+
var node = this.storage[index];
|
|
102
|
+
var shouldAddNode = node === null;
|
|
103
|
+
if (shouldAddNode) {
|
|
104
|
+
this.addNode(key, data, index);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
var shouldUpdateNode = node.key === key;
|
|
108
|
+
if (shouldUpdateNode) {
|
|
109
|
+
this.updateNode(data, index);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Will update item property isDeleted to false
|
|
116
|
+
* @throws when element does not exist
|
|
117
|
+
*/
|
|
118
|
+
HashTable.prototype.delete = function (key) {
|
|
119
|
+
for (var i = 0; i < this.maxCapacity; i++) {
|
|
120
|
+
var index = this.hashFn(key, i);
|
|
121
|
+
if (this.storage[index] !== null) {
|
|
122
|
+
this.storage[index].isDeleted = true;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
throw new Error("Element does not exist");
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Will find item in hash table
|
|
130
|
+
* @throws when element does not exist
|
|
131
|
+
*/
|
|
132
|
+
HashTable.prototype.get = function (key) {
|
|
133
|
+
return this.findNode(key).data;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Check if node with given key exists
|
|
137
|
+
*/
|
|
138
|
+
HashTable.prototype.has = function (key) {
|
|
139
|
+
try {
|
|
140
|
+
return Boolean(this.findNode(key));
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Added elements count
|
|
148
|
+
*/
|
|
149
|
+
HashTable.prototype.length = function () {
|
|
150
|
+
var actualItems = this.storage.filter(function (item) {
|
|
151
|
+
return item !== null && !item.isDeleted;
|
|
152
|
+
});
|
|
153
|
+
return actualItems.length;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Will overwrite storage with array of null elements
|
|
157
|
+
*/
|
|
158
|
+
HashTable.prototype.clear = function () {
|
|
159
|
+
this.storage = new Array(HashTable.DEFAULT_MAX_CAPACITY).fill(null);
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
Constants
|
|
163
|
+
*/
|
|
164
|
+
HashTable.DEFAULT_MAX_CAPACITY = 100;
|
|
165
|
+
HashTable.MAX_LOAD_FACTOR = 0.5;
|
|
166
|
+
return HashTable;
|
|
167
|
+
}());
|
|
168
|
+
exports.default = HashTable;
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9IYXNoVGFibGUvSGFzaFRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsaURBQTRDO0FBRTVDOztHQUVHO0FBQ0g7SUFjRTs7O09BR0c7SUFDSCxtQkFBbUIsZUFBd0Q7UUFBeEQsZ0NBQUEsRUFBQSxrQkFBMEIsU0FBUyxDQUFDLG9CQUFvQjtRQU5uRSxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQU8xQixJQUFJLGVBQWUsSUFBSSxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLDBCQUFNLEdBQWQsVUFBZSxHQUFXLEVBQUUsTUFBYztRQUN4QyxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUFXLEdBQW5CLFVBQW9CLEdBQVc7UUFDN0IsSUFBTSxNQUFNLEdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUVsQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELElBQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJ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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default class HashTableNode<T> {
|
|
2
|
+
private readonly _key;
|
|
3
|
+
private _data;
|
|
4
|
+
private _isDeleted;
|
|
5
|
+
constructor(key: string, data: T);
|
|
6
|
+
get data(): T;
|
|
7
|
+
set data(value: T);
|
|
8
|
+
get key(): string;
|
|
9
|
+
get isDeleted(): boolean;
|
|
10
|
+
set isDeleted(value: boolean);
|
|
11
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var HashTableNode = /** @class */ (function () {
|
|
4
|
+
function HashTableNode(key, data) {
|
|
5
|
+
this._key = key;
|
|
6
|
+
this._data = data;
|
|
7
|
+
this._isDeleted = false;
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(HashTableNode.prototype, "data", {
|
|
10
|
+
get: function () {
|
|
11
|
+
return this._data;
|
|
12
|
+
},
|
|
13
|
+
set: function (value) {
|
|
14
|
+
this._data = value;
|
|
15
|
+
},
|
|
16
|
+
enumerable: false,
|
|
17
|
+
configurable: true
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(HashTableNode.prototype, "key", {
|
|
20
|
+
get: function () {
|
|
21
|
+
return this._key;
|
|
22
|
+
},
|
|
23
|
+
enumerable: false,
|
|
24
|
+
configurable: true
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(HashTableNode.prototype, "isDeleted", {
|
|
27
|
+
get: function () {
|
|
28
|
+
return this._isDeleted;
|
|
29
|
+
},
|
|
30
|
+
set: function (value) {
|
|
31
|
+
this._isDeleted = value;
|
|
32
|
+
},
|
|
33
|
+
enumerable: false,
|
|
34
|
+
configurable: true
|
|
35
|
+
});
|
|
36
|
+
return HashTableNode;
|
|
37
|
+
}());
|
|
38
|
+
exports.default = HashTableNode;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaFRhYmxlTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvSGFzaFRhYmxlL0hhc2hUYWJsZU5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTtJQUtFLHVCQUFtQixHQUFXLEVBQUUsSUFBTztRQUNyQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsc0JBQUksK0JBQUk7YUFBUjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO2FBRUQsVUFBUyxLQUFRO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQzs7O09BSkE7SUFNRCxzQkFBSSw4QkFBRzthQUFQO1lBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7OztPQUFBO0lBRUQsc0JBQUksb0NBQVM7YUFBYjtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO2FBRUQsVUFBYyxLQUFjO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUpBO0lBS0gsb0JBQUM7QUFBRCxDQUFDLEFBOUJELElBOEJDIn0=
|