@graphty/algorithms 1.2.0 → 1.3.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.
Files changed (230) hide show
  1. package/README.md +490 -336
  2. package/dist/algorithms.d.ts +42 -2
  3. package/dist/algorithms.js +11099 -2
  4. package/dist/algorithms.js.map +1 -1
  5. package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
  6. package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
  7. package/dist/src/algorithms/centrality/betweenness.js +124 -170
  8. package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
  9. package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
  10. package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
  11. package/dist/src/algorithms/centrality/closeness.js +56 -149
  12. package/dist/src/algorithms/centrality/closeness.js.map +1 -1
  13. package/dist/src/algorithms/centrality/degree.js +3 -3
  14. package/dist/src/algorithms/centrality/degree.js.map +1 -1
  15. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
  16. package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
  17. package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
  18. package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
  19. package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
  20. package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
  21. package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
  22. package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
  23. package/dist/src/algorithms/centrality/index.d.ts +2 -0
  24. package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
  25. package/dist/src/algorithms/centrality/index.js +1 -0
  26. package/dist/src/algorithms/centrality/index.js.map +1 -1
  27. package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
  28. package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
  29. package/dist/src/algorithms/centrality/pagerank.js +45 -0
  30. package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
  31. package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
  32. package/dist/src/algorithms/community/girvan-newman.js +47 -54
  33. package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
  34. package/dist/src/algorithms/community/index.d.ts +2 -0
  35. package/dist/src/algorithms/community/index.d.ts.map +1 -1
  36. package/dist/src/algorithms/community/index.js.map +1 -1
  37. package/dist/src/algorithms/community/label-propagation.d.ts +13 -3
  38. package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
  39. package/dist/src/algorithms/community/label-propagation.js +50 -35
  40. package/dist/src/algorithms/community/label-propagation.js.map +1 -1
  41. package/dist/src/algorithms/community/leiden.d.ts +3 -2
  42. package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
  43. package/dist/src/algorithms/community/leiden.js +34 -39
  44. package/dist/src/algorithms/community/leiden.js.map +1 -1
  45. package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
  46. package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
  47. package/dist/src/algorithms/community/louvain-optimized.js +303 -0
  48. package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
  49. package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
  50. package/dist/src/algorithms/community/louvain.js +17 -76
  51. package/dist/src/algorithms/community/louvain.js.map +1 -1
  52. package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
  53. package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
  54. package/dist/src/algorithms/community/modularity-utils.js +112 -0
  55. package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
  56. package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
  57. package/dist/src/algorithms/matching/bipartite.js +8 -40
  58. package/dist/src/algorithms/matching/bipartite.js.map +1 -1
  59. package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
  60. package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -12
  61. package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
  62. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
  63. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
  64. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
  65. package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
  66. package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
  67. package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
  68. package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
  69. package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
  70. package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
  71. package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
  72. package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
  73. package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
  74. package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
  75. package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
  76. package/dist/src/algorithms/traversal/bfs-variants.js +368 -0
  77. package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
  78. package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
  79. package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
  80. package/dist/src/algorithms/traversal/bfs.js +5 -182
  81. package/dist/src/algorithms/traversal/bfs.js.map +1 -1
  82. package/dist/src/benchmark-all-algorithms.d.ts +23 -0
  83. package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
  84. package/dist/src/benchmark-all-algorithms.js +462 -0
  85. package/dist/src/benchmark-all-algorithms.js.map +1 -0
  86. package/dist/src/clustering/hierarchical.d.ts +16 -15
  87. package/dist/src/clustering/hierarchical.d.ts.map +1 -1
  88. package/dist/src/clustering/hierarchical.js +209 -223
  89. package/dist/src/clustering/hierarchical.js.map +1 -1
  90. package/dist/src/clustering/index.d.ts +4 -2
  91. package/dist/src/clustering/index.d.ts.map +1 -1
  92. package/dist/src/clustering/index.js +2 -2
  93. package/dist/src/clustering/index.js.map +1 -1
  94. package/dist/src/clustering/k-core.d.ts +16 -15
  95. package/dist/src/clustering/k-core.d.ts.map +1 -1
  96. package/dist/src/clustering/k-core.js +57 -21
  97. package/dist/src/clustering/k-core.js.map +1 -1
  98. package/dist/src/clustering/spectral.d.ts +8 -0
  99. package/dist/src/clustering/spectral.d.ts.map +1 -1
  100. package/dist/src/clustering/spectral.js +40 -21
  101. package/dist/src/clustering/spectral.js.map +1 -1
  102. package/dist/src/core/graph.js +4 -4
  103. package/dist/src/core/graph.js.map +1 -1
  104. package/dist/src/flow/ford-fulkerson.d.ts +17 -11
  105. package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
  106. package/dist/src/flow/ford-fulkerson.js +141 -217
  107. package/dist/src/flow/ford-fulkerson.js.map +1 -1
  108. package/dist/src/flow/min-cut.d.ts +6 -5
  109. package/dist/src/flow/min-cut.d.ts.map +1 -1
  110. package/dist/src/flow/min-cut.js +17 -8
  111. package/dist/src/flow/min-cut.js.map +1 -1
  112. package/dist/src/index.d.ts +1 -0
  113. package/dist/src/index.d.ts.map +1 -1
  114. package/dist/src/index.js +4 -0
  115. package/dist/src/index.js.map +1 -1
  116. package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
  117. package/dist/src/link-prediction/adamic-adar.js +17 -26
  118. package/dist/src/link-prediction/adamic-adar.js.map +1 -1
  119. package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
  120. package/dist/src/link-prediction/common-neighbors.js +7 -11
  121. package/dist/src/link-prediction/common-neighbors.js.map +1 -1
  122. package/dist/src/optimized/bit-packed.d.ts +143 -0
  123. package/dist/src/optimized/bit-packed.d.ts.map +1 -0
  124. package/dist/src/optimized/bit-packed.js +292 -0
  125. package/dist/src/optimized/bit-packed.js.map +1 -0
  126. package/dist/src/optimized/csr-graph.d.ts +86 -0
  127. package/dist/src/optimized/csr-graph.d.ts.map +1 -0
  128. package/dist/src/optimized/csr-graph.js +341 -0
  129. package/dist/src/optimized/csr-graph.js.map +1 -0
  130. package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
  131. package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
  132. package/dist/src/optimized/direction-optimized-bfs.js +223 -0
  133. package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
  134. package/dist/src/optimized/graph-adapter.d.ts +62 -0
  135. package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
  136. package/dist/src/optimized/graph-adapter.js +146 -0
  137. package/dist/src/optimized/graph-adapter.js.map +1 -0
  138. package/dist/src/optimized/index.d.ts +14 -0
  139. package/dist/src/optimized/index.d.ts.map +1 -0
  140. package/dist/src/optimized/index.js +28 -0
  141. package/dist/src/optimized/index.js.map +1 -0
  142. package/dist/src/research/grsbm.d.ts.map +1 -1
  143. package/dist/src/research/grsbm.js +6 -14
  144. package/dist/src/research/grsbm.js.map +1 -1
  145. package/dist/src/research/sync.d.ts.map +1 -1
  146. package/dist/src/research/sync.js +3 -29
  147. package/dist/src/research/sync.js.map +1 -1
  148. package/dist/src/research/terahac.d.ts +2 -0
  149. package/dist/src/research/terahac.d.ts.map +1 -1
  150. package/dist/src/research/terahac.js +7 -3
  151. package/dist/src/research/terahac.js.map +1 -1
  152. package/dist/src/types/index.d.ts +8 -0
  153. package/dist/src/types/index.d.ts.map +1 -1
  154. package/dist/src/utils/algorithm-utilities.d.ts +2 -0
  155. package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
  156. package/dist/src/utils/algorithm-utilities.js +2 -0
  157. package/dist/src/utils/algorithm-utilities.js.map +1 -0
  158. package/dist/src/utils/graph-converters.d.ts +79 -0
  159. package/dist/src/utils/graph-converters.d.ts.map +1 -0
  160. package/dist/src/utils/graph-converters.js +196 -0
  161. package/dist/src/utils/graph-converters.js.map +1 -0
  162. package/dist/src/utils/graph-utilities.d.ts +62 -0
  163. package/dist/src/utils/graph-utilities.d.ts.map +1 -0
  164. package/dist/src/utils/graph-utilities.js +148 -0
  165. package/dist/src/utils/graph-utilities.js.map +1 -0
  166. package/dist/src/utils/index.d.ts +5 -0
  167. package/dist/src/utils/index.d.ts.map +1 -0
  168. package/dist/src/utils/index.js +5 -0
  169. package/dist/src/utils/index.js.map +1 -0
  170. package/dist/src/utils/math-utilities.d.ts +52 -0
  171. package/dist/src/utils/math-utilities.d.ts.map +1 -0
  172. package/dist/src/utils/math-utilities.js +123 -0
  173. package/dist/src/utils/math-utilities.js.map +1 -0
  174. package/dist/src/utils/matrix-utilities.d.ts +2 -0
  175. package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
  176. package/dist/src/utils/matrix-utilities.js +2 -0
  177. package/dist/src/utils/matrix-utilities.js.map +1 -0
  178. package/dist/src/utils/optimization-helpers.d.ts +33 -0
  179. package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
  180. package/dist/src/utils/optimization-helpers.js +47 -0
  181. package/dist/src/utils/optimization-helpers.js.map +1 -0
  182. package/package.json +18 -3
  183. package/src/algorithms/centrality/betweenness.ts +167 -199
  184. package/src/algorithms/centrality/closeness.ts +73 -191
  185. package/src/algorithms/centrality/degree.ts +3 -3
  186. package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
  187. package/src/algorithms/centrality/delta-pagerank.ts +435 -0
  188. package/src/algorithms/centrality/index.ts +2 -0
  189. package/src/algorithms/centrality/pagerank.ts +66 -0
  190. package/src/algorithms/community/girvan-newman.ts +52 -59
  191. package/src/algorithms/community/index.ts +2 -0
  192. package/src/algorithms/community/label-propagation.ts +64 -35
  193. package/src/algorithms/community/leiden.ts +40 -41
  194. package/src/algorithms/community/louvain-optimized.ts +445 -0
  195. package/src/algorithms/community/louvain.ts +24 -104
  196. package/src/algorithms/community/modularity-utils.ts +146 -0
  197. package/src/algorithms/matching/bipartite.ts +8 -44
  198. package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
  199. package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
  200. package/src/algorithms/shortest-path/dijkstra.ts +17 -15
  201. package/src/algorithms/traversal/bfs-unified.ts +433 -0
  202. package/src/algorithms/traversal/bfs-variants.ts +496 -0
  203. package/src/algorithms/traversal/bfs.ts +10 -228
  204. package/src/benchmark-all-algorithms.ts +548 -0
  205. package/src/clustering/hierarchical.ts +241 -251
  206. package/src/clustering/index.ts +4 -2
  207. package/src/clustering/k-core.ts +87 -39
  208. package/src/clustering/spectral.ts +44 -20
  209. package/src/core/graph.ts +4 -4
  210. package/src/flow/ford-fulkerson.ts +186 -254
  211. package/src/flow/min-cut.ts +21 -11
  212. package/src/index.ts +6 -0
  213. package/src/link-prediction/adamic-adar.ts +17 -30
  214. package/src/link-prediction/common-neighbors.ts +7 -16
  215. package/src/optimized/bit-packed.ts +340 -0
  216. package/src/optimized/csr-graph.ts +455 -0
  217. package/src/optimized/direction-optimized-bfs.ts +291 -0
  218. package/src/optimized/graph-adapter.ts +200 -0
  219. package/src/optimized/index.ts +36 -0
  220. package/src/research/grsbm.ts +7 -16
  221. package/src/research/sync.ts +3 -32
  222. package/src/research/terahac.ts +10 -2
  223. package/src/types/index.ts +8 -0
  224. package/src/utils/algorithm-utilities.ts +2 -0
  225. package/src/utils/graph-converters.ts +241 -0
  226. package/src/utils/graph-utilities.ts +199 -0
  227. package/src/utils/index.ts +4 -0
  228. package/src/utils/math-utilities.ts +140 -0
  229. package/src/utils/matrix-utilities.ts +2 -0
  230. package/src/utils/optimization-helpers.ts +81 -0
@@ -1,3 +1,4 @@
1
+ import type { Graph } from "../core/graph.js";
1
2
  /**
2
3
  * Ford-Fulkerson Algorithm for Maximum Flow
3
4
  *
@@ -23,10 +24,18 @@ export interface MaxFlowResult {
23
24
  edges: [string, string][];
24
25
  };
25
26
  }
27
+ /**
28
+ * Utility function to create a flow network for bipartite matching
29
+ */
30
+ export declare function createBipartiteFlowNetwork(leftNodes: string[], rightNodes: string[], edges: [string, string][]): {
31
+ graph: Map<string, Map<string, number>>;
32
+ source: string;
33
+ sink: string;
34
+ };
26
35
  /**
27
36
  * Ford-Fulkerson algorithm using DFS for finding augmenting paths
28
37
  *
29
- * @param graph - Adjacency list representation with capacities
38
+ * @param graph - Adjacency list representation with capacities - accepts Graph class or Map
30
39
  * @param source - Source node
31
40
  * @param sink - Sink node
32
41
  * @returns Maximum flow value and flow graph
@@ -34,20 +43,17 @@ export interface MaxFlowResult {
34
43
  * Time Complexity: O(E * f) where f is the maximum flow
35
44
  * Space Complexity: O(V + E)
36
45
  */
37
- export declare function fordFulkerson(graph: Map<string, Map<string, number>>, source: string, sink: string): MaxFlowResult;
46
+ export declare function fordFulkerson(graph: Graph, source: string, sink: string): MaxFlowResult;
38
47
  /**
39
48
  * Edmonds-Karp algorithm (Ford-Fulkerson with BFS)
40
49
  * More efficient implementation with better time complexity
41
50
  *
51
+ * @param graph - Adjacency list representation with capacities - accepts Graph class or Map
52
+ * @param source - Source node
53
+ * @param sink - Sink node
54
+ * @returns Maximum flow value and flow graph
55
+ *
42
56
  * Time Complexity: O(V * E²)
43
57
  */
44
- export declare function edmondsKarp(graph: Map<string, Map<string, number>>, source: string, sink: string): MaxFlowResult;
45
- /**
46
- * Utility function to create a flow network for bipartite matching
47
- */
48
- export declare function createBipartiteFlowNetwork(leftNodes: string[], rightNodes: string[], edges: [string, string][]): {
49
- graph: Map<string, Map<string, number>>;
50
- source: string;
51
- sink: string;
52
- };
58
+ export declare function edmondsKarp(graph: Graph | Map<string, Map<string, number>>, source: string, sink: string): MaxFlowResult;
53
59
  //# sourceMappingURL=ford-fulkerson.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ford-fulkerson.d.ts","sourceRoot":"","sources":["../../../src/flow/ford-fulkerson.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;KAAC,CAAC;CAChF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,aAAa,CAgGf;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,aAAa,CAwFf;AA2KD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC1B;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CA2CzE"}
1
+ {"version":3,"file":"ford-fulkerson.d.ts","sourceRoot":"","sources":["../../../src/flow/ford-fulkerson.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAG5C;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE;QAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;KAAC,CAAC;CAChF;AA+QD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC1B;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CA2CzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,aAAa,CAIf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,aAAa,CAIf"}
@@ -1,186 +1,5 @@
1
- /**
2
- * Ford-Fulkerson Algorithm for Maximum Flow
3
- *
4
- * Finds the maximum flow from source to sink in a flow network
5
- * using the method of augmenting paths.
6
- */
7
- /**
8
- * Ford-Fulkerson algorithm using DFS for finding augmenting paths
9
- *
10
- * @param graph - Adjacency list representation with capacities
11
- * @param source - Source node
12
- * @param sink - Sink node
13
- * @returns Maximum flow value and flow graph
14
- *
15
- * Time Complexity: O(E * f) where f is the maximum flow
16
- * Space Complexity: O(V + E)
17
- */
18
- export function fordFulkerson(graph, source, sink) {
19
- if (!graph.has(source) || !graph.has(sink)) {
20
- return { maxFlow: 0, flowGraph: new Map() };
21
- }
22
- // Create residual graph
23
- const residualGraph = createResidualGraph(graph);
24
- const flowGraph = new Map();
25
- // Initialize flow graph
26
- for (const [u, neighbors] of graph) {
27
- flowGraph.set(u, new Map());
28
- for (const v of neighbors.keys()) {
29
- const uFlowNeighbors = flowGraph.get(u);
30
- if (uFlowNeighbors) {
31
- uFlowNeighbors.set(v, 0);
32
- }
33
- }
34
- }
35
- let maxFlow = 0;
36
- let path = findAugmentingPath(residualGraph, source, sink);
37
- while (path !== null) {
38
- // Find minimum capacity along the path
39
- let pathFlow = Infinity;
40
- for (let i = 0; i < path.length - 1; i++) {
41
- const u = path[i];
42
- const v = path[i + 1];
43
- if (!u || !v) {
44
- continue;
45
- }
46
- const uEdges = residualGraph.get(u);
47
- if (!uEdges) {
48
- continue;
49
- }
50
- const capacity = uEdges.get(v);
51
- if (capacity !== undefined) {
52
- pathFlow = Math.min(pathFlow, capacity);
53
- }
54
- }
55
- // Update residual capacities
56
- for (let i = 0; i < path.length - 1; i++) {
57
- const u = path[i];
58
- const v = path[i + 1];
59
- if (!u || !v) {
60
- continue;
61
- }
62
- // Update residual graph
63
- const uEdges = residualGraph.get(u);
64
- if (uEdges) {
65
- const currentCapacity = uEdges.get(v);
66
- if (currentCapacity !== undefined) {
67
- uEdges.set(v, currentCapacity - pathFlow);
68
- }
69
- }
70
- // Add reverse edge
71
- if (!residualGraph.has(v)) {
72
- residualGraph.set(v, new Map());
73
- }
74
- const vEdges = residualGraph.get(v);
75
- if (vEdges) {
76
- vEdges.set(u, (vEdges.get(u) ?? 0) + pathFlow);
77
- }
78
- // Update flow graph
79
- if (graph.get(u)?.has(v)) {
80
- const uFlowEdges = flowGraph.get(u);
81
- if (uFlowEdges) {
82
- const currentFlow = uFlowEdges.get(v) ?? 0;
83
- uFlowEdges.set(v, currentFlow + pathFlow);
84
- }
85
- }
86
- else if (graph.get(v)?.has(u)) {
87
- // This is a reverse flow
88
- const vFlowEdges = flowGraph.get(v);
89
- if (vFlowEdges) {
90
- const currentFlow = vFlowEdges.get(u) ?? 0;
91
- vFlowEdges.set(u, currentFlow - pathFlow);
92
- }
93
- }
94
- }
95
- maxFlow += pathFlow;
96
- path = findAugmentingPath(residualGraph, source, sink);
97
- }
98
- // Find minimum cut
99
- const minCut = findMinCut(residualGraph, source);
100
- return { maxFlow, flowGraph, minCut };
101
- }
102
- /**
103
- * Edmonds-Karp algorithm (Ford-Fulkerson with BFS)
104
- * More efficient implementation with better time complexity
105
- *
106
- * Time Complexity: O(V * E²)
107
- */
108
- export function edmondsKarp(graph, source, sink) {
109
- if (!graph.has(source) || !graph.has(sink)) {
110
- return { maxFlow: 0, flowGraph: new Map() };
111
- }
112
- const residualGraph = createResidualGraph(graph);
113
- const flowGraph = new Map();
114
- // Initialize flow graph
115
- for (const [u, neighbors] of graph) {
116
- flowGraph.set(u, new Map());
117
- for (const v of neighbors.keys()) {
118
- const uFlowNeighbors = flowGraph.get(u);
119
- if (uFlowNeighbors) {
120
- uFlowNeighbors.set(v, 0);
121
- }
122
- }
123
- }
124
- let maxFlow = 0;
125
- let path = findAugmentingPathBFS(residualGraph, source, sink);
126
- while (path !== null) {
127
- let pathFlow = Infinity;
128
- for (let i = 0; i < path.length - 1; i++) {
129
- const u = path[i];
130
- const v = path[i + 1];
131
- if (!u || !v) {
132
- continue;
133
- }
134
- const uEdges = residualGraph.get(u);
135
- if (!uEdges) {
136
- continue;
137
- }
138
- const capacity = uEdges.get(v);
139
- if (capacity !== undefined) {
140
- pathFlow = Math.min(pathFlow, capacity);
141
- }
142
- }
143
- for (let i = 0; i < path.length - 1; i++) {
144
- const u = path[i];
145
- const v = path[i + 1];
146
- if (!u || !v) {
147
- continue;
148
- }
149
- const uEdges = residualGraph.get(u);
150
- if (uEdges) {
151
- const currentCapacity = uEdges.get(v);
152
- if (currentCapacity !== undefined) {
153
- uEdges.set(v, currentCapacity - pathFlow);
154
- }
155
- }
156
- if (!residualGraph.has(v)) {
157
- residualGraph.set(v, new Map());
158
- }
159
- const vEdges = residualGraph.get(v);
160
- if (vEdges) {
161
- vEdges.set(u, (vEdges.get(u) ?? 0) + pathFlow);
162
- }
163
- if (graph.get(u)?.has(v)) {
164
- const uFlowEdges = flowGraph.get(u);
165
- if (uFlowEdges) {
166
- const currentFlow = uFlowEdges.get(v) ?? 0;
167
- uFlowEdges.set(v, currentFlow + pathFlow);
168
- }
169
- }
170
- else if (graph.get(v)?.has(u)) {
171
- const vFlowEdges = flowGraph.get(v);
172
- if (vFlowEdges) {
173
- const currentFlow = vFlowEdges.get(u) ?? 0;
174
- vFlowEdges.set(u, currentFlow - pathFlow);
175
- }
176
- }
177
- }
178
- maxFlow += pathFlow;
179
- path = findAugmentingPathBFS(residualGraph, source, sink);
180
- }
181
- const minCut = findMinCut(residualGraph, source);
182
- return { maxFlow, flowGraph, minCut };
183
- }
1
+ import { bfsAugmentingPath } from "../algorithms/traversal/bfs-variants.js";
2
+ import { graphToMap } from "../utils/graph-converters.js";
184
3
  /**
185
4
  * Create residual graph from original graph
186
5
  */
@@ -200,7 +19,7 @@ function createResidualGraph(graph) {
200
19
  /**
201
20
  * Find augmenting path using DFS
202
21
  */
203
- function findAugmentingPath(residualGraph, source, sink) {
22
+ function findAugmentingPathDFS(residualGraph, source, sink) {
204
23
  const visited = new Set();
205
24
  const path = [];
206
25
  function dfs(node) {
@@ -229,45 +48,48 @@ function findAugmentingPath(residualGraph, source, sink) {
229
48
  return null;
230
49
  }
231
50
  /**
232
- * Find augmenting path using BFS (for Edmonds-Karp)
51
+ * Update flow along an augmenting path
233
52
  */
234
- function findAugmentingPathBFS(residualGraph, source, sink) {
235
- const parent = new Map();
236
- const visited = new Set();
237
- const queue = [source];
238
- visited.add(source);
239
- while (queue.length > 0) {
240
- const current = queue.shift();
241
- if (!current) {
53
+ function updateFlow(residualGraph, flowGraph, originalGraph, path, pathFlow) {
54
+ for (let i = 0; i < path.length - 1; i++) {
55
+ const u = path[i];
56
+ const v = path[i + 1];
57
+ if (!u || !v) {
242
58
  continue;
243
59
  }
244
- const neighbors = residualGraph.get(current);
245
- if (neighbors) {
246
- for (const [neighbor, capacity] of neighbors) {
247
- if (!visited.has(neighbor) && capacity > 0) {
248
- visited.add(neighbor);
249
- parent.set(neighbor, current);
250
- if (neighbor === sink) {
251
- // Reconstruct path
252
- const path = [];
253
- let node = sink;
254
- while (node !== source) {
255
- path.unshift(node);
256
- const parentNode = parent.get(node);
257
- if (!parentNode) {
258
- break;
259
- }
260
- node = parentNode;
261
- }
262
- path.unshift(source);
263
- return path;
264
- }
265
- queue.push(neighbor);
266
- }
60
+ // Update residual graph
61
+ const uEdges = residualGraph.get(u);
62
+ if (uEdges) {
63
+ const currentCapacity = uEdges.get(v);
64
+ if (currentCapacity !== undefined) {
65
+ uEdges.set(v, currentCapacity - pathFlow);
66
+ }
67
+ }
68
+ // Add reverse edge
69
+ if (!residualGraph.has(v)) {
70
+ residualGraph.set(v, new Map());
71
+ }
72
+ const vEdges = residualGraph.get(v);
73
+ if (vEdges) {
74
+ vEdges.set(u, (vEdges.get(u) ?? 0) + pathFlow);
75
+ }
76
+ // Update flow graph
77
+ if (originalGraph.get(u)?.has(v)) {
78
+ const uFlowEdges = flowGraph.get(u);
79
+ if (uFlowEdges) {
80
+ const currentFlow = uFlowEdges.get(v) ?? 0;
81
+ uFlowEdges.set(v, currentFlow + pathFlow);
82
+ }
83
+ }
84
+ else if (originalGraph.get(v)?.has(u)) {
85
+ // This is a reverse flow
86
+ const vFlowEdges = flowGraph.get(v);
87
+ if (vFlowEdges) {
88
+ const currentFlow = vFlowEdges.get(u) ?? 0;
89
+ vFlowEdges.set(u, currentFlow - pathFlow);
267
90
  }
268
91
  }
269
92
  }
270
- return null;
271
93
  }
272
94
  /**
273
95
  * Find minimum cut from source side
@@ -313,6 +135,76 @@ function findMinCut(residualGraph, source) {
313
135
  }
314
136
  return { source: sourceSet, sink: sinkSet, edges: cutEdges };
315
137
  }
138
+ /**
139
+ * Core max flow algorithm implementation
140
+ */
141
+ function maxFlowCore(graph, source, sink, findPath) {
142
+ if (!graph.has(source) || !graph.has(sink)) {
143
+ return { maxFlow: 0, flowGraph: new Map() };
144
+ }
145
+ // Create residual graph
146
+ const residualGraph = createResidualGraph(graph);
147
+ const flowGraph = new Map();
148
+ // Initialize flow graph
149
+ for (const [u, neighbors] of graph) {
150
+ flowGraph.set(u, new Map());
151
+ for (const v of neighbors.keys()) {
152
+ const uFlowNeighbors = flowGraph.get(u);
153
+ if (uFlowNeighbors) {
154
+ uFlowNeighbors.set(v, 0);
155
+ }
156
+ }
157
+ }
158
+ let maxFlow = 0;
159
+ let pathResult = findPath(residualGraph, source, sink);
160
+ while (pathResult !== null) {
161
+ const { path, pathCapacity } = pathResult;
162
+ // Update flow
163
+ updateFlow(residualGraph, flowGraph, graph, path, pathCapacity);
164
+ maxFlow += pathCapacity;
165
+ // Find next path
166
+ pathResult = findPath(residualGraph, source, sink);
167
+ }
168
+ // Find minimum cut
169
+ const minCut = findMinCut(residualGraph, source);
170
+ return { maxFlow, flowGraph, minCut };
171
+ }
172
+ /**
173
+ * Internal implementation of Ford-Fulkerson algorithm using DFS
174
+ */
175
+ function fordFulkersonImpl(graph, source, sink) {
176
+ // Adapter function for DFS path finding
177
+ const findPathDFS = (residual, src, snk) => {
178
+ const path = findAugmentingPathDFS(residual, src, snk);
179
+ if (!path) {
180
+ return null;
181
+ }
182
+ // Calculate path capacity
183
+ let pathCapacity = Infinity;
184
+ for (let i = 0; i < path.length - 1; i++) {
185
+ const u = path[i];
186
+ const v = path[i + 1];
187
+ if (u && v) {
188
+ const capacity = residual.get(u)?.get(v);
189
+ if (capacity !== undefined) {
190
+ pathCapacity = Math.min(pathCapacity, capacity);
191
+ }
192
+ }
193
+ }
194
+ return { path, pathCapacity };
195
+ };
196
+ return maxFlowCore(graph, source, sink, findPathDFS);
197
+ }
198
+ /**
199
+ * Internal implementation of Edmonds-Karp algorithm
200
+ */
201
+ function edmondsKarpImpl(graph, source, sink) {
202
+ // Use BFS variant for path finding
203
+ const findPathBFS = (residual, src, snk) => {
204
+ return bfsAugmentingPath(residual, src, snk);
205
+ };
206
+ return maxFlowCore(graph, source, sink, findPathBFS);
207
+ }
316
208
  /**
317
209
  * Utility function to create a flow network for bipartite matching
318
210
  */
@@ -352,4 +244,36 @@ export function createBipartiteFlowNetwork(leftNodes, rightNodes, edges) {
352
244
  graph.set(sink, new Map());
353
245
  return { graph, source, sink };
354
246
  }
247
+ /**
248
+ * Ford-Fulkerson algorithm using DFS for finding augmenting paths
249
+ *
250
+ * @param graph - Adjacency list representation with capacities - accepts Graph class or Map
251
+ * @param source - Source node
252
+ * @param sink - Sink node
253
+ * @returns Maximum flow value and flow graph
254
+ *
255
+ * Time Complexity: O(E * f) where f is the maximum flow
256
+ * Space Complexity: O(V + E)
257
+ */
258
+ export function fordFulkerson(graph, source, sink) {
259
+ // Convert Graph to Map representation
260
+ const graphMap = graphToMap(graph);
261
+ return fordFulkersonImpl(graphMap, source, sink);
262
+ }
263
+ /**
264
+ * Edmonds-Karp algorithm (Ford-Fulkerson with BFS)
265
+ * More efficient implementation with better time complexity
266
+ *
267
+ * @param graph - Adjacency list representation with capacities - accepts Graph class or Map
268
+ * @param source - Source node
269
+ * @param sink - Sink node
270
+ * @returns Maximum flow value and flow graph
271
+ *
272
+ * Time Complexity: O(V * E²)
273
+ */
274
+ export function edmondsKarp(graph, source, sink) {
275
+ // Convert Graph to Map representation if needed
276
+ const graphMap = graph instanceof Map ? graph : graphToMap(graph);
277
+ return edmondsKarpImpl(graphMap, source, sink);
278
+ }
355
279
  //# sourceMappingURL=ford-fulkerson.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ford-fulkerson.js","sourceRoot":"","sources":["../../../src/flow/ford-fulkerson.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ford-fulkerson.js","sourceRoot":"","sources":["../../../src/flow/ford-fulkerson.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Various algorithms for finding minimum cuts in graphs
5
5
  */
6
+ import type { Graph } from "../core/graph.js";
6
7
  export interface MinCutResult {
7
8
  cutValue: number;
8
9
  partition1: Set<string>;
@@ -24,26 +25,26 @@ export interface MinCutResult {
24
25
  *
25
26
  * Time Complexity: Same as max flow algorithm used
26
27
  */
27
- export declare function minSTCut(graph: Map<string, Map<string, number>>, source: string, sink: string): MinCutResult;
28
+ export declare function minSTCut(graph: Graph, source: string, sink: string): MinCutResult;
28
29
  /**
29
30
  * Stoer-Wagner algorithm for finding global minimum cut
30
31
  * Finds the minimum cut that separates the graph into two parts
31
32
  *
32
- * @param graph - Undirected weighted graph
33
+ * @param graph - Undirected weighted graph - accepts Graph class or Map representation
33
34
  * @returns Global minimum cut
34
35
  *
35
36
  * Time Complexity: O(V³) or O(VE + V² log V) with heap
36
37
  */
37
- export declare function stoerWagner(graph: Map<string, Map<string, number>>): MinCutResult;
38
+ export declare function stoerWagner(graph: Graph | Map<string, Map<string, number>>): MinCutResult;
38
39
  /**
39
40
  * Karger's randomized min-cut algorithm
40
41
  * Probabilistic algorithm that finds min cut with high probability
41
42
  *
42
- * @param graph - Undirected graph
43
+ * @param graph - Undirected graph - accepts Graph class or Map representation
43
44
  * @param iterations - Number of iterations (higher = better accuracy)
44
45
  * @returns Minimum cut found
45
46
  *
46
47
  * Time Complexity: O(V² * iterations)
47
48
  */
48
- export declare function kargerMinCut(graph: Map<string, Map<string, number>>, iterations?: number): MinCutResult;
49
+ export declare function kargerMinCut(graph: Graph | Map<string, Map<string, number>>, iterations?: number): MinCutResult;
49
50
  //# sourceMappingURL=min-cut.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"min-cut.d.ts","sourceRoot":"","sources":["../../../src/flow/min-cut.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,YAAY,CA4Bd;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,YAAY,CAiFd;AA0JD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,UAAU,SAAM,GACjB,YAAY,CAkCd"}
1
+ {"version":3,"file":"min-cut.d.ts","sourceRoot":"","sources":["../../../src/flow/min-cut.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAI5C,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb,YAAY,CA6Bd;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAChD,YAAY,CAsFd;AA0JD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,UAAU,SAAM,GACjB,YAAY,CAoCd"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Various algorithms for finding minimum cuts in graphs
5
5
  */
6
+ import { graphToMap } from "../utils/graph-converters.js";
6
7
  import { fordFulkerson } from "./ford-fulkerson.js";
7
8
  /**
8
9
  * Find minimum s-t cut using max flow
@@ -28,7 +29,8 @@ export function minSTCut(graph, source, sink) {
28
29
  const cutEdges = [];
29
30
  // Find actual cut edges and their weights
30
31
  for (const [u, v] of flowResult.minCut.edges) {
31
- const weight = graph.get(u)?.get(v) ?? 0;
32
+ const edge = graph.getEdge(u, v);
33
+ const weight = edge?.weight ?? 0;
32
34
  if (weight > 0) {
33
35
  cutEdges.push({ from: u, to: v, weight });
34
36
  }
@@ -44,14 +46,18 @@ export function minSTCut(graph, source, sink) {
44
46
  * Stoer-Wagner algorithm for finding global minimum cut
45
47
  * Finds the minimum cut that separates the graph into two parts
46
48
  *
47
- * @param graph - Undirected weighted graph
49
+ * @param graph - Undirected weighted graph - accepts Graph class or Map representation
48
50
  * @returns Global minimum cut
49
51
  *
50
52
  * Time Complexity: O(V³) or O(VE + V² log V) with heap
51
53
  */
52
54
  export function stoerWagner(graph) {
55
+ // Convert Graph to Map representation if needed
56
+ const graphMap = graph instanceof Map ? graph : graphToMap(graph);
53
57
  // Convert to undirected if necessary
54
- const undirectedGraph = makeUndirected(graph);
58
+ const undirectedGraph = makeUndirected(graphMap);
59
+ // Keep a copy for finding cut edges later
60
+ const originalGraph = makeUndirected(graphMap);
55
61
  if (undirectedGraph.size < 2) {
56
62
  return {
57
63
  cutValue: 0,
@@ -62,6 +68,7 @@ export function stoerWagner(graph) {
62
68
  }
63
69
  // Initialize
64
70
  const nodes = Array.from(undirectedGraph.keys());
71
+ const originalNodes = new Set(nodes); // Keep track of original nodes
65
72
  let minCutValue = Infinity;
66
73
  let bestPartition = new Set();
67
74
  const contractionMap = new Map();
@@ -95,7 +102,7 @@ export function stoerWagner(graph) {
95
102
  // Build result
96
103
  const partition1 = bestPartition;
97
104
  const partition2 = new Set();
98
- for (const node of graph.keys()) {
105
+ for (const node of originalNodes) {
99
106
  if (!partition1.has(node)) {
100
107
  partition2.add(node);
101
108
  }
@@ -103,7 +110,7 @@ export function stoerWagner(graph) {
103
110
  // Find cut edges
104
111
  const cutEdges = [];
105
112
  for (const u of partition1) {
106
- const neighbors = graph.get(u);
113
+ const neighbors = originalGraph.get(u);
107
114
  if (neighbors) {
108
115
  for (const [v, weight] of neighbors) {
109
116
  if (partition2.has(v)) {
@@ -241,18 +248,20 @@ function makeUndirected(graph) {
241
248
  * Karger's randomized min-cut algorithm
242
249
  * Probabilistic algorithm that finds min cut with high probability
243
250
  *
244
- * @param graph - Undirected graph
251
+ * @param graph - Undirected graph - accepts Graph class or Map representation
245
252
  * @param iterations - Number of iterations (higher = better accuracy)
246
253
  * @returns Minimum cut found
247
254
  *
248
255
  * Time Complexity: O(V² * iterations)
249
256
  */
250
257
  export function kargerMinCut(graph, iterations = 100) {
258
+ // Convert Graph to Map representation if needed
259
+ const graphMap = graph instanceof Map ? graph : graphToMap(graph);
251
260
  let minCutValue = Infinity;
252
261
  let bestPartition1 = new Set();
253
262
  let bestPartition2 = new Set();
254
263
  for (let i = 0; i < iterations; i++) {
255
- const result = kargerSingleRun(graph);
264
+ const result = kargerSingleRun(graphMap);
256
265
  if (result.cutValue < minCutValue) {
257
266
  minCutValue = result.cutValue;
258
267
  bestPartition1 = result.partition1;
@@ -262,7 +271,7 @@ export function kargerMinCut(graph, iterations = 100) {
262
271
  // Find cut edges
263
272
  const cutEdges = [];
264
273
  for (const u of bestPartition1) {
265
- const neighbors = graph.get(u);
274
+ const neighbors = graphMap.get(u);
266
275
  if (neighbors) {
267
276
  for (const [v, weight] of neighbors) {
268
277
  if (bestPartition2.has(v)) {