@graphty/algorithms 2.1.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -50
- package/dist/algorithms.js +15260 -10390
- package/dist/algorithms.js.map +1 -1
- package/dist/algorithms.standalone.js +26675 -21542
- package/dist/algorithms.standalone.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +18 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +40 -1
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +20 -0
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +93 -8
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.d.ts +9 -0
- package/dist/src/algorithms/centrality/degree.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +18 -0
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/eigenvector.d.ts +10 -0
- package/dist/src/algorithms/centrality/eigenvector.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/eigenvector.js +29 -0
- package/dist/src/algorithms/centrality/eigenvector.js.map +1 -1
- package/dist/src/algorithms/centrality/hits.d.ts +9 -0
- package/dist/src/algorithms/centrality/hits.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/hits.js +23 -0
- package/dist/src/algorithms/centrality/hits.js.map +1 -1
- package/dist/src/algorithms/centrality/katz.d.ts +9 -0
- package/dist/src/algorithms/centrality/katz.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/katz.js +31 -0
- package/dist/src/algorithms/centrality/katz.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +13 -13
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +47 -10
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman-legacy.d.ts +27 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.d.ts.map +1 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.js +335 -0
- package/dist/src/algorithms/community/girvan-newman-legacy.js.map +1 -0
- package/dist/src/algorithms/community/girvan-newman.d.ts +5 -3
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +34 -308
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/community/label-propagation.d.ts +9 -6
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +24 -110
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/components/connected.d.ts.map +1 -1
- package/dist/src/algorithms/components/connected.js +28 -77
- package/dist/src/algorithms/components/connected.js.map +1 -1
- package/dist/src/algorithms/mst/kruskal.d.ts.map +1 -1
- package/dist/src/algorithms/mst/kruskal.js +59 -3
- package/dist/src/algorithms/mst/kruskal.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +46 -0
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +27 -0
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts +15 -5
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.js +97 -107
- package/dist/src/algorithms/shortest-path/floyd-warshall.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +2 -12
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.js +47 -308
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs-variants.js +5 -25
- package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs.d.ts +0 -3
- package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs.js +0 -4
- package/dist/src/algorithms/traversal/bfs.js.map +1 -1
- package/dist/src/algorithms/traversal/dfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/dfs.js +33 -154
- package/dist/src/algorithms/traversal/dfs.js.map +1 -1
- package/dist/src/clustering/hierarchical-legacy.d.ts +56 -0
- package/dist/src/clustering/hierarchical-legacy.d.ts.map +1 -0
- package/dist/src/clustering/hierarchical-legacy.js +441 -0
- package/dist/src/clustering/hierarchical-legacy.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +7 -39
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +56 -417
- package/dist/src/clustering/hierarchical.js.map +1 -1
- package/dist/src/clustering/k-core-legacy.d.ts +30 -0
- package/dist/src/clustering/k-core-legacy.d.ts.map +1 -0
- package/dist/src/clustering/k-core-legacy.js +191 -0
- package/dist/src/clustering/k-core-legacy.js.map +1 -0
- package/dist/src/clustering/k-core.d.ts +8 -7
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +33 -174
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/mcl-legacy.d.ts +42 -0
- package/dist/src/clustering/mcl-legacy.d.ts.map +1 -0
- package/dist/src/clustering/mcl-legacy.js +386 -0
- package/dist/src/clustering/mcl-legacy.js.map +1 -0
- package/dist/src/clustering/mcl.d.ts +9 -32
- package/dist/src/clustering/mcl.d.ts.map +1 -1
- package/dist/src/clustering/mcl.js +48 -374
- package/dist/src/clustering/mcl.js.map +1 -1
- package/dist/src/index.d.ts +29 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexed/accelerator.d.ts +141 -11
- package/dist/src/indexed/accelerator.d.ts.map +1 -1
- package/dist/src/indexed/accelerator.js +319 -5
- package/dist/src/indexed/accelerator.js.map +1 -1
- package/dist/src/indexed/all-pairs.d.ts +59 -0
- package/dist/src/indexed/all-pairs.d.ts.map +1 -0
- package/dist/src/indexed/all-pairs.js +274 -0
- package/dist/src/indexed/all-pairs.js.map +1 -0
- package/dist/src/indexed/bellman-ford.d.ts +25 -0
- package/dist/src/indexed/bellman-ford.d.ts.map +1 -0
- package/dist/src/indexed/bellman-ford.js +59 -0
- package/dist/src/indexed/bellman-ford.js.map +1 -0
- package/dist/src/indexed/betweenness.d.ts +85 -0
- package/dist/src/indexed/betweenness.d.ts.map +1 -0
- package/dist/src/indexed/betweenness.js +188 -0
- package/dist/src/indexed/betweenness.js.map +1 -0
- package/dist/src/indexed/bfs.d.ts +69 -2
- package/dist/src/indexed/bfs.d.ts.map +1 -1
- package/dist/src/indexed/bfs.js +148 -1
- package/dist/src/indexed/bfs.js.map +1 -1
- package/dist/src/indexed/bipartite.d.ts +37 -0
- package/dist/src/indexed/bipartite.d.ts.map +1 -0
- package/dist/src/indexed/bipartite.js +54 -0
- package/dist/src/indexed/bipartite.js.map +1 -0
- package/dist/src/indexed/closeness.d.ts +49 -0
- package/dist/src/indexed/closeness.d.ts.map +1 -0
- package/dist/src/indexed/closeness.js +127 -0
- package/dist/src/indexed/closeness.js.map +1 -0
- package/dist/src/indexed/common-neighbors.d.ts +14 -1
- package/dist/src/indexed/common-neighbors.d.ts.map +1 -1
- package/dist/src/indexed/common-neighbors.js +24 -14
- package/dist/src/indexed/common-neighbors.js.map +1 -1
- package/dist/src/indexed/degree.d.ts +19 -0
- package/dist/src/indexed/degree.d.ts.map +1 -0
- package/dist/src/indexed/degree.js +45 -0
- package/dist/src/indexed/degree.js.map +1 -0
- package/dist/src/indexed/delta-pagerank.d.ts +145 -0
- package/dist/src/indexed/delta-pagerank.d.ts.map +1 -0
- package/dist/src/indexed/delta-pagerank.js +428 -0
- package/dist/src/indexed/delta-pagerank.js.map +1 -0
- package/dist/src/indexed/dfs.d.ts +55 -0
- package/dist/src/indexed/dfs.d.ts.map +1 -0
- package/dist/src/indexed/dfs.js +146 -0
- package/dist/src/indexed/dfs.js.map +1 -0
- package/dist/src/indexed/eigenvector.d.ts +48 -0
- package/dist/src/indexed/eigenvector.d.ts.map +1 -0
- package/dist/src/indexed/eigenvector.js +162 -0
- package/dist/src/indexed/eigenvector.js.map +1 -0
- package/dist/src/indexed/facade.d.ts +109 -0
- package/dist/src/indexed/facade.d.ts.map +1 -0
- package/dist/src/indexed/facade.js +204 -0
- package/dist/src/indexed/facade.js.map +1 -0
- package/dist/src/indexed/flow.d.ts +120 -0
- package/dist/src/indexed/flow.d.ts.map +1 -0
- package/dist/src/indexed/flow.js +377 -0
- package/dist/src/indexed/flow.js.map +1 -0
- package/dist/src/indexed/girvan-newman.d.ts +42 -0
- package/dist/src/indexed/girvan-newman.d.ts.map +1 -0
- package/dist/src/indexed/girvan-newman.js +90 -0
- package/dist/src/indexed/girvan-newman.js.map +1 -0
- package/dist/src/indexed/grsbm.d.ts +85 -0
- package/dist/src/indexed/grsbm.d.ts.map +1 -0
- package/dist/src/indexed/grsbm.js +287 -0
- package/dist/src/indexed/grsbm.js.map +1 -0
- package/dist/src/indexed/hierarchical.d.ts +69 -0
- package/dist/src/indexed/hierarchical.d.ts.map +1 -0
- package/dist/src/indexed/hierarchical.js +245 -0
- package/dist/src/indexed/hierarchical.js.map +1 -0
- package/dist/src/indexed/index.d.ts +29 -3
- package/dist/src/indexed/index.d.ts.map +1 -1
- package/dist/src/indexed/index.js +29 -3
- package/dist/src/indexed/index.js.map +1 -1
- package/dist/src/indexed/isomorphism.d.ts +42 -0
- package/dist/src/indexed/isomorphism.d.ts.map +1 -0
- package/dist/src/indexed/isomorphism.js +269 -0
- package/dist/src/indexed/isomorphism.js.map +1 -0
- package/dist/src/indexed/label-propagation.d.ts +134 -0
- package/dist/src/indexed/label-propagation.d.ts.map +1 -0
- package/dist/src/indexed/label-propagation.js +486 -0
- package/dist/src/indexed/label-propagation.js.map +1 -0
- package/dist/src/indexed/leiden.d.ts +52 -0
- package/dist/src/indexed/leiden.d.ts.map +1 -0
- package/dist/src/indexed/leiden.js +384 -0
- package/dist/src/indexed/leiden.js.map +1 -0
- package/dist/src/indexed/link-prediction.d.ts +147 -0
- package/dist/src/indexed/link-prediction.d.ts.map +1 -0
- package/dist/src/indexed/link-prediction.js +317 -0
- package/dist/src/indexed/link-prediction.js.map +1 -0
- package/dist/src/indexed/markov.d.ts +54 -0
- package/dist/src/indexed/markov.d.ts.map +1 -0
- package/dist/src/indexed/markov.js +284 -0
- package/dist/src/indexed/markov.js.map +1 -0
- package/dist/src/indexed/matching.d.ts +53 -0
- package/dist/src/indexed/matching.d.ts.map +1 -0
- package/dist/src/indexed/matching.js +139 -0
- package/dist/src/indexed/matching.js.map +1 -0
- package/dist/src/indexed/min-cut.d.ts +48 -0
- package/dist/src/indexed/min-cut.d.ts.map +1 -0
- package/dist/src/indexed/min-cut.js +175 -0
- package/dist/src/indexed/min-cut.js.map +1 -0
- package/dist/src/indexed/modularity.d.ts +34 -0
- package/dist/src/indexed/modularity.d.ts.map +1 -0
- package/dist/src/indexed/modularity.js +74 -0
- package/dist/src/indexed/modularity.js.map +1 -0
- package/dist/src/indexed/mst.d.ts +29 -1
- package/dist/src/indexed/mst.d.ts.map +1 -1
- package/dist/src/indexed/mst.js +62 -0
- package/dist/src/indexed/mst.js.map +1 -1
- package/dist/src/indexed/pagerank.d.ts +29 -6
- package/dist/src/indexed/pagerank.d.ts.map +1 -1
- package/dist/src/indexed/pagerank.js +107 -11
- package/dist/src/indexed/pagerank.js.map +1 -1
- package/dist/src/indexed/point-to-point.d.ts +53 -0
- package/dist/src/indexed/point-to-point.d.ts.map +1 -0
- package/dist/src/indexed/point-to-point.js +173 -0
- package/dist/src/indexed/point-to-point.js.map +1 -0
- package/dist/src/indexed/scc.d.ts +53 -0
- package/dist/src/indexed/scc.d.ts.map +1 -0
- package/dist/src/indexed/scc.js +110 -0
- package/dist/src/indexed/scc.js.map +1 -0
- package/dist/src/indexed/spectral.d.ts +61 -0
- package/dist/src/indexed/spectral.d.ts.map +1 -0
- package/dist/src/indexed/spectral.js +476 -0
- package/dist/src/indexed/spectral.js.map +1 -0
- package/dist/src/indexed/structures/bit-set.d.ts +45 -0
- package/dist/src/indexed/structures/bit-set.d.ts.map +1 -0
- package/dist/src/indexed/structures/bit-set.js +57 -0
- package/dist/src/indexed/structures/bit-set.js.map +1 -0
- package/dist/src/indexed/structures/max-heap.d.ts +52 -0
- package/dist/src/indexed/structures/max-heap.d.ts.map +1 -0
- package/dist/src/indexed/structures/max-heap.js +66 -0
- package/dist/src/indexed/structures/max-heap.js.map +1 -0
- package/dist/src/indexed/structures/min-heap.d.ts +30 -1
- package/dist/src/indexed/structures/min-heap.d.ts.map +1 -1
- package/dist/src/indexed/structures/min-heap.js +46 -6
- package/dist/src/indexed/structures/min-heap.js.map +1 -1
- package/dist/src/indexed/structures/ring-queue.d.ts +41 -0
- package/dist/src/indexed/structures/ring-queue.d.ts.map +1 -0
- package/dist/src/indexed/structures/ring-queue.js +64 -0
- package/dist/src/indexed/structures/ring-queue.js.map +1 -0
- package/dist/src/indexed/sync.d.ts +50 -0
- package/dist/src/indexed/sync.d.ts.map +1 -0
- package/dist/src/indexed/sync.js +175 -0
- package/dist/src/indexed/sync.js.map +1 -0
- package/dist/src/indexed/terahac.d.ts +58 -0
- package/dist/src/indexed/terahac.d.ts.map +1 -0
- package/dist/src/indexed/terahac.js +244 -0
- package/dist/src/indexed/terahac.js.map +1 -0
- package/dist/src/indexed/to-snapshot.d.ts +45 -2
- package/dist/src/indexed/to-snapshot.d.ts.map +1 -1
- package/dist/src/indexed/to-snapshot.js +140 -6
- package/dist/src/indexed/to-snapshot.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors-legacy.d.ts +71 -0
- package/dist/src/link-prediction/common-neighbors-legacy.d.ts.map +1 -0
- package/dist/src/link-prediction/common-neighbors-legacy.js +172 -0
- package/dist/src/link-prediction/common-neighbors-legacy.js.map +1 -0
- package/dist/src/link-prediction/common-neighbors.d.ts +11 -19
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +56 -123
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/optimized/direction-optimized-bfs.d.ts +6 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -1
- package/dist/src/optimized/direction-optimized-bfs.js +6 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -1
- package/dist/src/research/grsbm-legacy.d.ts +82 -0
- package/dist/src/research/grsbm-legacy.d.ts.map +1 -0
- package/dist/src/research/grsbm-legacy.js +416 -0
- package/dist/src/research/grsbm-legacy.js.map +1 -0
- package/dist/src/research/grsbm.d.ts +9 -66
- package/dist/src/research/grsbm.d.ts.map +1 -1
- package/dist/src/research/grsbm.js +67 -391
- package/dist/src/research/grsbm.js.map +1 -1
- package/dist/src/research/sync-legacy.d.ts +48 -0
- package/dist/src/research/sync-legacy.d.ts.map +1 -0
- package/dist/src/research/sync-legacy.js +337 -0
- package/dist/src/research/sync-legacy.js.map +1 -0
- package/dist/src/research/sync.d.ts +10 -32
- package/dist/src/research/sync.d.ts.map +1 -1
- package/dist/src/research/sync.js +28 -316
- package/dist/src/research/sync.js.map +1 -1
- package/package.json +4 -3
- package/src/algorithms/centrality/betweenness.ts +51 -1
- package/src/algorithms/centrality/closeness.ts +112 -12
- package/src/algorithms/centrality/degree.ts +19 -0
- package/src/algorithms/centrality/eigenvector.ts +34 -0
- package/src/algorithms/centrality/hits.ts +24 -0
- package/src/algorithms/centrality/katz.ts +32 -0
- package/src/algorithms/centrality/pagerank.ts +53 -13
- package/src/algorithms/community/girvan-newman-legacy.ts +414 -0
- package/src/algorithms/community/girvan-newman.ts +36 -386
- package/src/algorithms/community/label-propagation.ts +24 -133
- package/src/algorithms/components/connected.ts +28 -95
- package/src/algorithms/mst/kruskal.ts +65 -4
- package/src/algorithms/shortest-path/bellman-ford.ts +49 -0
- package/src/algorithms/shortest-path/dijkstra.ts +29 -0
- package/src/algorithms/shortest-path/floyd-warshall.ts +106 -136
- package/src/algorithms/traversal/bfs-unified.ts +52 -366
- package/src/algorithms/traversal/bfs-variants.ts +5 -28
- package/src/algorithms/traversal/bfs.ts +0 -4
- package/src/algorithms/traversal/dfs.ts +39 -182
- package/src/clustering/hierarchical-legacy.ts +551 -0
- package/src/clustering/hierarchical.ts +64 -520
- package/src/clustering/k-core-legacy.ts +229 -0
- package/src/clustering/k-core.ts +38 -209
- package/src/clustering/mcl-legacy.ts +498 -0
- package/src/clustering/mcl.ts +46 -479
- package/src/index.ts +90 -3
- package/src/indexed/accelerator.ts +502 -16
- package/src/indexed/all-pairs.ts +342 -0
- package/src/indexed/bellman-ford.ts +72 -0
- package/src/indexed/betweenness.ts +258 -0
- package/src/indexed/bfs.ts +189 -3
- package/src/indexed/bipartite.ts +77 -0
- package/src/indexed/closeness.ts +160 -0
- package/src/indexed/common-neighbors.ts +31 -14
- package/src/indexed/degree.ts +55 -0
- package/src/indexed/delta-pagerank.ts +513 -0
- package/src/indexed/dfs.ts +189 -0
- package/src/indexed/eigenvector.ts +202 -0
- package/src/indexed/facade.ts +229 -0
- package/src/indexed/flow.ts +500 -0
- package/src/indexed/girvan-newman.ts +120 -0
- package/src/indexed/grsbm.ts +390 -0
- package/src/indexed/hierarchical.ts +295 -0
- package/src/indexed/index.ts +94 -3
- package/src/indexed/isomorphism.ts +305 -0
- package/src/indexed/label-propagation.ts +582 -0
- package/src/indexed/leiden.ts +436 -0
- package/src/indexed/link-prediction.ts +399 -0
- package/src/indexed/markov.ts +324 -0
- package/src/indexed/matching.ts +192 -0
- package/src/indexed/min-cut.ts +201 -0
- package/src/indexed/modularity.ts +81 -0
- package/src/indexed/mst.ts +79 -1
- package/src/indexed/pagerank.ts +128 -15
- package/src/indexed/point-to-point.ts +220 -0
- package/src/indexed/scc.ts +132 -0
- package/src/indexed/spectral.ts +550 -0
- package/src/indexed/structures/bit-set.ts +65 -0
- package/src/indexed/structures/max-heap.ts +74 -0
- package/src/indexed/structures/min-heap.ts +51 -6
- package/src/indexed/structures/ring-queue.ts +70 -0
- package/src/indexed/sync.ts +229 -0
- package/src/indexed/terahac.ts +290 -0
- package/src/indexed/to-snapshot.ts +156 -6
- package/src/link-prediction/common-neighbors-legacy.ts +252 -0
- package/src/link-prediction/common-neighbors.ts +65 -168
- package/src/optimized/direction-optimized-bfs.ts +6 -1
- package/src/research/grsbm-legacy.ts +586 -0
- package/src/research/grsbm.ts +76 -555
- package/src/research/sync-legacy.ts +456 -0
- package/src/research/sync.ts +30 -431
|
@@ -1,328 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hierarchical Clustering Algorithm
|
|
3
3
|
*
|
|
4
|
-
* Builds a hierarchy of clusters through agglomeration (bottom-up)
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Builds a hierarchy of clusters through agglomeration (bottom-up). `hierarchicalClustering`
|
|
5
|
+
* delegates to `indexed.hierarchicalClustering` over an unweighted snapshot of the graph (hop
|
|
6
|
+
* distances never read a weight) and rebuilds the legacy dendrogram from its merges; the result
|
|
7
|
+
* equals the pre-migration implementation in `hierarchical-legacy.ts` exactly.
|
|
7
8
|
*/
|
|
9
|
+
import { hierarchicalClustering as indexedHierarchicalClustering } from "../indexed/hierarchical.js";
|
|
10
|
+
import { toTopologySnapshot } from "../indexed/to-snapshot.js";
|
|
11
|
+
import { cutDendrogram, hierarchicalClustering as legacyHierarchicalClustering, } from "./hierarchical-legacy.js";
|
|
12
|
+
export { cutDendrogram, cutDendrogramKClusters, modularityHierarchicalClustering } from "./hierarchical-legacy.js";
|
|
13
|
+
const LINKAGES = ["single", "complete", "average", "ward"];
|
|
8
14
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
adjacency.set(String(node.id), new Set());
|
|
18
|
-
}
|
|
19
|
-
// Add edges
|
|
20
|
-
for (const edge of graph.edges()) {
|
|
21
|
-
const source = String(edge.source);
|
|
22
|
-
const target = String(edge.target);
|
|
23
|
-
const sourceSet = adjacency.get(source);
|
|
24
|
-
if (sourceSet) {
|
|
25
|
-
sourceSet.add(target);
|
|
26
|
-
}
|
|
27
|
-
// For undirected graphs, add reverse edge
|
|
28
|
-
if (!graph.isDirected) {
|
|
29
|
-
const targetSet = adjacency.get(target);
|
|
30
|
-
if (targetSet) {
|
|
31
|
-
targetSet.add(source);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return adjacency;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Compute distance between two nodes based on graph structure
|
|
39
|
-
* @param graph - Adjacency map representation of the graph
|
|
40
|
-
* @param distances - Map to store computed distances between nodes
|
|
41
|
-
*/
|
|
42
|
-
function computeGraphDistance(graph, distances) {
|
|
43
|
-
// Use BFS to compute shortest path distances
|
|
44
|
-
for (const start of graph.keys()) {
|
|
45
|
-
const dist = new Map();
|
|
46
|
-
const queue = [start];
|
|
47
|
-
dist.set(start, 0);
|
|
48
|
-
while (queue.length > 0) {
|
|
49
|
-
const node = queue.shift();
|
|
50
|
-
if (!node) {
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const neighbors = graph.get(node);
|
|
54
|
-
if (neighbors) {
|
|
55
|
-
for (const neighbor of neighbors) {
|
|
56
|
-
if (!dist.has(neighbor)) {
|
|
57
|
-
dist.set(neighbor, (dist.get(node) ?? 0) + 1);
|
|
58
|
-
queue.push(neighbor);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
distances.set(start, dist);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Compute distance between two clusters based on linkage method
|
|
68
|
-
* @param cluster1 - First cluster node
|
|
69
|
-
* @param cluster2 - Second cluster node
|
|
70
|
-
* @param distances - Precomputed distance matrix between nodes
|
|
71
|
-
* @param linkage - Linkage method to use for computing cluster distance
|
|
72
|
-
* @returns The distance between the two clusters
|
|
73
|
-
*/
|
|
74
|
-
function clusterDistance(cluster1, cluster2, distances, linkage) {
|
|
75
|
-
const allDistances = [];
|
|
76
|
-
for (const node1 of cluster1.members) {
|
|
77
|
-
const node1Distances = distances.get(node1);
|
|
78
|
-
if (!node1Distances) {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
for (const node2 of cluster2.members) {
|
|
82
|
-
const dist = node1Distances.get(node2);
|
|
83
|
-
if (dist !== undefined) {
|
|
84
|
-
allDistances.push(dist);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (allDistances.length === 0) {
|
|
89
|
-
return Infinity;
|
|
90
|
-
}
|
|
91
|
-
switch (linkage) {
|
|
92
|
-
case "single":
|
|
93
|
-
return Math.min(...allDistances);
|
|
94
|
-
case "complete":
|
|
95
|
-
return Math.max(...allDistances);
|
|
96
|
-
case "average":
|
|
97
|
-
return allDistances.reduce((a, b) => a + b, 0) / allDistances.length;
|
|
98
|
-
case "ward": {
|
|
99
|
-
// Simplified Ward's method - minimize within-cluster variance
|
|
100
|
-
const size1 = cluster1.members.size;
|
|
101
|
-
const size2 = cluster2.members.size;
|
|
102
|
-
const avgDist = allDistances.reduce((a, b) => a + b, 0) / allDistances.length;
|
|
103
|
-
return avgDist * ((size1 * size2) / (size1 + size2));
|
|
104
|
-
}
|
|
105
|
-
default:
|
|
106
|
-
return Math.min(...allDistances);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Internal implementation of agglomerative hierarchical clustering
|
|
111
|
-
* @param graph - Adjacency map representation of the graph
|
|
112
|
-
* @param linkage - Linkage method for cluster distance computation
|
|
113
|
-
* @returns Hierarchical clustering result with dendrogram and cluster assignments
|
|
114
|
-
*/
|
|
115
|
-
function hierarchicalClusteringImpl(graph, linkage = "single") {
|
|
116
|
-
const nodes = Array.from(graph.keys());
|
|
117
|
-
const n = nodes.length;
|
|
118
|
-
if (n === 0) {
|
|
119
|
-
return {
|
|
120
|
-
root: { id: "empty", members: new Set(), distance: 0, height: 0 },
|
|
121
|
-
dendrogram: [],
|
|
122
|
-
clusters: new Map(),
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
// Compute pairwise distances
|
|
126
|
-
const distances = new Map();
|
|
127
|
-
computeGraphDistance(graph, distances);
|
|
128
|
-
// Initialize clusters - each node is its own cluster
|
|
129
|
-
const clusters = nodes.map((node, i) => ({
|
|
130
|
-
id: `leaf-${String(i)}`,
|
|
131
|
-
members: new Set([node]),
|
|
132
|
-
distance: 0,
|
|
133
|
-
height: 0,
|
|
134
|
-
}));
|
|
135
|
-
const dendrogram = [...clusters];
|
|
136
|
-
let clusterCount = n;
|
|
137
|
-
// Distance matrix between clusters
|
|
138
|
-
const clusterDistances = new Map();
|
|
139
|
-
// Initialize cluster distances
|
|
140
|
-
for (let i = 0; i < clusters.length; i++) {
|
|
141
|
-
const cluster1 = clusters[i];
|
|
142
|
-
if (!cluster1) {
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
const distMap = new Map();
|
|
146
|
-
for (let j = i + 1; j < clusters.length; j++) {
|
|
147
|
-
const cluster2 = clusters[j];
|
|
148
|
-
if (!cluster2) {
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
const dist = clusterDistance(cluster1, cluster2, distances, linkage);
|
|
152
|
-
distMap.set(cluster2.id, dist);
|
|
153
|
-
}
|
|
154
|
-
clusterDistances.set(cluster1.id, distMap);
|
|
155
|
-
}
|
|
156
|
-
// Active clusters
|
|
157
|
-
const activeClusters = new Set(clusters);
|
|
158
|
-
// Merge clusters until only one remains
|
|
159
|
-
while (activeClusters.size > 1) {
|
|
160
|
-
// Find closest pair of clusters
|
|
161
|
-
let minDist = Infinity;
|
|
162
|
-
let mergeCluster1 = null;
|
|
163
|
-
let mergeCluster2 = null;
|
|
164
|
-
for (const cluster1 of activeClusters) {
|
|
165
|
-
const distMap = clusterDistances.get(cluster1.id);
|
|
166
|
-
if (!distMap) {
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
for (const cluster2 of activeClusters) {
|
|
170
|
-
if (cluster1.id >= cluster2.id) {
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
const dist = distMap.get(cluster2.id) ?? clusterDistances.get(cluster2.id)?.get(cluster1.id) ?? Infinity;
|
|
174
|
-
if (dist < minDist) {
|
|
175
|
-
minDist = dist;
|
|
176
|
-
mergeCluster1 = cluster1;
|
|
177
|
-
mergeCluster2 = cluster2;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (!mergeCluster1 || !mergeCluster2 || minDist === Infinity) {
|
|
182
|
-
// No valid merge found - create forest
|
|
183
|
-
const trees = Array.from(activeClusters);
|
|
184
|
-
const forestRoot = {
|
|
185
|
-
id: `forest-${String(clusterCount++)}`,
|
|
186
|
-
members: new Set(nodes),
|
|
187
|
-
distance: Infinity,
|
|
188
|
-
height: Math.max(...trees.map((t) => t.height)) + 1,
|
|
189
|
-
trees,
|
|
190
|
-
};
|
|
191
|
-
dendrogram.push(forestRoot);
|
|
192
|
-
activeClusters.clear();
|
|
193
|
-
activeClusters.add(forestRoot);
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
// Create new cluster
|
|
197
|
-
const newCluster = {
|
|
198
|
-
id: `cluster-${String(clusterCount++)}`,
|
|
199
|
-
members: new Set([...mergeCluster1.members, ...mergeCluster2.members]),
|
|
200
|
-
left: mergeCluster1,
|
|
201
|
-
right: mergeCluster2,
|
|
202
|
-
distance: minDist,
|
|
203
|
-
height: Math.max(mergeCluster1.height, mergeCluster2.height) + 1,
|
|
204
|
-
};
|
|
205
|
-
dendrogram.push(newCluster);
|
|
206
|
-
// Update distances to new cluster
|
|
207
|
-
const newDistMap = new Map();
|
|
208
|
-
for (const cluster of activeClusters) {
|
|
209
|
-
if (cluster.id === mergeCluster1.id || cluster.id === mergeCluster2.id) {
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const dist = clusterDistance(newCluster, cluster, distances, linkage);
|
|
213
|
-
newDistMap.set(cluster.id, dist);
|
|
214
|
-
// Update reverse direction
|
|
215
|
-
const clusterDistMap = clusterDistances.get(cluster.id);
|
|
216
|
-
if (clusterDistMap) {
|
|
217
|
-
clusterDistMap.set(newCluster.id, dist);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
clusterDistances.set(newCluster.id, newDistMap);
|
|
221
|
-
// Remove merged clusters
|
|
222
|
-
activeClusters.delete(mergeCluster1);
|
|
223
|
-
activeClusters.delete(mergeCluster2);
|
|
224
|
-
clusterDistances.delete(mergeCluster1.id);
|
|
225
|
-
clusterDistances.delete(mergeCluster2.id);
|
|
226
|
-
// Clean up references
|
|
227
|
-
for (const distMap of clusterDistances.values()) {
|
|
228
|
-
distMap.delete(mergeCluster1.id);
|
|
229
|
-
distMap.delete(mergeCluster2.id);
|
|
230
|
-
}
|
|
231
|
-
activeClusters.add(newCluster);
|
|
232
|
-
}
|
|
233
|
-
// Root is the last remaining cluster
|
|
234
|
-
const root = activeClusters.size > 0 ? Array.from(activeClusters)[0] : dendrogram[dendrogram.length - 1];
|
|
235
|
-
// Generate clusters at different heights
|
|
236
|
-
const clustersByLevel = new Map();
|
|
237
|
-
if (!root) {
|
|
238
|
-
return {
|
|
239
|
-
root: { id: "empty", members: new Set(), distance: 0, height: 0 },
|
|
240
|
-
dendrogram: [],
|
|
241
|
-
clusters: new Map(),
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
for (let h = 0; h <= root.height; h++) {
|
|
245
|
-
clustersByLevel.set(h, cutDendrogram(root, h));
|
|
246
|
-
}
|
|
247
|
-
return {
|
|
248
|
-
root,
|
|
249
|
-
dendrogram,
|
|
250
|
-
clusters: clustersByLevel,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Cut dendrogram at specific height to get clusters
|
|
255
|
-
* @param root - Root node of the dendrogram
|
|
256
|
-
* @param height - Height at which to cut the dendrogram
|
|
257
|
-
* @returns Array of sets representing clusters at the specified height
|
|
258
|
-
*/
|
|
259
|
-
export function cutDendrogram(root, height) {
|
|
260
|
-
const clusters = [];
|
|
261
|
-
function traverse(node) {
|
|
262
|
-
if (node.height <= height || (!node.left && !node.right)) {
|
|
263
|
-
clusters.push(node.members);
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
if (node.trees) {
|
|
267
|
-
// Handle forest nodes
|
|
268
|
-
for (const tree of node.trees) {
|
|
269
|
-
traverse(tree);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
if (node.left) {
|
|
274
|
-
traverse(node.left);
|
|
275
|
-
}
|
|
276
|
-
if (node.right) {
|
|
277
|
-
traverse(node.right);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
traverse(root);
|
|
283
|
-
return clusters;
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Cut dendrogram to get exactly k clusters
|
|
287
|
-
* @param root - Root node of the dendrogram
|
|
288
|
-
* @param k - Target number of clusters
|
|
289
|
-
* @returns Array of sets representing exactly k clusters
|
|
15
|
+
* Agglomerative hierarchical clustering
|
|
16
|
+
* Builds clusters bottom-up by merging closest pairs
|
|
17
|
+
* @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
|
|
18
|
+
* @param linkage - Linkage method for cluster distance
|
|
19
|
+
* @returns Hierarchical clustering result
|
|
20
|
+
*
|
|
21
|
+
* Time Complexity: O(n³) naive, O(n² log n) with heap
|
|
22
|
+
* Space Complexity: O(n²)
|
|
290
23
|
*/
|
|
291
|
-
export function
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
// Binary search for the right height
|
|
299
|
-
let low = 0;
|
|
300
|
-
let high = root.height;
|
|
301
|
-
while (low < high) {
|
|
302
|
-
const mid = Math.floor((low + high) / 2);
|
|
303
|
-
const clusters = cutDendrogram(root, mid);
|
|
304
|
-
if (clusters.length === k) {
|
|
305
|
-
return clusters;
|
|
306
|
-
}
|
|
307
|
-
else if (clusters.length < k) {
|
|
308
|
-
high = mid;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
low = mid + 1;
|
|
312
|
-
}
|
|
24
|
+
export function hierarchicalClustering(graph, linkage = "single") {
|
|
25
|
+
const s = toTopologySnapshot(graph);
|
|
26
|
+
const n = s.nodeCount;
|
|
27
|
+
const names = Array.from({ length: n }, (_, i) => String(s.ids.idOf(i)));
|
|
28
|
+
// The old code keys nodes by String(id), so ids spelled alike (1 and "1") are one node to it.
|
|
29
|
+
if (new Set(names).size !== n) {
|
|
30
|
+
return legacyHierarchicalClustering(graph, linkage);
|
|
313
31
|
}
|
|
314
|
-
return cutDendrogram(root, low);
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Compute modularity-based hierarchical clustering
|
|
318
|
-
* Uses modularity gain to decide merges
|
|
319
|
-
* @param graph - The input graph to cluster
|
|
320
|
-
* @returns Hierarchical clustering result with dendrogram and cluster assignments
|
|
321
|
-
*/
|
|
322
|
-
export function modularityHierarchicalClustering(graph) {
|
|
323
|
-
const adjacencySet = graphToAdjacencySet(graph);
|
|
324
|
-
const nodes = Array.from(adjacencySet.keys());
|
|
325
|
-
const n = nodes.length;
|
|
326
32
|
if (n === 0) {
|
|
327
33
|
return {
|
|
328
34
|
root: { id: "empty", members: new Set(), distance: 0, height: 0 },
|
|
@@ -330,112 +36,45 @@ export function modularityHierarchicalClustering(graph) {
|
|
|
330
36
|
clusters: new Map(),
|
|
331
37
|
};
|
|
332
38
|
}
|
|
333
|
-
//
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
for (const [node, neighbors] of adjacencySet) {
|
|
337
|
-
degrees.set(node, neighbors.size);
|
|
338
|
-
totalEdges += neighbors.size;
|
|
339
|
-
}
|
|
340
|
-
// For undirected graphs
|
|
341
|
-
totalEdges = totalEdges / 2;
|
|
342
|
-
// Initialize clusters
|
|
343
|
-
const clusters = nodes.map((node, i) => ({
|
|
39
|
+
// An unknown linkage falls through to single linkage, as it always has.
|
|
40
|
+
const r = indexedHierarchicalClustering(s, { linkage: LINKAGES.includes(linkage) ? linkage : "single" });
|
|
41
|
+
const dendrogram = names.map((name, i) => ({
|
|
344
42
|
id: `leaf-${String(i)}`,
|
|
345
|
-
members: new Set([
|
|
43
|
+
members: new Set([name]),
|
|
346
44
|
distance: 0,
|
|
347
45
|
height: 0,
|
|
348
46
|
}));
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
if (neighbors?.has(node2)) {
|
|
374
|
-
edgesBetween++;
|
|
375
|
-
}
|
|
376
|
-
const degree2 = degrees.get(node2) ?? 0;
|
|
377
|
-
degreeProduct += degree1 * degree2;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
const gain = edgesBetween / totalEdges - degreeProduct / (4 * totalEdges * totalEdges);
|
|
381
|
-
if (gain > maxGain) {
|
|
382
|
-
maxGain = gain;
|
|
383
|
-
mergeCluster1 = cluster1;
|
|
384
|
-
mergeCluster2 = cluster2;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
if (!mergeCluster1 || !mergeCluster2) {
|
|
389
|
-
break;
|
|
390
|
-
}
|
|
391
|
-
// Create new cluster
|
|
392
|
-
const newCluster = {
|
|
393
|
-
id: `cluster-${String(clusterCount++)}`,
|
|
394
|
-
members: new Set([...mergeCluster1.members, ...mergeCluster2.members]),
|
|
395
|
-
left: mergeCluster1,
|
|
396
|
-
right: mergeCluster2,
|
|
397
|
-
distance: -maxGain, // Use negative gain as distance
|
|
398
|
-
height: Math.max(mergeCluster1.height, mergeCluster2.height) + 1,
|
|
399
|
-
};
|
|
400
|
-
dendrogram.push(newCluster);
|
|
401
|
-
// Remove old and add new
|
|
402
|
-
activeClusters.delete(mergeCluster1);
|
|
403
|
-
activeClusters.delete(mergeCluster2);
|
|
404
|
-
activeClusters.add(newCluster);
|
|
405
|
-
}
|
|
406
|
-
// Root is the last remaining cluster
|
|
407
|
-
const root = Array.from(activeClusters)[0] ?? dendrogram[dendrogram.length - 1];
|
|
408
|
-
// Generate clusters at different heights
|
|
409
|
-
const clustersByLevel = new Map();
|
|
410
|
-
if (!root) {
|
|
411
|
-
return {
|
|
412
|
-
root: { id: "empty", members: new Set(), distance: 0, height: 0 },
|
|
413
|
-
dendrogram: [],
|
|
414
|
-
clusters: new Map(),
|
|
47
|
+
for (let k = 0; k < r.left.length; k++) {
|
|
48
|
+
const left = dendrogram[r.left[k]];
|
|
49
|
+
const right = dendrogram[r.right[k]];
|
|
50
|
+
dendrogram.push({
|
|
51
|
+
id: `cluster-${String(n + k)}`,
|
|
52
|
+
members: new Set([...left.members, ...right.members]),
|
|
53
|
+
left,
|
|
54
|
+
right,
|
|
55
|
+
distance: r.distance[k],
|
|
56
|
+
height: r.height[n + k],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
let root;
|
|
60
|
+
if (r.roots.length === 1) {
|
|
61
|
+
root = dendrogram[r.roots[0]];
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const trees = Array.from(r.roots, (c) => dendrogram[c]);
|
|
65
|
+
root = {
|
|
66
|
+
id: `forest-${String(dendrogram.length)}`,
|
|
67
|
+
members: new Set(names),
|
|
68
|
+
distance: Infinity,
|
|
69
|
+
height: Math.max(...trees.map((t) => t.height)) + 1,
|
|
70
|
+
trees,
|
|
415
71
|
};
|
|
72
|
+
dendrogram.push(root);
|
|
416
73
|
}
|
|
74
|
+
const clusters = new Map();
|
|
417
75
|
for (let h = 0; h <= root.height; h++) {
|
|
418
|
-
|
|
76
|
+
clusters.set(h, cutDendrogram(root, h));
|
|
419
77
|
}
|
|
420
|
-
return {
|
|
421
|
-
root,
|
|
422
|
-
dendrogram,
|
|
423
|
-
clusters: clustersByLevel,
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* Agglomerative hierarchical clustering
|
|
428
|
-
* Builds clusters bottom-up by merging closest pairs
|
|
429
|
-
* @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
|
|
430
|
-
* @param linkage - Linkage method for cluster distance
|
|
431
|
-
* @returns Hierarchical clustering result
|
|
432
|
-
*
|
|
433
|
-
* Time Complexity: O(n³) naive, O(n² log n) with heap
|
|
434
|
-
* Space Complexity: O(n²)
|
|
435
|
-
*/
|
|
436
|
-
export function hierarchicalClustering(graph, linkage = "single") {
|
|
437
|
-
// Convert Graph to adjacency set representation
|
|
438
|
-
const adjacencySet = graphToAdjacencySet(graph);
|
|
439
|
-
return hierarchicalClusteringImpl(adjacencySet, linkage);
|
|
78
|
+
return { root, dendrogram, clusters };
|
|
440
79
|
}
|
|
441
80
|
//# sourceMappingURL=hierarchical.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchical.js","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hierarchical.js","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The k-core decomposition as it was before `kCoreDecomposition` delegated to
|
|
3
|
+
* `indexed.kCoreDecomposition`, unchanged. The facade in `k-core.ts` still calls it for the graphs
|
|
4
|
+
* the port cannot answer the same way (a directed graph, a self-loop, a NaN weight, ids spelled alike), its facade
|
|
5
|
+
* test uses it as the oracle, and the other k-core functions read the graph through
|
|
6
|
+
* `graphToAdjacencySet`.
|
|
7
|
+
*/
|
|
8
|
+
import type { Graph } from "../core/graph.js";
|
|
9
|
+
/**
|
|
10
|
+
* Convert Graph to adjacency set representation
|
|
11
|
+
* @param graph - The input graph to convert
|
|
12
|
+
* @returns Map of node IDs to sets of neighbor node IDs
|
|
13
|
+
*/
|
|
14
|
+
export declare function graphToAdjacencySet(graph: Graph): Map<string, Set<string>>;
|
|
15
|
+
export interface KCoreResult<T> {
|
|
16
|
+
cores: Map<number, Set<T>>;
|
|
17
|
+
coreness: Map<T, number>;
|
|
18
|
+
maxCore: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* K-Core decomposition algorithm
|
|
22
|
+
* Finds all k-cores in the graph and assigns coreness values to nodes
|
|
23
|
+
* @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
|
|
24
|
+
* @returns K-core decomposition results
|
|
25
|
+
*
|
|
26
|
+
* Time Complexity: O(V + E)
|
|
27
|
+
* Space Complexity: O(V)
|
|
28
|
+
*/
|
|
29
|
+
export declare function kCoreDecomposition(graph: Graph): KCoreResult<string>;
|
|
30
|
+
//# sourceMappingURL=k-core-legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k-core-legacy.d.ts","sourceRoot":"","sources":["../../../src/clustering/k-core-legacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CA4B1E;AAED,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;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAIpE"}
|