@graphty/algorithms 1.1.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 (237) hide show
  1. package/README.md +820 -235
  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 +158 -35
  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 +2 -0
  113. package/dist/src/index.d.ts.map +1 -1
  114. package/dist/src/index.js +6 -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 +83 -0
  143. package/dist/src/research/grsbm.d.ts.map +1 -0
  144. package/dist/src/research/grsbm.js +403 -0
  145. package/dist/src/research/grsbm.js.map +1 -0
  146. package/dist/src/research/index.d.ts +12 -0
  147. package/dist/src/research/index.d.ts.map +1 -0
  148. package/dist/src/research/index.js +14 -0
  149. package/dist/src/research/index.js.map +1 -0
  150. package/dist/src/research/sync.d.ts +49 -0
  151. package/dist/src/research/sync.d.ts.map +1 -0
  152. package/dist/src/research/sync.js +316 -0
  153. package/dist/src/research/sync.js.map +1 -0
  154. package/dist/src/research/terahac.d.ts +65 -0
  155. package/dist/src/research/terahac.d.ts.map +1 -0
  156. package/dist/src/research/terahac.js +379 -0
  157. package/dist/src/research/terahac.js.map +1 -0
  158. package/dist/src/types/index.d.ts +8 -0
  159. package/dist/src/types/index.d.ts.map +1 -1
  160. package/dist/src/utils/algorithm-utilities.d.ts +2 -0
  161. package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
  162. package/dist/src/utils/algorithm-utilities.js +2 -0
  163. package/dist/src/utils/algorithm-utilities.js.map +1 -0
  164. package/dist/src/utils/graph-converters.d.ts +79 -0
  165. package/dist/src/utils/graph-converters.d.ts.map +1 -0
  166. package/dist/src/utils/graph-converters.js +196 -0
  167. package/dist/src/utils/graph-converters.js.map +1 -0
  168. package/dist/src/utils/graph-utilities.d.ts +62 -0
  169. package/dist/src/utils/graph-utilities.d.ts.map +1 -0
  170. package/dist/src/utils/graph-utilities.js +148 -0
  171. package/dist/src/utils/graph-utilities.js.map +1 -0
  172. package/dist/src/utils/index.d.ts +5 -0
  173. package/dist/src/utils/index.d.ts.map +1 -0
  174. package/dist/src/utils/index.js +5 -0
  175. package/dist/src/utils/index.js.map +1 -0
  176. package/dist/src/utils/math-utilities.d.ts +52 -0
  177. package/dist/src/utils/math-utilities.d.ts.map +1 -0
  178. package/dist/src/utils/math-utilities.js +123 -0
  179. package/dist/src/utils/math-utilities.js.map +1 -0
  180. package/dist/src/utils/matrix-utilities.d.ts +2 -0
  181. package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
  182. package/dist/src/utils/matrix-utilities.js +2 -0
  183. package/dist/src/utils/matrix-utilities.js.map +1 -0
  184. package/dist/src/utils/optimization-helpers.d.ts +33 -0
  185. package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
  186. package/dist/src/utils/optimization-helpers.js +47 -0
  187. package/dist/src/utils/optimization-helpers.js.map +1 -0
  188. package/package.json +28 -4
  189. package/src/algorithms/centrality/betweenness.ts +167 -199
  190. package/src/algorithms/centrality/closeness.ts +73 -191
  191. package/src/algorithms/centrality/degree.ts +3 -3
  192. package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
  193. package/src/algorithms/centrality/delta-pagerank.ts +435 -0
  194. package/src/algorithms/centrality/index.ts +2 -0
  195. package/src/algorithms/centrality/pagerank.ts +66 -0
  196. package/src/algorithms/community/girvan-newman.ts +52 -59
  197. package/src/algorithms/community/index.ts +2 -0
  198. package/src/algorithms/community/label-propagation.ts +64 -35
  199. package/src/algorithms/community/leiden.ts +40 -41
  200. package/src/algorithms/community/louvain-optimized.ts +445 -0
  201. package/src/algorithms/community/louvain.ts +24 -104
  202. package/src/algorithms/community/modularity-utils.ts +146 -0
  203. package/src/algorithms/matching/bipartite.ts +8 -44
  204. package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
  205. package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
  206. package/src/algorithms/shortest-path/dijkstra.ts +17 -15
  207. package/src/algorithms/traversal/bfs-unified.ts +433 -0
  208. package/src/algorithms/traversal/bfs-variants.ts +496 -0
  209. package/src/algorithms/traversal/bfs.ts +10 -228
  210. package/src/benchmark-all-algorithms.ts +548 -0
  211. package/src/clustering/hierarchical.ts +241 -251
  212. package/src/clustering/index.ts +4 -2
  213. package/src/clustering/k-core.ts +87 -39
  214. package/src/clustering/spectral.ts +185 -34
  215. package/src/core/graph.ts +4 -4
  216. package/src/flow/ford-fulkerson.ts +186 -254
  217. package/src/flow/min-cut.ts +21 -11
  218. package/src/index.ts +9 -0
  219. package/src/link-prediction/adamic-adar.ts +17 -30
  220. package/src/link-prediction/common-neighbors.ts +7 -16
  221. package/src/optimized/bit-packed.ts +340 -0
  222. package/src/optimized/csr-graph.ts +455 -0
  223. package/src/optimized/direction-optimized-bfs.ts +291 -0
  224. package/src/optimized/graph-adapter.ts +200 -0
  225. package/src/optimized/index.ts +36 -0
  226. package/src/research/grsbm.ts +580 -0
  227. package/src/research/index.ts +17 -0
  228. package/src/research/sync.ts +440 -0
  229. package/src/research/terahac.ts +514 -0
  230. package/src/types/index.ts +8 -0
  231. package/src/utils/algorithm-utilities.ts +2 -0
  232. package/src/utils/graph-converters.ts +241 -0
  233. package/src/utils/graph-utilities.ts +199 -0
  234. package/src/utils/index.ts +4 -0
  235. package/src/utils/math-utilities.ts +140 -0
  236. package/src/utils/matrix-utilities.ts +2 -0
  237. package/src/utils/optimization-helpers.ts +81 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clustering/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,UAAU,CAAC;AACpD,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAClE,YAAY,EAAC,yBAAyB,EAAE,wBAAwB,EAAC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clustering/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,WAAW,EAAE,4BAA4B,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAC,QAAQ,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACzD,YAAY,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,UAAU,CAAC;AACpD,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAClE,YAAY,EAAC,yBAAyB,EAAE,wBAAwB,EAAC,MAAM,eAAe,CAAC;AACvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC"}
@@ -1,5 +1,5 @@
1
- export * from "./hierarchical.js";
2
- export * from "./k-core.js";
1
+ export { hierarchicalClustering } from "./hierarchical.js";
2
+ export { getKCore, kCoreDecomposition } from "./k-core.js";
3
3
  export { calculateMCLModularity, markovClustering } from "./mcl.js";
4
4
  export { spectralClustering } from "./spectral.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clustering/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAElE,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clustering/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAC,QAAQ,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAElE,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC"}
@@ -5,22 +5,12 @@
5
5
  * within the subgraph. Used for identifying cohesive groups and
6
6
  * understanding graph structure.
7
7
  */
8
+ import type { Graph } from "../core/graph.js";
8
9
  export interface KCoreResult<T> {
9
10
  cores: Map<number, Set<T>>;
10
11
  coreness: Map<T, number>;
11
12
  maxCore: number;
12
13
  }
13
- /**
14
- * K-Core decomposition algorithm
15
- * Finds all k-cores in the graph and assigns coreness values to nodes
16
- *
17
- * @param graph - Undirected graph as adjacency list
18
- * @returns K-core decomposition results
19
- *
20
- * Time Complexity: O(V + E)
21
- * Space Complexity: O(V)
22
- */
23
- export declare function kCoreDecomposition<T>(graph: Map<T, Set<T>>): KCoreResult<T>;
24
14
  /**
25
15
  * Extract the k-core subgraph
26
16
  * Returns nodes that belong to k-core or higher
@@ -29,7 +19,7 @@ export declare function kCoreDecomposition<T>(graph: Map<T, Set<T>>): KCoreResul
29
19
  * @param k - Core number
30
20
  * @returns Set of nodes in k-core or higher
31
21
  */
32
- export declare function getKCore<T>(graph: Map<T, Set<T>>, k: number): Set<T>;
22
+ export declare function getKCore(graph: Graph, k: number): Set<string>;
33
23
  /**
34
24
  * Get the induced subgraph for k-core
35
25
  * Returns the actual subgraph containing only k-core nodes
@@ -38,7 +28,7 @@ export declare function getKCore<T>(graph: Map<T, Set<T>>, k: number): Set<T>;
38
28
  * @param k - Core number
39
29
  * @returns K-core subgraph
40
30
  */
41
- export declare function getKCoreSubgraph<T>(graph: Map<T, Set<T>>, k: number): Map<T, Set<T>>;
31
+ export declare function getKCoreSubgraph(graph: Graph, k: number): Map<string, Set<string>>;
42
32
  /**
43
33
  * Degeneracy ordering of the graph
44
34
  * Orders nodes by their coreness values
@@ -46,7 +36,7 @@ export declare function getKCoreSubgraph<T>(graph: Map<T, Set<T>>, k: number): M
46
36
  * @param graph - Undirected graph
47
37
  * @returns Array of nodes ordered by degeneracy
48
38
  */
49
- export declare function degeneracyOrdering<T>(graph: Map<T, Set<T>>): T[];
39
+ export declare function degeneracyOrdering(graph: Graph): string[];
50
40
  /**
51
41
  * Find k-truss subgraph (triangular k-cores)
52
42
  * Each edge must be part of at least k-2 triangles
@@ -55,9 +45,20 @@ export declare function degeneracyOrdering<T>(graph: Map<T, Set<T>>): T[];
55
45
  * @param k - Truss number (k >= 2)
56
46
  * @returns Edges in k-truss
57
47
  */
58
- export declare function kTruss<T>(graph: Map<T, Set<T>>, k: number): Set<string>;
48
+ export declare function kTruss(graph: Graph, k: number): Set<string>;
59
49
  /**
60
50
  * Convert directed graph to undirected for k-core analysis
61
51
  */
62
52
  export declare function toUndirected<T>(directedGraph: Map<T, Map<T, number>>): Map<T, Set<T>>;
53
+ /**
54
+ * K-Core decomposition algorithm
55
+ * Finds all k-cores in the graph and assigns coreness values to nodes
56
+ *
57
+ * @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
58
+ * @returns K-core decomposition results
59
+ *
60
+ * Time Complexity: O(V + E)
61
+ * Space Complexity: O(V)
62
+ */
63
+ export declare function kCoreDecomposition(graph: Graph): KCoreResult<string>;
63
64
  //# sourceMappingURL=k-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"k-core.d.ts","sourceRoot":"","sources":["../../../src/clustering/k-core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAChC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GACtB,WAAW,CAAC,CAAC,CAAC,CA6JhB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACtB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrB,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,CAAC,CAAC,CAWR;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAC9B,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrB,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAkBhB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAChC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,EAAE,CA6CL;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACpB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACrB,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,CAoHb;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC1B,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GACtC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CA4BhB"}
1
+ {"version":3,"file":"k-core.d.ts","sourceRoot":"","sources":["../../../src/clustering/k-core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAmC5C,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACnB;AAsKD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,CAWb;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAmB1B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,KAAK,GACb,MAAM,EAAE,CA8CV;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAClB,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,CAoHb;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC1B,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GACtC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CA4BhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,KAAK,GACb,WAAW,CAAC,MAAM,CAAC,CAIrB"}
@@ -6,16 +6,36 @@
6
6
  * understanding graph structure.
7
7
  */
8
8
  /**
9
- * K-Core decomposition algorithm
10
- * Finds all k-cores in the graph and assigns coreness values to nodes
11
- *
12
- * @param graph - Undirected graph as adjacency list
13
- * @returns K-core decomposition results
14
- *
15
- * Time Complexity: O(V + E)
16
- * Space Complexity: O(V)
9
+ * Convert Graph to adjacency set representation
17
10
  */
18
- export function kCoreDecomposition(graph) {
11
+ function graphToAdjacencySet(graph) {
12
+ const adjacency = new Map();
13
+ // Initialize all nodes
14
+ for (const node of graph.nodes()) {
15
+ adjacency.set(String(node.id), new Set());
16
+ }
17
+ // Add edges
18
+ for (const edge of graph.edges()) {
19
+ const source = String(edge.source);
20
+ const target = String(edge.target);
21
+ const sourceSet = adjacency.get(source);
22
+ if (sourceSet) {
23
+ sourceSet.add(target);
24
+ }
25
+ // For undirected graphs, add reverse edge
26
+ if (!graph.isDirected) {
27
+ const targetSet = adjacency.get(target);
28
+ if (targetSet) {
29
+ targetSet.add(source);
30
+ }
31
+ }
32
+ }
33
+ return adjacency;
34
+ }
35
+ /**
36
+ * Internal implementation of K-Core decomposition algorithm
37
+ */
38
+ function kCoreDecompositionImpl(graph) {
19
39
  if (graph.size === 0) {
20
40
  return { cores: new Map(), coreness: new Map(), maxCore: 0 };
21
41
  }
@@ -178,9 +198,10 @@ export function getKCore(graph, k) {
178
198
  */
179
199
  export function getKCoreSubgraph(graph, k) {
180
200
  const kCoreNodes = getKCore(graph, k);
201
+ const adjacencySet = graphToAdjacencySet(graph);
181
202
  const subgraph = new Map();
182
203
  for (const node of kCoreNodes) {
183
- const neighbors = graph.get(node);
204
+ const neighbors = adjacencySet.get(node);
184
205
  if (neighbors) {
185
206
  const coreNeighbors = new Set();
186
207
  for (const neighbor of neighbors) {
@@ -201,16 +222,17 @@ export function getKCoreSubgraph(graph, k) {
201
222
  * @returns Array of nodes ordered by degeneracy
202
223
  */
203
224
  export function degeneracyOrdering(graph) {
225
+ const adjacencySet = graphToAdjacencySet(graph);
204
226
  const degree = new Map();
205
227
  const remaining = new Map();
206
228
  const ordering = [];
207
229
  // Initialize
208
- for (const [node, neighbors] of graph) {
230
+ for (const [node, neighbors] of adjacencySet) {
209
231
  degree.set(node, neighbors.size);
210
232
  remaining.set(node, new Set(neighbors));
211
233
  }
212
234
  // Build ordering
213
- while (ordering.length < graph.size) {
235
+ while (ordering.length < adjacencySet.size) {
214
236
  // Find minimum degree node
215
237
  let minDegree = Infinity;
216
238
  let minNode;
@@ -250,11 +272,12 @@ export function kTruss(graph, k) {
250
272
  if (k < 2) {
251
273
  throw new Error("k must be at least 2 for k-truss");
252
274
  }
275
+ const adjacencySet = graphToAdjacencySet(graph);
253
276
  // Count triangles for each edge
254
277
  const edgeTriangles = new Map();
255
278
  const edges = new Set();
256
279
  // Initialize edges
257
- for (const [u, neighbors] of graph) {
280
+ for (const [u, neighbors] of adjacencySet) {
258
281
  for (const v of neighbors) {
259
282
  if (u < v) { // Avoid duplicates
260
283
  const edge = `${String(u)},${String(v)}`;
@@ -264,10 +287,10 @@ export function kTruss(graph, k) {
264
287
  }
265
288
  }
266
289
  // Count triangles
267
- for (const [u, uNeighbors] of graph) {
290
+ for (const [u, uNeighbors] of adjacencySet) {
268
291
  for (const v of uNeighbors) {
269
292
  if (u < v) {
270
- const vNeighbors = graph.get(v);
293
+ const vNeighbors = adjacencySet.get(v);
271
294
  if (vNeighbors) {
272
295
  // Find common neighbors (triangles)
273
296
  for (const w of uNeighbors) {
@@ -319,15 +342,13 @@ export function kTruss(graph, k) {
319
342
  continue;
320
343
  }
321
344
  // Update triangle counts for affected edges
322
- const uNode = u;
323
- const vNode = v;
324
- const uNeighbors = graph.get(uNode);
325
- const vNeighbors = graph.get(vNode);
345
+ const uNeighbors = adjacencySet.get(u);
346
+ const vNeighbors = adjacencySet.get(v);
326
347
  if (uNeighbors && vNeighbors) {
327
348
  for (const w of uNeighbors) {
328
349
  if (vNeighbors.has(w)) {
329
- const edge1 = uNode < w ? `${String(uNode)},${String(w)}` : `${String(w)},${String(uNode)}`;
330
- const edge2 = vNode < w ? `${String(vNode)},${String(w)}` : `${String(w)},${String(vNode)}`;
350
+ const edge1 = u < w ? `${String(u)},${String(w)}` : `${String(w)},${String(u)}`;
351
+ const edge2 = v < w ? `${String(v)},${String(w)}` : `${String(w)},${String(v)}`;
331
352
  if (kTrussEdges.has(edge1)) {
332
353
  const edge1Count = edgeTriangles.get(edge1);
333
354
  if (edge1Count !== undefined) {
@@ -374,4 +395,19 @@ export function toUndirected(directedGraph) {
374
395
  }
375
396
  return undirected;
376
397
  }
398
+ /**
399
+ * K-Core decomposition algorithm
400
+ * Finds all k-cores in the graph and assigns coreness values to nodes
401
+ *
402
+ * @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
403
+ * @returns K-core decomposition results
404
+ *
405
+ * Time Complexity: O(V + E)
406
+ * Space Complexity: O(V)
407
+ */
408
+ export function kCoreDecomposition(graph) {
409
+ // Convert Graph to adjacency set representation
410
+ const adjacencySet = graphToAdjacencySet(graph);
411
+ return kCoreDecompositionImpl(adjacencySet);
412
+ }
377
413
  //# sourceMappingURL=k-core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"k-core.js","sourceRoot":"","sources":["../../../src/clustering/k-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"k-core.js","sourceRoot":"","sources":["../../../src/clustering/k-core.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,14 @@ export interface SpectralClusteringResult {
23
23
  }
24
24
  /**
25
25
  * Perform spectral clustering on a graph
26
+ *
27
+ * @warning This implementation uses simplified power iteration for eigenvector
28
+ * computation with approximate eigenvalues. For production use cases requiring
29
+ * precise clustering, consider using a proper linear algebra library like ml-matrix.
30
+ *
31
+ * The approximate eigenvalues (0.1, 0.2 for second and third eigenvectors) work
32
+ * well for most graph structures but may produce suboptimal results for graphs
33
+ * with unusual spectral properties.
26
34
  */
27
35
  export declare function spectralClustering(graph: Graph, options: SpectralClusteringOptions): SpectralClusteringResult;
28
36
  //# sourceMappingURL=spectral.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spectral.d.ts","sourceRoot":"","sources":["../../../src/clustering/spectral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAE9C;;;;;;;;GAQG;AAEH,MAAM,WAAW,yBAAyB;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACrC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,yBAAyB,GACnC,wBAAwB,CA2E1B"}
1
+ {"version":3,"file":"spectral.d.ts","sourceRoot":"","sources":["../../../src/clustering/spectral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAG9C;;;;;;;;GAQG;AAEH,MAAM,WAAW,yBAAyB;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACrC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,yBAAyB,GACnC,wBAAwB,CA+F1B"}
@@ -1,8 +1,21 @@
1
+ import { euclideanDistance } from "../utils/math-utilities.js";
1
2
  /**
2
3
  * Perform spectral clustering on a graph
4
+ *
5
+ * @warning This implementation uses simplified power iteration for eigenvector
6
+ * computation with approximate eigenvalues. For production use cases requiring
7
+ * precise clustering, consider using a proper linear algebra library like ml-matrix.
8
+ *
9
+ * The approximate eigenvalues (0.1, 0.2 for second and third eigenvectors) work
10
+ * well for most graph structures but may produce suboptimal results for graphs
11
+ * with unusual spectral properties.
3
12
  */
4
13
  export function spectralClustering(graph, options) {
5
- const { k, laplacianType = "normalized", maxIterations = 100, } = options;
14
+ const { k, laplacianType = "normalized", maxIterations = 100, tolerance = 1e-4, } = options;
15
+ // Input validation
16
+ if (k < 1 || !Number.isInteger(k)) {
17
+ throw new Error("k must be a positive integer");
18
+ }
6
19
  const nodes = Array.from(graph.nodes());
7
20
  const nodeIds = nodes.map((node) => node.id);
8
21
  const n = nodeIds.length;
@@ -19,12 +32,25 @@ export function spectralClustering(graph, options) {
19
32
  const laplacianMatrix = buildLaplacianMatrix(adjacencyMatrix, laplacianType);
20
33
  // Find k smallest eigenvectors
21
34
  const eigenResult = findSmallestEigenvectors(laplacianMatrix, k);
22
- // Normalize the eigenvector matrix row-wise (for normalized spectral clustering)
35
+ // Perform k-means clustering on the eigenvectors
36
+ // For spectral clustering, we need to transpose the eigenvector matrix
37
+ // Each row should be a data point (node) with features from the eigenvectors
38
+ const dataPoints = [];
39
+ for (let i = 0; i < nodeIds.length; i++) {
40
+ const point = [];
41
+ for (let j = 0; j < k; j++) {
42
+ const eigenvector = eigenResult.eigenvectors[j];
43
+ if (eigenvector) {
44
+ point.push(eigenvector[i] ?? 0);
45
+ }
46
+ }
47
+ dataPoints.push(point);
48
+ }
49
+ // Normalize the data points row-wise (for normalized spectral clustering)
23
50
  if (laplacianType === "normalized") {
24
- normalizeRows(eigenResult.eigenvectors);
51
+ normalizeRows(dataPoints);
25
52
  }
26
- // Perform k-means clustering on the eigenvectors
27
- const kmeans = kMeansClustering(eigenResult.eigenvectors, k, maxIterations);
53
+ const kmeans = kMeansClustering(dataPoints, k, maxIterations, tolerance);
28
54
  // Build communities
29
55
  const communities = Array.from({ length: k }, () => []);
30
56
  const clusterAssignments = new Map();
@@ -204,27 +230,29 @@ function findSmallestEigenvectors(matrix, k) {
204
230
  if (n === 0 || k === 0) {
205
231
  return { eigenvalues: [], eigenvectors: [] };
206
232
  }
207
- // For small matrices or when k >= n, use a simplified approach
208
- if (n <= 3 || k >= n) {
209
- // Create identity-like eigenvectors for simplicity
210
- const eigenvectors = [];
211
- const eigenvalues = [];
212
- for (let i = 0; i < Math.min(k, n); i++) {
213
- const vector = Array(n).fill(0);
214
- vector[i] = 1;
215
- eigenvectors.push(vector);
216
- eigenvalues.push(i);
217
- }
218
- return { eigenvalues, eigenvectors };
233
+ // For very small matrices, use the full power iteration approach
234
+ // Remove the simplified approach that was causing issues
235
+ if (k >= n) {
236
+ // If k >= n, we still need proper eigenvectors, not identity
237
+ // Fall through to the power iteration below
219
238
  }
220
- // For larger matrices, use power iteration to find dominant eigenvectors
221
- // This is still simplified but better than random
239
+ // For spectral clustering, we need proper eigenvectors
240
+ // Special handling for small k values which are common in clustering
241
+ if (k <= 3 && n > k) {
242
+ return computeSmallestEigenvectorsSimple(matrix, k, n);
243
+ }
244
+ // For larger k, use power iteration
222
245
  const eigenvectors = [];
223
246
  const eigenvalues = [];
224
- const maxIterations = 50;
247
+ const maxIterations = 100;
225
248
  for (let eigIdx = 0; eigIdx < k; eigIdx++) {
226
249
  // Initialize random vector
227
250
  let vector = Array(n).fill(0).map(() => Math.random() - 0.5);
251
+ // Normalize initial vector
252
+ const initNorm = Math.sqrt(vector.reduce((sum, val) => sum + (val * val), 0));
253
+ if (initNorm > 0) {
254
+ vector = vector.map((val) => val / initNorm);
255
+ }
228
256
  // Orthogonalize against previous eigenvectors
229
257
  for (let j = 0; j < eigIdx; j++) {
230
258
  const ejVector = eigenvectors[j];
@@ -321,7 +349,7 @@ function normalizeRows(matrix) {
321
349
  /**
322
350
  * K-means clustering algorithm
323
351
  */
324
- function kMeansClustering(data, k, maxIterations) {
352
+ function kMeansClustering(data, k, maxIterations, tolerance = 1e-4) {
325
353
  const n = data.length;
326
354
  const d = data[0]?.length ?? 0;
327
355
  // Handle edge cases
@@ -374,18 +402,20 @@ function kMeansClustering(data, k, maxIterations) {
374
402
  }
375
403
  assignments[i] = bestCluster;
376
404
  }
377
- // Check for convergence
378
- let changed = false;
405
+ // Check for convergence based on assignment changes
406
+ let assignmentsChanged = false;
379
407
  for (let i = 0; i < n; i++) {
380
408
  if (assignments[i] !== oldAssignments[i]) {
381
- changed = true;
409
+ assignmentsChanged = true;
382
410
  break;
383
411
  }
384
412
  }
385
- if (!changed) {
413
+ if (!assignmentsChanged) {
386
414
  break;
387
415
  }
388
416
  oldAssignments = [...assignments];
417
+ // Store old centroids for tolerance-based convergence check
418
+ const oldCentroids = centroids.map((c) => [...c]);
389
419
  // Update centroids
390
420
  const counts = Array(k).fill(0);
391
421
  const sums = Array.from({ length: k }, () => Array(d).fill(0));
@@ -421,27 +451,120 @@ function kMeansClustering(data, k, maxIterations) {
421
451
  for (let j = 0; j < d; j++) {
422
452
  const sumVal = sumsRow[j];
423
453
  if (sumVal !== undefined) {
424
- const countVal = counts[i];
425
- if (countVal !== undefined) {
426
- centroidsRow[j] = sumVal / countVal;
454
+ const countValInner = counts[i];
455
+ if (countValInner !== undefined) {
456
+ centroidsRow[j] = sumVal / countValInner;
427
457
  }
428
458
  }
429
459
  }
430
460
  }
431
461
  }
432
462
  }
463
+ // Check for tolerance-based convergence (centroid movement)
464
+ let maxCentroidShift = 0;
465
+ for (let i = 0; i < k; i++) {
466
+ const oldCentroid = oldCentroids[i];
467
+ const newCentroid = centroids[i];
468
+ if (oldCentroid && newCentroid) {
469
+ const shift = euclideanDistance(oldCentroid, newCentroid);
470
+ if (shift > maxCentroidShift) {
471
+ maxCentroidShift = shift;
472
+ }
473
+ }
474
+ }
475
+ if (maxCentroidShift < tolerance) {
476
+ break;
477
+ }
433
478
  }
434
479
  return { assignments, centroids };
435
480
  }
436
481
  /**
437
- * Calculate Euclidean distance between two vectors
482
+ * Compute smallest eigenvectors for small k (optimized for k=2, k=3)
438
483
  */
439
- function euclideanDistance(a, b) {
440
- let sum = 0;
441
- for (let i = 0; i < a.length; i++) {
442
- const diff = (a[i] ?? 0) - (b[i] ?? 0);
443
- sum += diff * diff;
484
+ function computeSmallestEigenvectorsSimple(matrix, k, n) {
485
+ const eigenvectors = [];
486
+ const eigenvalues = [];
487
+ // First eigenvector is constant (corresponds to eigenvalue 0 for connected graph)
488
+ const firstVector = Array(n).fill(1 / Math.sqrt(n));
489
+ eigenvectors.push(firstVector);
490
+ eigenvalues.push(0);
491
+ // For k >= 2, compute the Fiedler vector (second smallest eigenvector)
492
+ if (k >= 2) {
493
+ // Use power iteration on I - L/lambda_max to find second smallest
494
+ const maxEig = 2; // For normalized Laplacian, max eigenvalue <= 2
495
+ let vector = Array(n).fill(0).map(() => Math.random() - 0.5);
496
+ // Make orthogonal to first eigenvector
497
+ const dot1 = vector.reduce((sum, val) => sum + (val / Math.sqrt(n)), 0);
498
+ vector = vector.map((val) => val - (dot1 / Math.sqrt(n)));
499
+ // Power iteration on shifted matrix
500
+ for (let iter = 0; iter < 100; iter++) {
501
+ // Compute (I - L/maxEig) * v
502
+ const newVector = Array(n).fill(0);
503
+ // Identity part
504
+ for (let i = 0; i < n; i++) {
505
+ newVector[i] = vector[i] ?? 0;
506
+ }
507
+ // Subtract L * v / maxEig
508
+ for (let i = 0; i < n; i++) {
509
+ for (let j = 0; j < n; j++) {
510
+ const matrixVal = matrix[i]?.[j] ?? 0;
511
+ const vecVal = vector[j] ?? 0;
512
+ newVector[i] = (newVector[i] ?? 0) - ((matrixVal * vecVal) / maxEig);
513
+ }
514
+ }
515
+ // Orthogonalize against first eigenvector
516
+ const dot = newVector.reduce((sum, val) => sum + (val / Math.sqrt(n)), 0);
517
+ for (let i = 0; i < n; i++) {
518
+ newVector[i] = (newVector[i] ?? 0) - (dot / Math.sqrt(n));
519
+ }
520
+ // Normalize
521
+ const norm = Math.sqrt(newVector.reduce((sum, val) => sum + (val * val), 0));
522
+ if (norm > 1e-10) {
523
+ vector = newVector.map((val) => val / norm);
524
+ }
525
+ }
526
+ eigenvectors.push(vector);
527
+ eigenvalues.push(0.1); // Approximate
528
+ }
529
+ // For k = 3, add another eigenvector
530
+ if (k >= 3) {
531
+ let vector = Array(n).fill(0).map(() => Math.random() - 0.5);
532
+ // Orthogonalize against previous eigenvectors
533
+ for (const prev of eigenvectors) {
534
+ const dot = vector.reduce((sum, val, idx) => sum + (val * (prev[idx] ?? 0)), 0);
535
+ vector = vector.map((val, idx) => val - (dot * (prev[idx] ?? 0)));
536
+ }
537
+ // Similar power iteration
538
+ for (let iter = 0; iter < 50; iter++) {
539
+ const newVector = Array(n).fill(0);
540
+ // Identity part
541
+ for (let i = 0; i < n; i++) {
542
+ newVector[i] = vector[i] ?? 0;
543
+ }
544
+ // Subtract L * v / 2
545
+ for (let i = 0; i < n; i++) {
546
+ for (let j = 0; j < n; j++) {
547
+ const matrixVal = matrix[i]?.[j] ?? 0;
548
+ const vecVal = vector[j] ?? 0;
549
+ newVector[i] = (newVector[i] ?? 0) - ((matrixVal * vecVal) / 2);
550
+ }
551
+ }
552
+ // Orthogonalize
553
+ for (const prev of eigenvectors) {
554
+ const dot = newVector.reduce((sum, val, idx) => sum + (val * (prev[idx] ?? 0)), 0);
555
+ for (let i = 0; i < n; i++) {
556
+ newVector[i] = (newVector[i] ?? 0) - (dot * (prev[i] ?? 0));
557
+ }
558
+ }
559
+ // Normalize
560
+ const norm = Math.sqrt(newVector.reduce((sum, val) => sum + (val * val), 0));
561
+ if (norm > 1e-10) {
562
+ vector = newVector.map((val) => val / norm);
563
+ }
564
+ }
565
+ eigenvectors.push(vector);
566
+ eigenvalues.push(0.2); // Approximate
444
567
  }
445
- return Math.sqrt(sum);
568
+ return { eigenvalues: eigenvalues.slice(0, k), eigenvectors: eigenvectors.slice(0, k) };
446
569
  }
447
570
  //# sourceMappingURL=spectral.js.map