@raikuxq/alg-ds 1.1.2 → 1.1.5

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 (257) hide show
  1. package/README.md +26 -2
  2. package/lib/algorithms/binary-search.d.ts +5 -0
  3. package/lib/algorithms/binary-search.js +27 -0
  4. package/lib/algorithms/factorial.d.ts +9 -0
  5. package/lib/algorithms/factorial.js +17 -0
  6. package/lib/algorithms/fibonacci.d.ts +9 -0
  7. package/lib/algorithms/fibonacci.js +17 -0
  8. package/lib/algorithms/memoize.d.ts +5 -0
  9. package/lib/algorithms/memoize.js +22 -0
  10. package/lib/algorithms/sorts/bubble-sort.d.ts +9 -0
  11. package/lib/algorithms/sorts/bubble-sort.js +23 -0
  12. package/lib/algorithms/sorts/insertion-sort.d.ts +9 -0
  13. package/lib/algorithms/sorts/insertion-sort.js +25 -0
  14. package/lib/algorithms/sorts/merge-sort.d.ts +9 -0
  15. package/lib/algorithms/sorts/merge-sort.js +61 -0
  16. package/lib/algorithms/sorts/quick-sort.d.ts +9 -0
  17. package/lib/algorithms/sorts/quick-sort.js +45 -0
  18. package/lib/algorithms/sorts/select-sort.d.ts +9 -0
  19. package/lib/algorithms/sorts/select-sort.js +20 -0
  20. package/lib/algorithms/transpose-matrix.d.ts +5 -0
  21. package/lib/algorithms/transpose-matrix.js +20 -0
  22. package/lib/constants.d.ts +2 -0
  23. package/lib/constants.js +6 -0
  24. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  25. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  26. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  27. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  28. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  29. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  30. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  31. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +268 -0
  32. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  33. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  34. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  35. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +234 -0
  36. package/lib/data-structures/Graph/AbstractGraph.d.ts +84 -0
  37. package/lib/data-structures/Graph/AbstractGraph.js +141 -0
  38. package/lib/data-structures/Graph/DirectedGraph.d.ts +24 -0
  39. package/lib/data-structures/Graph/DirectedGraph.js +85 -0
  40. package/lib/data-structures/Graph/GraphEdge.d.ts +16 -0
  41. package/lib/data-structures/Graph/GraphEdge.js +43 -0
  42. package/lib/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  43. package/lib/data-structures/Graph/UndirectedGraph.js +102 -0
  44. package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +4 -0
  45. package/lib/data-structures/Graph/demo/generateRandomGraph.js +72 -0
  46. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +35 -0
  47. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +90 -0
  48. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +28 -0
  49. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +70 -0
  50. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +28 -0
  51. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +70 -0
  52. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  53. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +99 -0
  54. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  55. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +28 -0
  56. package/{src/data-structures/Graph/presenter/presenterAdjacencyMatrix.ts → lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts} +32 -51
  57. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +48 -0
  58. package/lib/data-structures/Graph/searching/hasPath.d.ts +9 -0
  59. package/lib/data-structures/Graph/searching/hasPath.js +29 -0
  60. package/lib/data-structures/Graph/searching/shortestPath.d.ts +9 -0
  61. package/lib/data-structures/Graph/searching/shortestPath.js +29 -0
  62. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +6 -0
  63. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +13 -0
  64. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +6 -0
  65. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +13 -0
  66. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +6 -0
  67. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +13 -0
  68. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +2 -0
  69. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +14 -0
  70. package/lib/data-structures/HashTable/HashTable.d.ts +73 -0
  71. package/lib/data-structures/HashTable/HashTable.js +169 -0
  72. package/lib/data-structures/HashTable/HashTableNode.d.ts +11 -0
  73. package/lib/data-structures/HashTable/HashTableNode.js +39 -0
  74. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  75. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +236 -0
  76. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  77. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  78. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  79. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +150 -0
  80. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  81. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  82. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  83. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +137 -0
  84. package/{src/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.ts → lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts} +7 -10
  85. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  86. package/lib/data-structures/LoopedArray/LoopedArray.d.ts +86 -0
  87. package/lib/data-structures/LoopedArray/LoopedArray.js +161 -0
  88. package/lib/data-structures/Queue/Queue.d.ts +50 -0
  89. package/lib/data-structures/Queue/Queue.js +83 -0
  90. package/lib/data-structures/Stack/Stack.d.ts +50 -0
  91. package/lib/data-structures/Stack/Stack.js +83 -0
  92. package/lib/exports/algorithms.d.ts +16 -0
  93. package/lib/exports/algorithms.js +36 -0
  94. package/lib/exports/constants.d.ts +2 -0
  95. package/lib/exports/constants.js +7 -0
  96. package/lib/exports/data-structures.d.ts +11 -0
  97. package/lib/exports/data-structures.js +24 -0
  98. package/lib/exports/helpers.d.ts +6 -0
  99. package/lib/exports/helpers.js +14 -0
  100. package/lib/exports/sorts.d.ts +6 -0
  101. package/lib/exports/sorts.js +14 -0
  102. package/lib/exports/utils.d.ts +3 -0
  103. package/lib/exports/utils.js +14 -0
  104. package/lib/exports.d.ts +44 -0
  105. package/lib/exports.js +89 -0
  106. package/lib/helpers/createBinaryTree.d.ts +6 -0
  107. package/lib/helpers/createBinaryTree.js +22 -0
  108. package/lib/helpers/createGraph.d.ts +6 -0
  109. package/lib/helpers/createGraph.js +24 -0
  110. package/lib/helpers/createGraphFromMatrix.d.ts +7 -0
  111. package/lib/helpers/createGraphFromMatrix.js +37 -0
  112. package/lib/helpers/createLinkedList.d.ts +3 -0
  113. package/lib/helpers/createLinkedList.js +21 -0
  114. package/lib/index.d.ts +3 -0
  115. package/lib/index.js +6 -0
  116. package/lib/types/ArrayMatrix.d.ts +1 -0
  117. package/lib/types/ArrayMatrix.js +3 -0
  118. package/lib/types/EnumBinarySearchTreeType.d.ts +4 -0
  119. package/lib/types/EnumBinarySearchTreeType.js +9 -0
  120. package/lib/types/EnumGraphType.d.ts +4 -0
  121. package/lib/types/EnumGraphType.js +9 -0
  122. package/lib/types/EnumLinkedListType.d.ts +4 -0
  123. package/lib/types/EnumLinkedListType.js +9 -0
  124. package/lib/types/EnumRandomGenerationFormat.d.ts +4 -0
  125. package/lib/types/EnumRandomGenerationFormat.js +9 -0
  126. package/lib/types/EnumTreeTraversalType.d.ts +5 -0
  127. package/lib/types/EnumTreeTraversalType.js +10 -0
  128. package/lib/types/FnCompareTwo.d.ts +1 -0
  129. package/lib/types/FnCompareTwo.js +3 -0
  130. package/lib/types/FnToMemoize.d.ts +1 -0
  131. package/lib/types/FnToMemoize.js +3 -0
  132. package/{src/types/ILinkedList.ts → lib/types/IArrayFacade.d.ts} +4 -6
  133. package/lib/types/IArrayFacade.js +3 -0
  134. package/{src/types/IBiDirectIterable.ts → lib/types/IBiDirectIterable.d.ts} +5 -6
  135. package/lib/types/IBiDirectIterable.js +3 -0
  136. package/lib/types/IBiDirectIterator.d.ts +11 -0
  137. package/lib/types/IBiDirectIterator.js +3 -0
  138. package/lib/types/IBinaryTree.d.ts +12 -0
  139. package/lib/types/IBinaryTree.js +3 -0
  140. package/lib/types/IConvertableToArray.d.ts +4 -0
  141. package/lib/types/IConvertableToArray.js +3 -0
  142. package/lib/types/IGraph.d.ts +14 -0
  143. package/lib/types/IGraph.js +3 -0
  144. package/{src/types/IGraphIterationStrategy.ts → lib/types/IGraphIterationStrategy.d.ts} +5 -6
  145. package/lib/types/IGraphIterationStrategy.js +3 -0
  146. package/lib/types/IGraphIterator.d.ts +11 -0
  147. package/lib/types/IGraphIterator.js +3 -0
  148. package/{src/types/IIterable.ts → lib/types/IIterable.d.ts} +4 -5
  149. package/lib/types/IIterable.js +3 -0
  150. package/lib/types/IIterator.d.ts +14 -0
  151. package/lib/types/IIterator.js +3 -0
  152. package/lib/types/IKeyValueStorage.d.ts +8 -0
  153. package/lib/types/IKeyValueStorage.js +3 -0
  154. package/lib/types/ILinearStorage.d.ts +11 -0
  155. package/lib/types/ILinearStorage.js +3 -0
  156. package/{src/types/ILinearStorageRA.ts → lib/types/ILinearStorageRA.d.ts} +13 -14
  157. package/lib/types/ILinearStorageRA.js +3 -0
  158. package/{src/types/IArrayFacade.ts → lib/types/ILinkedList.d.ts} +4 -6
  159. package/lib/types/ILinkedList.js +3 -0
  160. package/lib/utils.d.ts +29 -0
  161. package/lib/utils.js +95 -0
  162. package/package.json +9 -3
  163. package/.idea/algorythmes.iml +0 -15
  164. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  165. package/.idea/deployment.xml +0 -14
  166. package/.idea/inspectionProfiles/Project_Default.xml +0 -7
  167. package/.idea/jsLinters/eslint.xml +0 -6
  168. package/.idea/misc.xml +0 -6
  169. package/.idea/modules.xml +0 -8
  170. package/.idea/vcs.xml +0 -6
  171. package/lib/algotirhms.ts +0 -35
  172. package/lib/constants.ts +0 -3
  173. package/lib/data-structures.ts +0 -23
  174. package/lib/helpers.ts +0 -13
  175. package/lib/sorts.ts +0 -7
  176. package/lib/types.ts +0 -53
  177. package/lib/utils.ts +0 -21
  178. package/src/algorithms/binary-search.ts +0 -28
  179. package/src/algorithms/factorial.ts +0 -18
  180. package/src/algorithms/fibonacci.ts +0 -18
  181. package/src/algorithms/memoize.ts +0 -21
  182. package/src/algorithms/sorts/bubble-sort.ts +0 -21
  183. package/src/algorithms/sorts/insertion-sort.ts +0 -25
  184. package/src/algorithms/sorts/merge-sort.ts +0 -74
  185. package/src/algorithms/sorts/quick-sort.ts +0 -54
  186. package/src/algorithms/sorts/select-sort.ts +0 -19
  187. package/src/algorithms/transpose-matrix.ts +0 -19
  188. package/src/constants.ts +0 -2
  189. package/src/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.ts +0 -45
  190. package/src/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.ts +0 -80
  191. package/src/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.ts +0 -38
  192. package/src/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.ts +0 -286
  193. package/src/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.ts +0 -48
  194. package/src/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.ts +0 -228
  195. package/src/data-structures/Graph/AbstractGraph.ts +0 -189
  196. package/src/data-structures/Graph/DirectedGraph.ts +0 -84
  197. package/src/data-structures/Graph/GraphEdge.ts +0 -33
  198. package/src/data-structures/Graph/UndirectedGraph.ts +0 -108
  199. package/src/data-structures/Graph/demo/generateRandomGraph.ts +0 -93
  200. package/src/data-structures/Graph/iterator/AbstractGraphIterator.ts +0 -99
  201. package/src/data-structures/Graph/iterator/GraphIteratorBFS.ts +0 -60
  202. package/src/data-structures/Graph/iterator/GraphIteratorDFS.ts +0 -60
  203. package/src/data-structures/Graph/iterator/GraphIteratorDijkstra.ts +0 -94
  204. package/src/data-structures/Graph/presenter/presenterAdjacencyLists.ts +0 -29
  205. package/src/data-structures/Graph/searching/hasPath.ts +0 -38
  206. package/src/data-structures/Graph/searching/shortestPath.ts +0 -38
  207. package/src/data-structures/Graph/strategy/BFSIterationStrategy.ts +0 -11
  208. package/src/data-structures/Graph/strategy/DFSIterationStrategy.ts +0 -11
  209. package/src/data-structures/Graph/strategy/DijkstraIterationStrategy.ts +0 -11
  210. package/src/data-structures/Graph/transposing/transposeDirectedGraph.ts +0 -19
  211. package/src/data-structures/HashTable/HashTable.ts +0 -202
  212. package/src/data-structures/HashTable/HashTableNode.ts +0 -31
  213. package/src/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.ts +0 -310
  214. package/src/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.ts +0 -33
  215. package/src/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.ts +0 -156
  216. package/src/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.ts +0 -47
  217. package/src/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.ts +0 -147
  218. package/src/data-structures/LoopedArray/LoopedArray.ts +0 -182
  219. package/src/data-structures/Queue/Queue.ts +0 -92
  220. package/src/data-structures/Stack/Stack.ts +0 -92
  221. package/src/demo/demo.bst.ts +0 -67
  222. package/src/demo/demo.graph.ts +0 -246
  223. package/src/demo/demo.hashtable.ts +0 -28
  224. package/src/demo/demo.linked-list.ts +0 -78
  225. package/src/demo/demo.looped-array.ts +0 -104
  226. package/src/demo/demo.queue.ts +0 -40
  227. package/src/demo/demo.stack.ts +0 -40
  228. package/src/demo/performance/bst-compare.ts +0 -35
  229. package/src/demo/performance/ds-compare.ts +0 -58
  230. package/src/demo/performance/hash-table.compare.ts +0 -40
  231. package/src/demo/performance/sort-compare.ts +0 -60
  232. package/src/helpers/createBinaryTree.ts +0 -24
  233. package/src/helpers/createGraph.ts +0 -24
  234. package/src/helpers/createGraphFromMatrix.ts +0 -47
  235. package/src/helpers/createLinkedList.ts +0 -24
  236. package/src/index.ts +0 -44
  237. package/src/types/ArrayMatrix.ts +0 -1
  238. package/src/types/EnumBinarySearchTreeType.ts +0 -4
  239. package/src/types/EnumGraphTraversalType.ts +0 -5
  240. package/src/types/EnumGraphType.ts +0 -4
  241. package/src/types/EnumLinkedListType.ts +0 -4
  242. package/src/types/EnumRandomGenerationFormat.ts +0 -4
  243. package/src/types/EnumSortType.ts +0 -7
  244. package/src/types/EnumTreeTraversalType.ts +0 -5
  245. package/src/types/FnCompareTwo.ts +0 -1
  246. package/src/types/FnSort.ts +0 -1
  247. package/src/types/FnToMemoize.ts +0 -1
  248. package/src/types/IBiDirectIterator.ts +0 -12
  249. package/src/types/IBinaryTree.ts +0 -13
  250. package/src/types/IConvertableToArray.ts +0 -4
  251. package/src/types/IGraph.ts +0 -16
  252. package/src/types/IGraphCreator.ts +0 -5
  253. package/src/types/IGraphIterator.ts +0 -13
  254. package/src/types/IIterator.ts +0 -14
  255. package/src/types/IKeyValueStorage.ts +0 -8
  256. package/src/types/ILinearStorage.ts +0 -11
  257. package/src/utils.ts +0 -65
@@ -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=
@@ -1,51 +1,32 @@
1
- import IGraph from "../../../types/IGraph";
2
- import { EDGE_EXISTS_STATE, EDGE_NOT_EXISTS_STATE } from "../../../constants";
3
- import { ArrayMatrix } from "../../../types/ArrayMatrix";
4
-
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
- export const presenterAdjacencyMatrix = <T>(graph: IGraph<T>): ArrayMatrix => {
35
- const vertices = graph.vertices();
36
- const matrix = new Array(graph.verticesCount());
37
-
38
- vertices.forEach((graphVertexRow, rowIndex) => {
39
- matrix[rowIndex] = new Array(graph.verticesCount());
40
-
41
- vertices.forEach((graphVertexColumn, columnIndex) => {
42
- const isElementLinked = graph.hasEdge(graphVertexRow, graphVertexColumn);
43
-
44
- matrix[rowIndex][columnIndex] = isElementLinked
45
- ? EDGE_EXISTS_STATE
46
- : EDGE_NOT_EXISTS_STATE;
47
- });
48
- });
49
-
50
- return matrix;
51
- };
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,2 @@
1
+ import IGraph from "../../../types/IGraph";
2
+ export declare const transposeDirectedGraph: <T>(sourceGraph: IGraph<T>) => IGraph<T>;
@@ -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=