@graphty/algorithms 1.2.0 → 1.4.2
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 +375 -276
- package/dist/algorithms.d.ts +42 -2
- package/dist/algorithms.js +11402 -2
- package/dist/algorithms.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +14 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +144 -169
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +35 -1
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +70 -149
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.d.ts +7 -0
- package/dist/src/algorithms/centrality/degree.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +12 -9
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +57 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js +304 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts +106 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js +320 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
- package/dist/src/algorithms/centrality/eigenvector.d.ts +10 -3
- package/dist/src/algorithms/centrality/eigenvector.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/eigenvector.js +11 -4
- package/dist/src/algorithms/centrality/eigenvector.js.map +1 -1
- package/dist/src/algorithms/centrality/hits.d.ts +10 -3
- package/dist/src/algorithms/centrality/hits.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/hits.js +11 -4
- package/dist/src/algorithms/centrality/hits.js.map +1 -1
- package/dist/src/algorithms/centrality/index.d.ts +3 -1
- package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/index.js +2 -1
- package/dist/src/algorithms/centrality/index.js.map +1 -1
- package/dist/src/algorithms/centrality/katz.d.ts +10 -3
- package/dist/src/algorithms/centrality/katz.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/katz.js +13 -8
- package/dist/src/algorithms/centrality/katz.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +31 -0
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +61 -1
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.d.ts +2 -3
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +67 -57
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/community/index.d.ts +2 -0
- package/dist/src/algorithms/community/index.d.ts.map +1 -1
- package/dist/src/algorithms/community/index.js.map +1 -1
- package/dist/src/algorithms/community/label-propagation.d.ts +11 -4
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +60 -38
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/community/leiden.d.ts +3 -3
- package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
- package/dist/src/algorithms/community/leiden.js +70 -44
- package/dist/src/algorithms/community/leiden.js.map +1 -1
- package/dist/src/algorithms/community/louvain-optimized.d.ts +149 -0
- package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
- package/dist/src/algorithms/community/louvain-optimized.js +338 -0
- package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
- package/dist/src/algorithms/community/louvain.d.ts +2 -3
- package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
- package/dist/src/algorithms/community/louvain.js +35 -81
- package/dist/src/algorithms/community/louvain.js.map +1 -1
- package/dist/src/algorithms/community/modularity-utils.d.ts +55 -0
- package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
- package/dist/src/algorithms/community/modularity-utils.js +108 -0
- package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
- package/dist/src/algorithms/components/connected.d.ts +23 -0
- package/dist/src/algorithms/components/connected.d.ts.map +1 -1
- package/dist/src/algorithms/components/connected.js +29 -3
- package/dist/src/algorithms/components/connected.js.map +1 -1
- package/dist/src/algorithms/matching/bipartite.d.ts +10 -0
- package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
- package/dist/src/algorithms/matching/bipartite.js +18 -40
- package/dist/src/algorithms/matching/bipartite.js.map +1 -1
- package/dist/src/algorithms/matching/index.d.ts.map +1 -1
- package/dist/src/algorithms/matching/index.js.map +1 -1
- package/dist/src/algorithms/matching/isomorphism.d.ts +8 -0
- package/dist/src/algorithms/matching/isomorphism.d.ts.map +1 -1
- package/dist/src/algorithms/matching/isomorphism.js +36 -2
- package/dist/src/algorithms/matching/isomorphism.js.map +1 -1
- package/dist/src/algorithms/mst/index.d.ts.map +1 -1
- package/dist/src/algorithms/mst/index.js.map +1 -1
- package/dist/src/algorithms/mst/kruskal.d.ts +14 -0
- package/dist/src/algorithms/mst/kruskal.d.ts.map +1 -1
- package/dist/src/algorithms/mst/kruskal.js +17 -3
- package/dist/src/algorithms/mst/kruskal.js.map +1 -1
- package/dist/src/algorithms/mst/prim.d.ts +9 -0
- package/dist/src/algorithms/mst/prim.d.ts.map +1 -1
- package/dist/src/algorithms/mst/prim.js +9 -0
- package/dist/src/algorithms/mst/prim.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts +10 -0
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +11 -12
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +44 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +195 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts +20 -2
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +30 -14
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts +17 -0
- package/dist/src/algorithms/shortest-path/floyd-warshall.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/floyd-warshall.js +17 -0
- package/dist/src/algorithms/shortest-path/floyd-warshall.js.map +1 -1
- package/dist/src/algorithms/shortest-path/index.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/index.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +42 -0
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-unified.js +370 -0
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts +77 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.js +402 -0
- package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
- package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs.js +5 -182
- package/dist/src/algorithms/traversal/bfs.js.map +1 -1
- package/dist/src/algorithms/traversal/dfs.d.ts +10 -0
- package/dist/src/algorithms/traversal/dfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/dfs.js +48 -0
- package/dist/src/algorithms/traversal/dfs.js.map +1 -1
- package/dist/src/algorithms/traversal/index.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/index.js.map +1 -1
- package/dist/src/benchmark-all-algorithms.d.ts +25 -0
- package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
- package/dist/src/benchmark-all-algorithms.js +491 -0
- package/dist/src/benchmark-all-algorithms.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +23 -15
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +226 -224
- package/dist/src/clustering/hierarchical.js.map +1 -1
- package/dist/src/clustering/index.d.ts +4 -2
- package/dist/src/clustering/index.d.ts.map +1 -1
- package/dist/src/clustering/index.js +2 -2
- package/dist/src/clustering/index.js.map +1 -1
- package/dist/src/clustering/k-core.d.ts +17 -19
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +68 -30
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/mcl.d.ts +6 -0
- package/dist/src/clustering/mcl.d.ts.map +1 -1
- package/dist/src/clustering/mcl.js +34 -3
- package/dist/src/clustering/mcl.js.map +1 -1
- package/dist/src/clustering/spectral.d.ts +11 -0
- package/dist/src/clustering/spectral.d.ts.map +1 -1
- package/dist/src/clustering/spectral.js +99 -47
- package/dist/src/clustering/spectral.js.map +1 -1
- package/dist/src/core/graph.d.ts +45 -0
- package/dist/src/core/graph.d.ts.map +1 -1
- package/dist/src/core/graph.js +49 -5
- package/dist/src/core/graph.js.map +1 -1
- package/dist/src/data-structures/index.d.ts.map +1 -1
- package/dist/src/data-structures/index.js.map +1 -1
- package/dist/src/data-structures/priority-queue.d.ts +18 -1
- package/dist/src/data-structures/priority-queue.d.ts.map +1 -1
- package/dist/src/data-structures/priority-queue.js +26 -5
- package/dist/src/data-structures/priority-queue.js.map +1 -1
- package/dist/src/data-structures/union-find.d.ts +21 -0
- package/dist/src/data-structures/union-find.d.ts.map +1 -1
- package/dist/src/data-structures/union-find.js +21 -0
- package/dist/src/data-structures/union-find.js.map +1 -1
- package/dist/src/flow/ford-fulkerson.d.ts +20 -12
- package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
- package/dist/src/flow/ford-fulkerson.js +170 -217
- package/dist/src/flow/ford-fulkerson.js.map +1 -1
- package/dist/src/flow/min-cut.d.ts +6 -8
- package/dist/src/flow/min-cut.d.ts.map +1 -1
- package/dist/src/flow/min-cut.js +34 -12
- package/dist/src/flow/min-cut.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/link-prediction/adamic-adar.d.ts +26 -0
- package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
- package/dist/src/link-prediction/adamic-adar.js +47 -30
- package/dist/src/link-prediction/adamic-adar.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors.d.ts +21 -0
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +31 -14
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/link-prediction/index.d.ts.map +1 -1
- package/dist/src/optimized/bit-packed.d.ts +193 -0
- package/dist/src/optimized/bit-packed.d.ts.map +1 -0
- package/dist/src/optimized/bit-packed.js +342 -0
- package/dist/src/optimized/bit-packed.js.map +1 -0
- package/dist/src/optimized/csr-graph.d.ts +149 -0
- package/dist/src/optimized/csr-graph.d.ts.map +1 -0
- package/dist/src/optimized/csr-graph.js +404 -0
- package/dist/src/optimized/csr-graph.js.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts +95 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.js +242 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
- package/dist/src/optimized/graph-adapter.d.ts +111 -0
- package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
- package/dist/src/optimized/graph-adapter.js +194 -0
- package/dist/src/optimized/graph-adapter.js.map +1 -0
- package/dist/src/optimized/index.d.ts +14 -0
- package/dist/src/optimized/index.d.ts.map +1 -0
- package/dist/src/optimized/index.js +30 -0
- package/dist/src/optimized/index.js.map +1 -0
- package/dist/src/pathfinding/astar.d.ts +25 -9
- package/dist/src/pathfinding/astar.d.ts.map +1 -1
- package/dist/src/pathfinding/astar.js +25 -10
- package/dist/src/pathfinding/astar.js.map +1 -1
- package/dist/src/pathfinding/utils.d.ts +15 -6
- package/dist/src/pathfinding/utils.d.ts.map +1 -1
- package/dist/src/pathfinding/utils.js +19 -7
- package/dist/src/pathfinding/utils.js.map +1 -1
- package/dist/src/research/grsbm.d.ts +0 -1
- package/dist/src/research/grsbm.d.ts.map +1 -1
- package/dist/src/research/grsbm.js +28 -23
- package/dist/src/research/grsbm.js.map +1 -1
- package/dist/src/research/index.d.ts.map +1 -1
- package/dist/src/research/index.js.map +1 -1
- package/dist/src/research/sync.d.ts +0 -1
- package/dist/src/research/sync.d.ts.map +1 -1
- package/dist/src/research/sync.js +31 -36
- package/dist/src/research/sync.js.map +1 -1
- package/dist/src/research/terahac.d.ts +2 -1
- package/dist/src/research/terahac.d.ts.map +1 -1
- package/dist/src/research/terahac.js +39 -7
- package/dist/src/research/terahac.js.map +1 -1
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/algorithm-utilities.d.ts +2 -0
- package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
- package/dist/src/utils/algorithm-utilities.js +2 -0
- package/dist/src/utils/algorithm-utilities.js.map +1 -0
- package/dist/src/utils/graph-converters.d.ts +110 -0
- package/dist/src/utils/graph-converters.d.ts.map +1 -0
- package/dist/src/utils/graph-converters.js +227 -0
- package/dist/src/utils/graph-converters.js.map +1 -0
- package/dist/src/utils/graph-utilities.d.ts +62 -0
- package/dist/src/utils/graph-utilities.d.ts.map +1 -0
- package/dist/src/utils/graph-utilities.js +148 -0
- package/dist/src/utils/graph-utilities.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/math-utilities.d.ts +63 -0
- package/dist/src/utils/math-utilities.d.ts.map +1 -0
- package/dist/src/utils/math-utilities.js +132 -0
- package/dist/src/utils/math-utilities.js.map +1 -0
- package/dist/src/utils/matrix-utilities.d.ts +2 -0
- package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
- package/dist/src/utils/matrix-utilities.js +2 -0
- package/dist/src/utils/matrix-utilities.js.map +1 -0
- package/dist/src/utils/optimization-helpers.d.ts +42 -0
- package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
- package/dist/src/utils/optimization-helpers.js +59 -0
- package/dist/src/utils/optimization-helpers.js.map +1 -0
- package/dist/src/utils/priorityQueue.d.ts +24 -0
- package/dist/src/utils/priorityQueue.d.ts.map +1 -1
- package/dist/src/utils/priorityQueue.js +34 -4
- package/dist/src/utils/priorityQueue.js.map +1 -1
- package/package.json +58 -39
- package/src/algorithms/centrality/betweenness.ts +185 -200
- package/src/algorithms/centrality/closeness.ts +93 -194
- package/src/algorithms/centrality/degree.ts +18 -22
- package/src/algorithms/centrality/delta-pagerank-simple.ts +374 -0
- package/src/algorithms/centrality/delta-pagerank.ts +458 -0
- package/src/algorithms/centrality/eigenvector.ts +14 -15
- package/src/algorithms/centrality/hits.ts +17 -17
- package/src/algorithms/centrality/index.ts +20 -13
- package/src/algorithms/centrality/katz.ts +17 -25
- package/src/algorithms/centrality/pagerank.ts +91 -16
- package/src/algorithms/community/girvan-newman.ts +90 -86
- package/src/algorithms/community/index.ts +6 -5
- package/src/algorithms/community/label-propagation.ts +69 -48
- package/src/algorithms/community/leiden.ts +88 -65
- package/src/algorithms/community/louvain-optimized.ts +474 -0
- package/src/algorithms/community/louvain.ts +52 -122
- package/src/algorithms/community/modularity-utils.ts +134 -0
- package/src/algorithms/components/connected.ts +40 -17
- package/src/algorithms/matching/bipartite.ts +24 -53
- package/src/algorithms/matching/index.ts +4 -4
- package/src/algorithms/matching/isomorphism.ts +53 -23
- package/src/algorithms/mst/index.ts +3 -4
- package/src/algorithms/mst/kruskal.ts +21 -6
- package/src/algorithms/mst/prim.ts +13 -4
- package/src/algorithms/shortest-path/bellman-ford.ts +16 -28
- package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
- package/src/algorithms/shortest-path/dijkstra.ts +38 -30
- package/src/algorithms/shortest-path/floyd-warshall.ts +21 -4
- package/src/algorithms/shortest-path/index.ts +5 -5
- package/src/algorithms/traversal/bfs-unified.ts +437 -0
- package/src/algorithms/traversal/bfs-variants.ts +520 -0
- package/src/algorithms/traversal/bfs.ts +5 -229
- package/src/algorithms/traversal/dfs.ts +61 -42
- package/src/algorithms/traversal/index.ts +3 -3
- package/src/benchmark-all-algorithms.ts +580 -0
- package/src/clustering/hierarchical.ts +268 -272
- package/src/clustering/index.ts +8 -6
- package/src/clustering/k-core.ts +93 -61
- package/src/clustering/mcl.ts +53 -23
- package/src/clustering/spectral.ts +130 -72
- package/src/core/graph.ts +58 -18
- package/src/data-structures/index.ts +2 -2
- package/src/data-structures/priority-queue.ts +36 -11
- package/src/data-structures/union-find.ts +22 -1
- package/src/flow/ford-fulkerson.ts +221 -262
- package/src/flow/min-cut.ts +59 -51
- package/src/index.ts +9 -2
- package/src/link-prediction/adamic-adar.ts +75 -74
- package/src/link-prediction/common-neighbors.ts +49 -49
- package/src/link-prediction/index.ts +1 -1
- package/src/optimized/bit-packed.ts +390 -0
- package/src/optimized/csr-graph.ts +518 -0
- package/src/optimized/direction-optimized-bfs.ts +310 -0
- package/src/optimized/graph-adapter.ts +248 -0
- package/src/optimized/index.ts +34 -0
- package/src/pathfinding/astar.ts +40 -25
- package/src/pathfinding/utils.ts +20 -13
- package/src/research/grsbm.ts +36 -39
- package/src/research/index.ts +4 -4
- package/src/research/sync.ts +41 -54
- package/src/research/terahac.ts +63 -21
- package/src/types/index.ts +8 -0
- package/src/utils/algorithm-utilities.ts +2 -0
- package/src/utils/graph-converters.ts +269 -0
- package/src/utils/graph-utilities.ts +173 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/math-utilities.ts +149 -0
- package/src/utils/matrix-utilities.ts +2 -0
- package/src/utils/optimization-helpers.ts +87 -0
- package/src/utils/priorityQueue.ts +40 -6
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* Comprehensive benchmark suite for ALL 98 algorithms in @graphty/algorithms
|
|
4
|
+
*
|
|
5
|
+
* Two modes:
|
|
6
|
+
* - Full benchmark: Completes in under 1 hour
|
|
7
|
+
* - Quick benchmark: Completes in under 2 minutes
|
|
8
|
+
*/
|
|
9
|
+
import * as algorithms from "./algorithms/index.js";
|
|
10
|
+
import { Graph } from "./core/graph.js";
|
|
11
|
+
const ALGORITHM_CATEGORIES = {
|
|
12
|
+
traversal: {
|
|
13
|
+
algorithms: [
|
|
14
|
+
"breadthFirstSearch",
|
|
15
|
+
"isBipartite",
|
|
16
|
+
"shortestPathBFS",
|
|
17
|
+
"singleSourceShortestPathBFS",
|
|
18
|
+
"depthFirstSearch",
|
|
19
|
+
"findStronglyConnectedComponents",
|
|
20
|
+
"hasCycleDFS",
|
|
21
|
+
"topologicalSort",
|
|
22
|
+
],
|
|
23
|
+
config: {
|
|
24
|
+
name: "Traversal",
|
|
25
|
+
quick: { nodes: 1000, edges: 5000, runs: 3 },
|
|
26
|
+
full: { nodes: 10000, edges: 50000, runs: 10 },
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
shortestPath: {
|
|
30
|
+
algorithms: [
|
|
31
|
+
"bellmanFord",
|
|
32
|
+
"bellmanFordPath",
|
|
33
|
+
"hasNegativeCycle",
|
|
34
|
+
"allPairsShortestPath",
|
|
35
|
+
"dijkstra",
|
|
36
|
+
"dijkstraPath",
|
|
37
|
+
"singleSourceShortestPath",
|
|
38
|
+
"floydWarshall",
|
|
39
|
+
"floydWarshallPath",
|
|
40
|
+
"transitiveClosure",
|
|
41
|
+
],
|
|
42
|
+
config: {
|
|
43
|
+
name: "Shortest Path",
|
|
44
|
+
quick: { nodes: 100, edges: 500, runs: 1 }, // Smaller for O(V³) algorithms
|
|
45
|
+
full: { nodes: 500, edges: 2500, runs: 3 },
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
centrality: {
|
|
49
|
+
algorithms: [
|
|
50
|
+
"betweennessCentrality",
|
|
51
|
+
"closenessCentrality",
|
|
52
|
+
"degreeCentrality",
|
|
53
|
+
"eigenvectorCentrality",
|
|
54
|
+
"hits",
|
|
55
|
+
"katzCentrality",
|
|
56
|
+
"pageRank",
|
|
57
|
+
"personalizedPageRank",
|
|
58
|
+
],
|
|
59
|
+
config: {
|
|
60
|
+
name: "Centrality",
|
|
61
|
+
quick: { nodes: 500, edges: 2500, runs: 1 },
|
|
62
|
+
full: { nodes: 2000, edges: 10000, runs: 3 },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
components: {
|
|
66
|
+
algorithms: [
|
|
67
|
+
"connectedComponents",
|
|
68
|
+
"connectedComponentsDFS",
|
|
69
|
+
"stronglyConnectedComponents",
|
|
70
|
+
"weaklyConnectedComponents",
|
|
71
|
+
"isConnected",
|
|
72
|
+
"isStronglyConnected",
|
|
73
|
+
"isWeaklyConnected",
|
|
74
|
+
"numberOfConnectedComponents",
|
|
75
|
+
"largestConnectedComponent",
|
|
76
|
+
"getConnectedComponent",
|
|
77
|
+
],
|
|
78
|
+
config: {
|
|
79
|
+
name: "Components",
|
|
80
|
+
quick: { nodes: 2000, edges: 10000, runs: 3 },
|
|
81
|
+
full: { nodes: 10000, edges: 50000, runs: 10 },
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
mst: {
|
|
85
|
+
algorithms: ["kruskalMST", "primMST", "minimumSpanningTree"],
|
|
86
|
+
config: {
|
|
87
|
+
name: "Minimum Spanning Tree",
|
|
88
|
+
quick: { nodes: 1000, edges: 5000, runs: 5 },
|
|
89
|
+
full: { nodes: 5000, edges: 25000, runs: 10 },
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
community: {
|
|
93
|
+
algorithms: ["girvanNewman", "labelPropagation", "leiden", "louvain"],
|
|
94
|
+
config: {
|
|
95
|
+
name: "Community Detection",
|
|
96
|
+
quick: { nodes: 200, edges: 1000, runs: 1 }, // Very expensive algorithms
|
|
97
|
+
full: { nodes: 1000, edges: 5000, runs: 2 },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
matching: {
|
|
101
|
+
algorithms: ["bipartitePartition", "greedyBipartiteMatching", "maximumBipartiteMatching"],
|
|
102
|
+
config: {
|
|
103
|
+
name: "Matching",
|
|
104
|
+
quick: { nodes: 500, edges: 1000, runs: 3 },
|
|
105
|
+
full: { nodes: 2000, edges: 4000, runs: 5 },
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Main benchmark runner
|
|
111
|
+
* @param mode - The benchmark mode: "quick" for fast tests or "full" for comprehensive tests
|
|
112
|
+
* @returns Array of benchmark results for all tested algorithms
|
|
113
|
+
*/
|
|
114
|
+
export function runAllAlgorithmsBenchmark(mode = "full") {
|
|
115
|
+
const startTime = Date.now();
|
|
116
|
+
const timeLimit = mode === "quick" ? 2 * 60 * 1000 : 60 * 60 * 1000; // 2 min or 1 hour
|
|
117
|
+
console.log(`🚀 ${mode === "quick" ? "Quick" : "Comprehensive"} Benchmark - All ${String(getTotalAlgorithmCount())} Algorithms`);
|
|
118
|
+
console.log(`=${"=".repeat(60)}`);
|
|
119
|
+
console.log(`Time limit: ${mode === "quick" ? "2 minutes" : "1 hour"}`);
|
|
120
|
+
console.log(`Start time: ${new Date().toLocaleTimeString()}\n`);
|
|
121
|
+
const results = [];
|
|
122
|
+
let totalTested = 0;
|
|
123
|
+
let totalPassed = 0;
|
|
124
|
+
for (const [categoryKey, categoryData] of Object.entries(ALGORITHM_CATEGORIES)) {
|
|
125
|
+
const elapsed = Date.now() - startTime;
|
|
126
|
+
if (elapsed > timeLimit) {
|
|
127
|
+
console.log("⏰ Time limit reached, stopping benchmark");
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
console.log(`\n📊 ${categoryData.config.name} Algorithms`);
|
|
131
|
+
console.log("-".repeat(categoryData.config.name.length + 12));
|
|
132
|
+
const config = categoryData.config[mode];
|
|
133
|
+
const graph = createTestGraph(config.nodes, config.edges, categoryKey);
|
|
134
|
+
for (const algoName of categoryData.algorithms) {
|
|
135
|
+
const elapsed = Date.now() - startTime;
|
|
136
|
+
if (elapsed > timeLimit) {
|
|
137
|
+
console.log(`⏰ Time limit reached in category ${categoryData.config.name}`);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
const result = benchmarkAlgorithm(algoName, categoryData.config.name, graph, config.runs, mode);
|
|
141
|
+
results.push(result);
|
|
142
|
+
totalTested++;
|
|
143
|
+
if (result.success) {
|
|
144
|
+
totalPassed++;
|
|
145
|
+
console.log(` ✅ ${algoName}: ${result.executionTime.toFixed(2)}ms`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log(` ❌ ${algoName}: ${result.error?.substring(0, 50) ?? "Failed"}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const totalTime = (Date.now() - startTime) / 1000;
|
|
153
|
+
console.log("\n📈 Benchmark Complete");
|
|
154
|
+
console.log("===================");
|
|
155
|
+
console.log(`Total time: ${totalTime.toFixed(1)}s`);
|
|
156
|
+
console.log(`Algorithms tested: ${String(totalTested)}`);
|
|
157
|
+
console.log(`Success rate: ${String(totalPassed)}/${String(totalTested)} (${((totalPassed / totalTested) * 100).toFixed(1)}%)`);
|
|
158
|
+
if (mode === "full") {
|
|
159
|
+
displayDetailedResults(results);
|
|
160
|
+
}
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Benchmark a single algorithm
|
|
165
|
+
* @param algoName - The name of the algorithm to benchmark
|
|
166
|
+
* @param category - The category the algorithm belongs to
|
|
167
|
+
* @param graph - The test graph to run the algorithm on
|
|
168
|
+
* @param runs - Number of times to run the algorithm for averaging
|
|
169
|
+
* @param mode - The benchmark mode (quick or full)
|
|
170
|
+
* @returns The benchmark result containing timing and success information
|
|
171
|
+
*/
|
|
172
|
+
function benchmarkAlgorithm(algoName, category, graph, runs, mode) {
|
|
173
|
+
const algo = algorithms[algoName];
|
|
174
|
+
if (!algo || typeof algo !== "function") {
|
|
175
|
+
return {
|
|
176
|
+
algorithm: algoName,
|
|
177
|
+
category,
|
|
178
|
+
executionTime: 0,
|
|
179
|
+
success: false,
|
|
180
|
+
error: "Algorithm not found or not a function",
|
|
181
|
+
nodeCount: graph.nodeCount,
|
|
182
|
+
edgeCount: graph.uniqueEdgeCount,
|
|
183
|
+
mode,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const times = [];
|
|
188
|
+
for (let i = 0; i < runs; i++) {
|
|
189
|
+
const args = getAlgorithmArgs(algoName, graph);
|
|
190
|
+
const start = performance.now();
|
|
191
|
+
algo(...args);
|
|
192
|
+
const time = performance.now() - start;
|
|
193
|
+
times.push(time);
|
|
194
|
+
}
|
|
195
|
+
// Use median time to avoid outliers
|
|
196
|
+
times.sort((a, b) => a - b);
|
|
197
|
+
const medianTime = times[Math.floor(times.length / 2)] ?? 0;
|
|
198
|
+
return {
|
|
199
|
+
algorithm: algoName,
|
|
200
|
+
category,
|
|
201
|
+
executionTime: medianTime,
|
|
202
|
+
success: true,
|
|
203
|
+
nodeCount: graph.nodeCount,
|
|
204
|
+
edgeCount: graph.uniqueEdgeCount,
|
|
205
|
+
mode,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
return {
|
|
210
|
+
algorithm: algoName,
|
|
211
|
+
category,
|
|
212
|
+
executionTime: 0,
|
|
213
|
+
success: false,
|
|
214
|
+
error: error instanceof Error ? error.message : String(error),
|
|
215
|
+
nodeCount: graph.nodeCount,
|
|
216
|
+
edgeCount: graph.uniqueEdgeCount,
|
|
217
|
+
mode,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get appropriate arguments for each algorithm
|
|
223
|
+
* @param algoName - The name of the algorithm to get arguments for
|
|
224
|
+
* @param graph - The base graph to use for generating arguments
|
|
225
|
+
* @returns Array of arguments to pass to the algorithm function
|
|
226
|
+
*/
|
|
227
|
+
function getAlgorithmArgs(algoName, graph) {
|
|
228
|
+
// Get random nodes for algorithms that need them
|
|
229
|
+
const nodes = Array.from(graph.nodes()).map((n) => n.id);
|
|
230
|
+
const randomNode = nodes[Math.floor(Math.random() * nodes.length)];
|
|
231
|
+
const randomNode2 = nodes[Math.floor(Math.random() * nodes.length)];
|
|
232
|
+
// Algorithm-specific argument mapping
|
|
233
|
+
switch (algoName) {
|
|
234
|
+
// Single source algorithms
|
|
235
|
+
case "breadthFirstSearch":
|
|
236
|
+
case "depthFirstSearch":
|
|
237
|
+
case "singleSourceShortestPathBFS":
|
|
238
|
+
case "singleSourceShortestPath":
|
|
239
|
+
case "dijkstra":
|
|
240
|
+
case "bellmanFord":
|
|
241
|
+
return [graph, randomNode];
|
|
242
|
+
// PageRank algorithms need directed graph
|
|
243
|
+
case "pageRank": {
|
|
244
|
+
const directedForPR = createDirectedGraph(graph);
|
|
245
|
+
return [directedForPR];
|
|
246
|
+
}
|
|
247
|
+
case "personalizedPageRank": {
|
|
248
|
+
const directedForPPR = createDirectedGraph(graph);
|
|
249
|
+
const personalNodes = [randomNode]; // Array of nodes for personalization
|
|
250
|
+
return [directedForPPR, personalNodes];
|
|
251
|
+
}
|
|
252
|
+
// Two node algorithms
|
|
253
|
+
case "shortestPathBFS":
|
|
254
|
+
case "dijkstraPath":
|
|
255
|
+
case "bellmanFordPath":
|
|
256
|
+
return [graph, randomNode, randomNode2];
|
|
257
|
+
// Component-specific algorithms
|
|
258
|
+
case "getConnectedComponent":
|
|
259
|
+
return [graph, randomNode];
|
|
260
|
+
// Algorithms that need specific graph types
|
|
261
|
+
case "topologicalSort":
|
|
262
|
+
case "findStronglyConnectedComponents":
|
|
263
|
+
case "stronglyConnectedComponents":
|
|
264
|
+
case "weaklyConnectedComponents":
|
|
265
|
+
case "isStronglyConnected":
|
|
266
|
+
case "isWeaklyConnected": {
|
|
267
|
+
// Create a directed version of the graph for these algorithms
|
|
268
|
+
const directedGraph = createDirectedGraph(graph);
|
|
269
|
+
return [directedGraph];
|
|
270
|
+
}
|
|
271
|
+
// Bipartite algorithms need bipartite graphs
|
|
272
|
+
case "bipartitePartition":
|
|
273
|
+
case "greedyBipartiteMatching":
|
|
274
|
+
case "maximumBipartiteMatching": {
|
|
275
|
+
const bipartiteGraph = createBipartiteGraph(Math.floor(graph.nodeCount / 2));
|
|
276
|
+
return [bipartiteGraph];
|
|
277
|
+
}
|
|
278
|
+
// Community detection algorithms
|
|
279
|
+
case "labelPropagation":
|
|
280
|
+
case "leiden":
|
|
281
|
+
case "louvain":
|
|
282
|
+
case "girvanNewman":
|
|
283
|
+
return [graph, {}]; // Pass empty options
|
|
284
|
+
// Default: just the graph
|
|
285
|
+
default:
|
|
286
|
+
return [graph];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Create test graph appropriate for each algorithm category
|
|
291
|
+
* @param nodes - Number of nodes in the test graph
|
|
292
|
+
* @param edges - Target number of edges in the test graph
|
|
293
|
+
* @param category - The algorithm category to optimize the graph structure for
|
|
294
|
+
* @returns A new test graph with the specified structure
|
|
295
|
+
*/
|
|
296
|
+
function createTestGraph(nodes, edges, category) {
|
|
297
|
+
const graph = new Graph();
|
|
298
|
+
// Add nodes
|
|
299
|
+
for (let i = 0; i < nodes; i++) {
|
|
300
|
+
graph.addNode(i);
|
|
301
|
+
}
|
|
302
|
+
// Create different graph structures for different algorithm categories
|
|
303
|
+
switch (category) {
|
|
304
|
+
case "shortestPath":
|
|
305
|
+
// Sparse connected graph for shortest path algorithms
|
|
306
|
+
createConnectedGraph(graph, Math.min(edges, nodes * 3));
|
|
307
|
+
break;
|
|
308
|
+
case "centrality":
|
|
309
|
+
// Small-world graph good for centrality analysis
|
|
310
|
+
createSmallWorldGraph(graph, Math.floor(edges / nodes));
|
|
311
|
+
break;
|
|
312
|
+
case "community":
|
|
313
|
+
// Graph with community structure
|
|
314
|
+
createCommunityGraph(graph, edges);
|
|
315
|
+
break;
|
|
316
|
+
default:
|
|
317
|
+
// Random connected graph
|
|
318
|
+
createConnectedGraph(graph, edges);
|
|
319
|
+
}
|
|
320
|
+
return graph;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Create a connected random graph
|
|
324
|
+
* @param graph - The graph to add edges to
|
|
325
|
+
* @param targetEdges - Target number of edges to create
|
|
326
|
+
*/
|
|
327
|
+
function createConnectedGraph(graph, targetEdges) {
|
|
328
|
+
const nodes = graph.nodeCount;
|
|
329
|
+
// First create a spanning tree to ensure connectivity
|
|
330
|
+
for (let i = 1; i < nodes; i++) {
|
|
331
|
+
const parent = Math.floor(Math.random() * i);
|
|
332
|
+
graph.addEdge(parent, i);
|
|
333
|
+
}
|
|
334
|
+
// Add remaining edges randomly
|
|
335
|
+
let edgesAdded = nodes - 1;
|
|
336
|
+
while (edgesAdded < targetEdges) {
|
|
337
|
+
const source = Math.floor(Math.random() * nodes);
|
|
338
|
+
const target = Math.floor(Math.random() * nodes);
|
|
339
|
+
if (source !== target && !graph.hasEdge(source, target)) {
|
|
340
|
+
graph.addEdge(source, target);
|
|
341
|
+
edgesAdded++;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Create small-world graph (Watts-Strogatz model)
|
|
347
|
+
* @param graph - The graph to add edges to
|
|
348
|
+
* @param avgDegree - Target average degree for each node
|
|
349
|
+
*/
|
|
350
|
+
function createSmallWorldGraph(graph, avgDegree) {
|
|
351
|
+
const nodes = graph.nodeCount;
|
|
352
|
+
const k = Math.floor(avgDegree / 2);
|
|
353
|
+
// Ring lattice
|
|
354
|
+
for (let i = 0; i < nodes; i++) {
|
|
355
|
+
for (let j = 1; j <= k; j++) {
|
|
356
|
+
const target = (i + j) % nodes;
|
|
357
|
+
graph.addEdge(i, target);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Rewire some edges
|
|
361
|
+
const rewireProb = 0.1;
|
|
362
|
+
for (let i = 0; i < nodes; i++) {
|
|
363
|
+
for (let j = 1; j <= k; j++) {
|
|
364
|
+
if (Math.random() < rewireProb) {
|
|
365
|
+
const oldTarget = (i + j) % nodes;
|
|
366
|
+
const newTarget = Math.floor(Math.random() * nodes);
|
|
367
|
+
if (newTarget !== i && !graph.hasEdge(i, newTarget)) {
|
|
368
|
+
graph.removeEdge(i, oldTarget);
|
|
369
|
+
graph.addEdge(i, newTarget);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Create graph with community structure
|
|
377
|
+
* @param graph - The graph to add edges to
|
|
378
|
+
* @param targetEdges - Target number of edges to create
|
|
379
|
+
*/
|
|
380
|
+
function createCommunityGraph(graph, targetEdges) {
|
|
381
|
+
const nodes = graph.nodeCount;
|
|
382
|
+
const communities = Math.min(5, Math.floor(nodes / 20)); // 5 communities max
|
|
383
|
+
const communitySize = Math.floor(nodes / communities);
|
|
384
|
+
let edgesAdded = 0;
|
|
385
|
+
// Create dense connections within communities
|
|
386
|
+
for (let c = 0; c < communities; c++) {
|
|
387
|
+
const start = c * communitySize;
|
|
388
|
+
const end = Math.min((c + 1) * communitySize, nodes);
|
|
389
|
+
for (let i = start; i < end && edgesAdded < targetEdges; i++) {
|
|
390
|
+
for (let j = i + 1; j < end && edgesAdded < targetEdges; j++) {
|
|
391
|
+
if (Math.random() < 0.8) {
|
|
392
|
+
// High probability within community
|
|
393
|
+
graph.addEdge(i, j);
|
|
394
|
+
edgesAdded++;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Add sparse connections between communities
|
|
400
|
+
while (edgesAdded < targetEdges) {
|
|
401
|
+
const source = Math.floor(Math.random() * nodes);
|
|
402
|
+
const target = Math.floor(Math.random() * nodes);
|
|
403
|
+
if (source !== target && !graph.hasEdge(source, target)) {
|
|
404
|
+
graph.addEdge(source, target);
|
|
405
|
+
edgesAdded++;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Create directed version of graph
|
|
411
|
+
* @param undirectedGraph - The undirected graph to convert
|
|
412
|
+
* @returns A new directed graph with the same nodes and edges
|
|
413
|
+
*/
|
|
414
|
+
function createDirectedGraph(undirectedGraph) {
|
|
415
|
+
const directedGraph = new Graph({ directed: true });
|
|
416
|
+
// Copy nodes
|
|
417
|
+
for (const node of undirectedGraph.nodes()) {
|
|
418
|
+
directedGraph.addNode(node.id);
|
|
419
|
+
}
|
|
420
|
+
// Copy edges as directed
|
|
421
|
+
for (const edge of undirectedGraph.edges()) {
|
|
422
|
+
directedGraph.addEdge(edge.source, edge.target);
|
|
423
|
+
}
|
|
424
|
+
return directedGraph;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Create bipartite graph
|
|
428
|
+
* @param nodesPerPartition - Number of nodes in each partition
|
|
429
|
+
* @returns A new bipartite graph with sparse connections between partitions
|
|
430
|
+
*/
|
|
431
|
+
function createBipartiteGraph(nodesPerPartition) {
|
|
432
|
+
const graph = new Graph();
|
|
433
|
+
// Add nodes (0 to n-1 in first partition, n to 2n-1 in second)
|
|
434
|
+
for (let i = 0; i < nodesPerPartition * 2; i++) {
|
|
435
|
+
graph.addNode(i);
|
|
436
|
+
}
|
|
437
|
+
// Add edges only between partitions
|
|
438
|
+
for (let i = 0; i < nodesPerPartition; i++) {
|
|
439
|
+
for (let j = nodesPerPartition; j < nodesPerPartition * 2; j++) {
|
|
440
|
+
if (Math.random() < 0.3) {
|
|
441
|
+
// Sparse bipartite graph
|
|
442
|
+
graph.addEdge(i, j);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return graph;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Get total algorithm count
|
|
450
|
+
* @returns The total number of algorithms across all categories
|
|
451
|
+
*/
|
|
452
|
+
function getTotalAlgorithmCount() {
|
|
453
|
+
return Object.values(ALGORITHM_CATEGORIES).reduce((total, category) => total + category.algorithms.length, 0);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Display detailed results for full benchmark
|
|
457
|
+
* @param results - Array of benchmark results to display
|
|
458
|
+
*/
|
|
459
|
+
function displayDetailedResults(results) {
|
|
460
|
+
console.log("\n📊 Detailed Results");
|
|
461
|
+
console.log("==================");
|
|
462
|
+
const categories = new Map();
|
|
463
|
+
for (const result of results) {
|
|
464
|
+
if (!categories.has(result.category)) {
|
|
465
|
+
categories.set(result.category, []);
|
|
466
|
+
}
|
|
467
|
+
categories.get(result.category)?.push(result);
|
|
468
|
+
}
|
|
469
|
+
for (const [category, categoryResults] of categories) {
|
|
470
|
+
console.log(`\n${category}:`);
|
|
471
|
+
console.log("-".repeat(category.length + 1));
|
|
472
|
+
const successful = categoryResults.filter((r) => r.success);
|
|
473
|
+
const failed = categoryResults.filter((r) => !r.success);
|
|
474
|
+
if (successful.length > 0) {
|
|
475
|
+
const avgTime = successful.reduce((sum, r) => sum + r.executionTime, 0) / successful.length;
|
|
476
|
+
console.log(` Average time: ${avgTime.toFixed(2)}ms`);
|
|
477
|
+
const minTime = Math.min(...successful.map((r) => r.executionTime));
|
|
478
|
+
const maxTime = Math.max(...successful.map((r) => r.executionTime));
|
|
479
|
+
console.log(` Range: ${minTime.toFixed(2)}ms - ${maxTime.toFixed(2)}ms`);
|
|
480
|
+
}
|
|
481
|
+
if (failed.length > 0) {
|
|
482
|
+
console.log(` Failed algorithms: ${failed.map((r) => r.algorithm).join(", ")}`);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
// Run benchmark if called directly
|
|
487
|
+
if (typeof process !== "undefined" && import.meta.url === `file://${process.argv[1] ?? ""}`) {
|
|
488
|
+
const mode = process.argv.includes("--quick") ? "quick" : "full";
|
|
489
|
+
runAllAlgorithmsBenchmark(mode);
|
|
490
|
+
}
|
|
491
|
+
//# sourceMappingURL=benchmark-all-algorithms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark-all-algorithms.js","sourceRoot":"","sources":["../../src/benchmark-all-algorithms.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* or division (top-down). Useful for understanding multi-scale
|
|
6
6
|
* structure in graphs.
|
|
7
7
|
*/
|
|
8
|
+
import type { Graph } from "../core/graph.js";
|
|
8
9
|
export interface ClusterNode<T> {
|
|
9
10
|
id: string;
|
|
10
11
|
members: Set<T>;
|
|
@@ -21,28 +22,35 @@ export interface HierarchicalClusteringResult<T> {
|
|
|
21
22
|
}
|
|
22
23
|
export type LinkageMethod = "single" | "complete" | "average" | "ward";
|
|
23
24
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* @
|
|
28
|
-
* @param linkage - Linkage method for cluster distance
|
|
29
|
-
* @returns Hierarchical clustering result
|
|
30
|
-
*
|
|
31
|
-
* Time Complexity: O(n³) naive, O(n² log n) with heap
|
|
32
|
-
* Space Complexity: O(n²)
|
|
33
|
-
*/
|
|
34
|
-
export declare function hierarchicalClustering<T>(graph: Map<T, Set<T>>, linkage?: LinkageMethod): HierarchicalClusteringResult<T>;
|
|
35
|
-
/**
|
|
36
|
-
* Cut dendrogram at specified height to get clusters
|
|
25
|
+
* Cut dendrogram at specific height to get clusters
|
|
26
|
+
* @param root - Root node of the dendrogram
|
|
27
|
+
* @param height - Height at which to cut the dendrogram
|
|
28
|
+
* @returns Array of sets representing clusters at the specified height
|
|
37
29
|
*/
|
|
38
30
|
export declare function cutDendrogram<T>(root: ClusterNode<T>, height: number): Set<T>[];
|
|
39
31
|
/**
|
|
40
|
-
* Cut dendrogram to get k clusters
|
|
32
|
+
* Cut dendrogram to get exactly k clusters
|
|
33
|
+
* @param root - Root node of the dendrogram
|
|
34
|
+
* @param k - Target number of clusters
|
|
35
|
+
* @returns Array of sets representing exactly k clusters
|
|
41
36
|
*/
|
|
42
37
|
export declare function cutDendrogramKClusters<T>(root: ClusterNode<T>, k: number): Set<T>[];
|
|
43
38
|
/**
|
|
44
39
|
* Compute modularity-based hierarchical clustering
|
|
45
40
|
* Uses modularity gain to decide merges
|
|
41
|
+
* @param graph - The input graph to cluster
|
|
42
|
+
* @returns Hierarchical clustering result with dendrogram and cluster assignments
|
|
43
|
+
*/
|
|
44
|
+
export declare function modularityHierarchicalClustering(graph: Graph): HierarchicalClusteringResult<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Agglomerative hierarchical clustering
|
|
47
|
+
* Builds clusters bottom-up by merging closest pairs
|
|
48
|
+
* @param graph - Undirected graph - accepts Graph class or Map<T, Set<T>>
|
|
49
|
+
* @param linkage - Linkage method for cluster distance
|
|
50
|
+
* @returns Hierarchical clustering result
|
|
51
|
+
*
|
|
52
|
+
* Time Complexity: O(n³) naive, O(n² log n) with heap
|
|
53
|
+
* Space Complexity: O(n²)
|
|
46
54
|
*/
|
|
47
|
-
export declare function
|
|
55
|
+
export declare function hierarchicalClustering(graph: Graph, linkage?: LinkageMethod): HierarchicalClusteringResult<string>;
|
|
48
56
|
//# sourceMappingURL=hierarchical.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchical.d.ts","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hierarchical.d.ts","sourceRoot":"","sources":["../../../src/clustering/hierarchical.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAqC9C,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AA0QvE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CA0B/E;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CA2BnF;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAgInG;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,aAAwB,GAClC,4BAA4B,CAAC,MAAM,CAAC,CAItC"}
|