@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,320 @@
|
|
|
1
|
+
import { PriorityQueue } from "../../data-structures/priority-queue.js";
|
|
2
|
+
/**
|
|
3
|
+
* Delta-based PageRank class that tracks changes between iterations
|
|
4
|
+
* and only processes nodes with significant changes for improved performance.
|
|
5
|
+
*/
|
|
6
|
+
export class DeltaPageRank {
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new DeltaPageRank instance for the given graph.
|
|
9
|
+
* @param graph - The directed graph to compute PageRank on
|
|
10
|
+
*/
|
|
11
|
+
constructor(graph) {
|
|
12
|
+
if (!graph.isDirected) {
|
|
13
|
+
throw new Error("DeltaPageRank requires a directed graph");
|
|
14
|
+
}
|
|
15
|
+
this.graph = graph;
|
|
16
|
+
this.scores = new Map();
|
|
17
|
+
this.deltas = new Map();
|
|
18
|
+
this.activeNodes = new Set();
|
|
19
|
+
this.outDegrees = new Map();
|
|
20
|
+
this.outWeights = new Map();
|
|
21
|
+
this.danglingNodes = new Set();
|
|
22
|
+
this.nodeCount = graph.nodeCount;
|
|
23
|
+
this.initialize();
|
|
24
|
+
}
|
|
25
|
+
initialize() {
|
|
26
|
+
const initialValue = 1.0 / this.nodeCount;
|
|
27
|
+
// Initialize data structures
|
|
28
|
+
for (const node of this.graph.nodes()) {
|
|
29
|
+
const nodeId = node.id;
|
|
30
|
+
this.scores.set(nodeId, 0); // Start with zero, will add initial value as delta
|
|
31
|
+
this.deltas.set(nodeId, initialValue);
|
|
32
|
+
this.activeNodes.add(nodeId);
|
|
33
|
+
// Precompute out-degrees and weights
|
|
34
|
+
let outDegree = 0;
|
|
35
|
+
let totalOutWeight = 0;
|
|
36
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
37
|
+
outDegree++;
|
|
38
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
39
|
+
totalOutWeight += edge?.weight ?? 1;
|
|
40
|
+
}
|
|
41
|
+
this.outDegrees.set(nodeId, outDegree);
|
|
42
|
+
this.outWeights.set(nodeId, totalOutWeight);
|
|
43
|
+
if (outDegree === 0) {
|
|
44
|
+
this.danglingNodes.add(nodeId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Computes PageRank scores using delta-based iteration for faster convergence.
|
|
50
|
+
* @param options - Configuration options for PageRank computation
|
|
51
|
+
* @returns Map of node IDs to their PageRank scores
|
|
52
|
+
*/
|
|
53
|
+
compute(options = {}) {
|
|
54
|
+
const { dampingFactor = 0.85, tolerance = 1e-6, maxIterations = 100, deltaThreshold = tolerance / 10, personalization, weight, } = options;
|
|
55
|
+
if (dampingFactor < 0 || dampingFactor > 1) {
|
|
56
|
+
throw new Error("Damping factor must be between 0 and 1");
|
|
57
|
+
}
|
|
58
|
+
if (this.nodeCount === 0) {
|
|
59
|
+
return new Map();
|
|
60
|
+
}
|
|
61
|
+
// Normalize personalization vector if provided
|
|
62
|
+
let personalVector = null;
|
|
63
|
+
if (personalization) {
|
|
64
|
+
personalVector = new Map(personalization);
|
|
65
|
+
this.normalizeMap(personalVector);
|
|
66
|
+
}
|
|
67
|
+
const randomJump = (1 - dampingFactor) / this.nodeCount;
|
|
68
|
+
let iteration = 0;
|
|
69
|
+
while (this.activeNodes.size > 0 && iteration < maxIterations) {
|
|
70
|
+
iteration++;
|
|
71
|
+
// Create next iteration's deltas
|
|
72
|
+
const nextDeltas = new Map();
|
|
73
|
+
// Initialize all nodes with zero delta
|
|
74
|
+
for (const node of this.graph.nodes()) {
|
|
75
|
+
nextDeltas.set(node.id, 0);
|
|
76
|
+
}
|
|
77
|
+
// Handle dangling nodes contribution
|
|
78
|
+
let danglingSum = 0;
|
|
79
|
+
for (const danglingNode of this.danglingNodes) {
|
|
80
|
+
const currentScore = this.scores.get(danglingNode) ?? 0;
|
|
81
|
+
const delta = this.deltas.get(danglingNode) ?? 0;
|
|
82
|
+
danglingSum += currentScore + delta;
|
|
83
|
+
}
|
|
84
|
+
if (danglingSum > 0) {
|
|
85
|
+
const danglingContribution = (dampingFactor * danglingSum) / this.nodeCount;
|
|
86
|
+
for (const node of this.graph.nodes()) {
|
|
87
|
+
const nodeId = node.id;
|
|
88
|
+
const currentDelta = nextDeltas.get(nodeId) ?? 0;
|
|
89
|
+
if (personalVector) {
|
|
90
|
+
const personalContrib = danglingContribution * (personalVector.get(nodeId) ?? 0);
|
|
91
|
+
nextDeltas.set(nodeId, currentDelta + personalContrib);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
nextDeltas.set(nodeId, currentDelta + danglingContribution);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Process only active nodes
|
|
99
|
+
for (const nodeId of this.activeNodes) {
|
|
100
|
+
const delta = this.deltas.get(nodeId) ?? 0;
|
|
101
|
+
// Skip if delta is too small
|
|
102
|
+
if (Math.abs(delta) < deltaThreshold) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Apply delta to score
|
|
106
|
+
const currentScore = this.scores.get(nodeId) ?? 0;
|
|
107
|
+
this.scores.set(nodeId, currentScore + delta);
|
|
108
|
+
const outWeight = this.outWeights.get(nodeId) ?? 0;
|
|
109
|
+
if (outWeight > 0) {
|
|
110
|
+
// Distribute delta to neighbors
|
|
111
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
112
|
+
let edgeWeight = 1;
|
|
113
|
+
if (weight) {
|
|
114
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
115
|
+
edgeWeight = edge?.weight ?? 1;
|
|
116
|
+
}
|
|
117
|
+
const contribution = dampingFactor * delta * (edgeWeight / outWeight);
|
|
118
|
+
const currentDelta = nextDeltas.get(neighbor) ?? 0;
|
|
119
|
+
nextDeltas.set(neighbor, currentDelta + contribution);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Add teleportation probability as delta
|
|
124
|
+
for (const node of this.graph.nodes()) {
|
|
125
|
+
const nodeId = node.id;
|
|
126
|
+
const currentDelta = nextDeltas.get(nodeId) ?? 0;
|
|
127
|
+
if (personalVector) {
|
|
128
|
+
nextDeltas.set(nodeId, currentDelta + (1 - dampingFactor) * (personalVector.get(nodeId) ?? 0));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
nextDeltas.set(nodeId, currentDelta + randomJump);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Find active nodes for next iteration
|
|
135
|
+
const nextActive = new Set();
|
|
136
|
+
let maxDelta = 0;
|
|
137
|
+
for (const [nodeId, delta] of nextDeltas) {
|
|
138
|
+
maxDelta = Math.max(maxDelta, Math.abs(delta));
|
|
139
|
+
if (Math.abs(delta) >= deltaThreshold) {
|
|
140
|
+
nextActive.add(nodeId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Update for next iteration
|
|
144
|
+
this.deltas = nextDeltas;
|
|
145
|
+
this.activeNodes = nextActive;
|
|
146
|
+
// Global convergence check
|
|
147
|
+
if (maxDelta < tolerance) {
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Normalize final scores
|
|
152
|
+
this.normalizeMap(this.scores);
|
|
153
|
+
return new Map(this.scores);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update PageRank scores after graph modification.
|
|
157
|
+
* This is where delta-based approach really shines.
|
|
158
|
+
* @param modifiedNodes - Set of nodes that were modified (edges added/removed)
|
|
159
|
+
* @param options - Configuration options for PageRank computation
|
|
160
|
+
* @returns Updated PageRank scores
|
|
161
|
+
*/
|
|
162
|
+
update(modifiedNodes, options = {}) {
|
|
163
|
+
// Mark modified nodes and their neighbors as active
|
|
164
|
+
this.activeNodes.clear();
|
|
165
|
+
for (const nodeId of modifiedNodes) {
|
|
166
|
+
this.activeNodes.add(nodeId);
|
|
167
|
+
// Add incoming neighbors
|
|
168
|
+
for (const neighbor of Array.from(this.graph.inNeighbors(nodeId))) {
|
|
169
|
+
this.activeNodes.add(neighbor);
|
|
170
|
+
}
|
|
171
|
+
// Add outgoing neighbors
|
|
172
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
173
|
+
this.activeNodes.add(neighbor);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Recompute only for active nodes
|
|
177
|
+
return this.compute(options);
|
|
178
|
+
}
|
|
179
|
+
normalizeMap(map) {
|
|
180
|
+
let sum = 0;
|
|
181
|
+
for (const value of map.values()) {
|
|
182
|
+
sum += value;
|
|
183
|
+
}
|
|
184
|
+
if (sum > 0) {
|
|
185
|
+
for (const [key, value] of Array.from(map)) {
|
|
186
|
+
map.set(key, value / sum);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Priority queue based implementation for even better performance
|
|
193
|
+
* Processes nodes in order of their delta magnitude
|
|
194
|
+
*/
|
|
195
|
+
export class PriorityDeltaPageRank {
|
|
196
|
+
/**
|
|
197
|
+
* Creates a new PriorityDeltaPageRank instance for the given graph.
|
|
198
|
+
* @param graph - The directed graph to compute PageRank on
|
|
199
|
+
*/
|
|
200
|
+
constructor(graph) {
|
|
201
|
+
if (!graph.isDirected) {
|
|
202
|
+
throw new Error("PriorityDeltaPageRank requires a directed graph");
|
|
203
|
+
}
|
|
204
|
+
this.graph = graph;
|
|
205
|
+
this.scores = new Map();
|
|
206
|
+
this.nodeDeltas = new Map();
|
|
207
|
+
this.outWeights = new Map();
|
|
208
|
+
this.danglingNodes = new Set();
|
|
209
|
+
this.nodeCount = graph.nodeCount;
|
|
210
|
+
// Priority queue ordered by delta magnitude (larger deltas have higher priority)
|
|
211
|
+
this.priorityQueue = new PriorityQueue((a, b) => b - a);
|
|
212
|
+
this.initialize();
|
|
213
|
+
}
|
|
214
|
+
initialize() {
|
|
215
|
+
const initialValue = 1.0 / this.nodeCount;
|
|
216
|
+
// Initialize all nodes with initial delta
|
|
217
|
+
for (const node of this.graph.nodes()) {
|
|
218
|
+
const nodeId = node.id;
|
|
219
|
+
this.scores.set(nodeId, 0); // Start with zero scores
|
|
220
|
+
this.nodeDeltas.set(nodeId, initialValue);
|
|
221
|
+
this.priorityQueue.enqueue(nodeId, initialValue);
|
|
222
|
+
// Precompute out-weights
|
|
223
|
+
let totalOutWeight = 0;
|
|
224
|
+
let outDegree = 0;
|
|
225
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
226
|
+
outDegree++;
|
|
227
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
228
|
+
totalOutWeight += edge?.weight ?? 1;
|
|
229
|
+
}
|
|
230
|
+
this.outWeights.set(nodeId, totalOutWeight);
|
|
231
|
+
if (outDegree === 0) {
|
|
232
|
+
this.danglingNodes.add(nodeId);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Computes PageRank scores using priority queue-based delta iteration.
|
|
238
|
+
* Processes nodes in order of their delta magnitude for optimal convergence.
|
|
239
|
+
* @param options - Configuration options for PageRank computation
|
|
240
|
+
* @returns Map of node IDs to their PageRank scores
|
|
241
|
+
*/
|
|
242
|
+
computeWithPriority(options = {}) {
|
|
243
|
+
const { dampingFactor = 0.85, tolerance = 1e-6, maxIterations = 100, deltaThreshold = tolerance / 10, weight, } = options;
|
|
244
|
+
let iteration = 0;
|
|
245
|
+
let processedCount = 0;
|
|
246
|
+
while (!this.priorityQueue.isEmpty() && iteration < maxIterations) {
|
|
247
|
+
const nodeId = this.priorityQueue.dequeue();
|
|
248
|
+
if (nodeId === undefined) {
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
const delta = this.nodeDeltas.get(nodeId) ?? 0;
|
|
252
|
+
// Skip if delta is too small
|
|
253
|
+
if (Math.abs(delta) < deltaThreshold) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
// Apply delta to node's score
|
|
257
|
+
const currentScore = this.scores.get(nodeId) ?? 0;
|
|
258
|
+
this.scores.set(nodeId, currentScore + delta);
|
|
259
|
+
this.nodeDeltas.set(nodeId, 0);
|
|
260
|
+
// Distribute delta to neighbors
|
|
261
|
+
const outWeight = this.outWeights.get(nodeId) ?? 0;
|
|
262
|
+
if (outWeight > 0) {
|
|
263
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
264
|
+
let edgeWeight = 1;
|
|
265
|
+
if (weight) {
|
|
266
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
267
|
+
edgeWeight = edge?.weight ?? 1;
|
|
268
|
+
}
|
|
269
|
+
const contribution = dampingFactor * delta * (edgeWeight / outWeight);
|
|
270
|
+
const currentNeighborDelta = this.nodeDeltas.get(neighbor) ?? 0;
|
|
271
|
+
const newDelta = currentNeighborDelta + contribution;
|
|
272
|
+
this.nodeDeltas.set(neighbor, newDelta);
|
|
273
|
+
// Re-enqueue neighbor with updated priority
|
|
274
|
+
if (Math.abs(newDelta) >= deltaThreshold) {
|
|
275
|
+
this.priorityQueue.enqueue(neighbor, Math.abs(newDelta));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
processedCount++;
|
|
280
|
+
// Periodic convergence check
|
|
281
|
+
if (processedCount % 1000 === 0) {
|
|
282
|
+
let maxDelta = 0;
|
|
283
|
+
for (const d of this.nodeDeltas.values()) {
|
|
284
|
+
maxDelta = Math.max(maxDelta, Math.abs(d));
|
|
285
|
+
}
|
|
286
|
+
if (maxDelta < tolerance) {
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
iteration++;
|
|
291
|
+
}
|
|
292
|
+
// Apply any remaining deltas
|
|
293
|
+
for (const [nodeId, delta] of this.nodeDeltas) {
|
|
294
|
+
if (Math.abs(delta) >= deltaThreshold) {
|
|
295
|
+
const currentScore = this.scores.get(nodeId) ?? 0;
|
|
296
|
+
this.scores.set(nodeId, currentScore + delta);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Add teleportation probability
|
|
300
|
+
const teleport = (1 - dampingFactor) / this.nodeCount;
|
|
301
|
+
for (const [nodeId, score] of this.scores) {
|
|
302
|
+
this.scores.set(nodeId, score + teleport);
|
|
303
|
+
}
|
|
304
|
+
// Normalize final scores
|
|
305
|
+
this.normalizeMap(this.scores);
|
|
306
|
+
return new Map(this.scores);
|
|
307
|
+
}
|
|
308
|
+
normalizeMap(map) {
|
|
309
|
+
let sum = 0;
|
|
310
|
+
for (const value of map.values()) {
|
|
311
|
+
sum += value;
|
|
312
|
+
}
|
|
313
|
+
if (sum > 0) {
|
|
314
|
+
for (const [key, value] of Array.from(map)) {
|
|
315
|
+
map.set(key, value / sum);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=delta-pagerank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta-pagerank.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/delta-pagerank.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,19 @@ export interface EigenvectorCentralityOptions extends CentralityOptions {
|
|
|
16
16
|
startVector?: Map<string, number>;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Calculate eigenvector centrality for all nodes in the graph
|
|
20
|
-
* Uses the power iteration method to find the dominant eigenvector
|
|
19
|
+
* Calculate eigenvector centrality for all nodes in the graph.
|
|
20
|
+
* Uses the power iteration method to find the dominant eigenvector.
|
|
21
|
+
* @param graph - The graph to compute eigenvector centrality on
|
|
22
|
+
* @param options - Configuration options for the computation
|
|
23
|
+
* @returns Object mapping node IDs to their eigenvector centrality scores
|
|
21
24
|
*/
|
|
22
25
|
export declare function eigenvectorCentrality(graph: Graph, options?: EigenvectorCentralityOptions): CentralityResult;
|
|
23
26
|
/**
|
|
24
|
-
* Calculate eigenvector centrality for a specific node
|
|
27
|
+
* Calculate eigenvector centrality for a specific node.
|
|
28
|
+
* @param graph - The graph to compute eigenvector centrality on
|
|
29
|
+
* @param nodeId - The ID of the node to calculate centrality for
|
|
30
|
+
* @param options - Configuration options for the computation
|
|
31
|
+
* @returns The eigenvector centrality score for the specified node
|
|
25
32
|
*/
|
|
26
33
|
export declare function nodeEigenvectorCentrality(graph: Graph, nodeId: string | number, options?: EigenvectorCentralityOptions): number;
|
|
27
34
|
//# sourceMappingURL=eigenvector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eigenvector.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/eigenvector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"eigenvector.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/eigenvector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEhF;;;;;;;;;GASG;AAEH,MAAM,WAAW,4BAA6B,SAAQ,iBAAiB;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,4BAAiC,GAAG,gBAAgB,CAiHhH;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,OAAO,GAAE,4BAAiC,GAC3C,MAAM,CAOR"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Calculate eigenvector centrality for all nodes in the graph
|
|
3
|
-
* Uses the power iteration method to find the dominant eigenvector
|
|
2
|
+
* Calculate eigenvector centrality for all nodes in the graph.
|
|
3
|
+
* Uses the power iteration method to find the dominant eigenvector.
|
|
4
|
+
* @param graph - The graph to compute eigenvector centrality on
|
|
5
|
+
* @param options - Configuration options for the computation
|
|
6
|
+
* @returns Object mapping node IDs to their eigenvector centrality scores
|
|
4
7
|
*/
|
|
5
8
|
export function eigenvectorCentrality(graph, options = {}) {
|
|
6
|
-
const { maxIterations = 100, tolerance = 1e-6, normalized = true, startVector
|
|
9
|
+
const { maxIterations = 100, tolerance = 1e-6, normalized = true, startVector } = options;
|
|
7
10
|
const centrality = {};
|
|
8
11
|
const nodes = Array.from(graph.nodes());
|
|
9
12
|
const nodeIds = nodes.map((node) => node.id);
|
|
@@ -101,7 +104,11 @@ export function eigenvectorCentrality(graph, options = {}) {
|
|
|
101
104
|
return centrality;
|
|
102
105
|
}
|
|
103
106
|
/**
|
|
104
|
-
* Calculate eigenvector centrality for a specific node
|
|
107
|
+
* Calculate eigenvector centrality for a specific node.
|
|
108
|
+
* @param graph - The graph to compute eigenvector centrality on
|
|
109
|
+
* @param nodeId - The ID of the node to calculate centrality for
|
|
110
|
+
* @param options - Configuration options for the computation
|
|
111
|
+
* @returns The eigenvector centrality score for the specified node
|
|
105
112
|
*/
|
|
106
113
|
export function nodeEigenvectorCentrality(graph, nodeId, options = {}) {
|
|
107
114
|
if (!graph.hasNode(nodeId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eigenvector.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/eigenvector.ts"],"names":[],"mappings":"AAoBA
|
|
1
|
+
{"version":3,"file":"eigenvector.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/eigenvector.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,12 +21,19 @@ export interface HITSOptions extends CentralityOptions {
|
|
|
21
21
|
tolerance?: number;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Calculate HITS hub and authority scores for all nodes in the graph
|
|
25
|
-
* Uses iterative method with normalization
|
|
24
|
+
* Calculate HITS hub and authority scores for all nodes in the graph.
|
|
25
|
+
* Uses iterative method with normalization.
|
|
26
|
+
* @param graph - The graph to compute HITS scores on
|
|
27
|
+
* @param options - Configuration options for the computation
|
|
28
|
+
* @returns Object containing hub and authority scores for all nodes
|
|
26
29
|
*/
|
|
27
30
|
export declare function hits(graph: Graph, options?: HITSOptions): HITSResult;
|
|
28
31
|
/**
|
|
29
|
-
* Calculate HITS scores for a specific node
|
|
32
|
+
* Calculate HITS scores for a specific node.
|
|
33
|
+
* @param graph - The graph to compute HITS scores on
|
|
34
|
+
* @param nodeId - The ID of the node to calculate scores for
|
|
35
|
+
* @param options - Configuration options for the computation
|
|
36
|
+
* @returns Object containing hub and authority scores for the specified node
|
|
30
37
|
*/
|
|
31
38
|
export declare function nodeHITS(graph: Graph, nodeId: string | number, options?: HITSOptions): {
|
|
32
39
|
hub: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hits.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/hits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"hits.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/hits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAuJxE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,OAAO,GAAE,WAAgB,GAC1B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAYpC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Calculate HITS hub and authority scores for all nodes in the graph
|
|
3
|
-
* Uses iterative method with normalization
|
|
2
|
+
* Calculate HITS hub and authority scores for all nodes in the graph.
|
|
3
|
+
* Uses iterative method with normalization.
|
|
4
|
+
* @param graph - The graph to compute HITS scores on
|
|
5
|
+
* @param options - Configuration options for the computation
|
|
6
|
+
* @returns Object containing hub and authority scores for all nodes
|
|
4
7
|
*/
|
|
5
8
|
export function hits(graph, options = {}) {
|
|
6
|
-
const { maxIterations = 100, tolerance = 1e-6, normalized = true
|
|
9
|
+
const { maxIterations = 100, tolerance = 1e-6, normalized = true } = options;
|
|
7
10
|
const hubs = {};
|
|
8
11
|
const authorities = {};
|
|
9
12
|
const nodes = Array.from(graph.nodes());
|
|
@@ -130,7 +133,11 @@ export function hits(graph, options = {}) {
|
|
|
130
133
|
return { hubs, authorities };
|
|
131
134
|
}
|
|
132
135
|
/**
|
|
133
|
-
* Calculate HITS scores for a specific node
|
|
136
|
+
* Calculate HITS scores for a specific node.
|
|
137
|
+
* @param graph - The graph to compute HITS scores on
|
|
138
|
+
* @param nodeId - The ID of the node to calculate scores for
|
|
139
|
+
* @param options - Configuration options for the computation
|
|
140
|
+
* @returns Object containing hub and authority scores for the specified node
|
|
134
141
|
*/
|
|
135
142
|
export function nodeHITS(graph, nodeId, options = {}) {
|
|
136
143
|
if (!graph.hasNode(nodeId)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hits.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/hits.ts"],"names":[],"mappings":"AA0BA
|
|
1
|
+
{"version":3,"file":"hits.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/hits.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
export type { BetweennessCentralityOptions } from "./betweenness.js";
|
|
5
5
|
export { betweennessCentrality, edgeBetweennessCentrality, nodeBetweennessCentrality } from "./betweenness.js";
|
|
6
6
|
export type { ClosenessCentralityOptions } from "./closeness.js";
|
|
7
|
-
export { closenessCentrality, nodeClosenessCentrality, nodeWeightedClosenessCentrality, weightedClosenessCentrality } from "./closeness.js";
|
|
7
|
+
export { closenessCentrality, nodeClosenessCentrality, nodeWeightedClosenessCentrality, weightedClosenessCentrality, } from "./closeness.js";
|
|
8
8
|
export { degreeCentrality, nodeDegreeCentrality } from "./degree.js";
|
|
9
|
+
export type { DeltaPageRankOptions } from "./delta-pagerank.js";
|
|
10
|
+
export { DeltaPageRank, PriorityDeltaPageRank } from "./delta-pagerank.js";
|
|
9
11
|
export type { EigenvectorCentralityOptions } from "./eigenvector.js";
|
|
10
12
|
export { eigenvectorCentrality, nodeEigenvectorCentrality } from "./eigenvector.js";
|
|
11
13
|
export type { HITSOptions, HITSResult } from "./hits.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/G,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,+BAA+B,EAC/B,2BAA2B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACpF,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Centrality algorithms
|
|
3
3
|
*/
|
|
4
4
|
export { betweennessCentrality, edgeBetweennessCentrality, nodeBetweennessCentrality } from "./betweenness.js";
|
|
5
|
-
export { closenessCentrality, nodeClosenessCentrality, nodeWeightedClosenessCentrality, weightedClosenessCentrality } from "./closeness.js";
|
|
5
|
+
export { closenessCentrality, nodeClosenessCentrality, nodeWeightedClosenessCentrality, weightedClosenessCentrality, } from "./closeness.js";
|
|
6
6
|
export { degreeCentrality, nodeDegreeCentrality } from "./degree.js";
|
|
7
|
+
export { DeltaPageRank, PriorityDeltaPageRank } from "./delta-pagerank.js";
|
|
7
8
|
export { eigenvectorCentrality, nodeEigenvectorCentrality } from "./eigenvector.js";
|
|
8
9
|
export { hits, nodeHITS } from "./hits.js";
|
|
9
10
|
export { katzCentrality, nodeKatzCentrality } from "./katz.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/centrality/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE/G,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,+BAA+B,EAC/B,2BAA2B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -19,12 +19,19 @@ export interface KatzCentralityOptions extends CentralityOptions {
|
|
|
19
19
|
tolerance?: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* Calculate Katz centrality for all nodes in the graph
|
|
23
|
-
* Uses iterative method to compute centrality scores
|
|
22
|
+
* Calculate Katz centrality for all nodes in the graph.
|
|
23
|
+
* Uses iterative method to compute centrality scores.
|
|
24
|
+
* @param graph - The graph to compute Katz centrality on
|
|
25
|
+
* @param options - Configuration options for the computation
|
|
26
|
+
* @returns Object mapping node IDs to their Katz centrality scores
|
|
24
27
|
*/
|
|
25
28
|
export declare function katzCentrality(graph: Graph, options?: KatzCentralityOptions): CentralityResult;
|
|
26
29
|
/**
|
|
27
|
-
* Calculate Katz centrality for a specific node
|
|
30
|
+
* Calculate Katz centrality for a specific node.
|
|
31
|
+
* @param graph - The graph to compute Katz centrality on
|
|
32
|
+
* @param nodeId - The ID of the node to calculate centrality for
|
|
33
|
+
* @param options - Configuration options for the computation
|
|
34
|
+
* @returns The Katz centrality score for the specified node
|
|
28
35
|
*/
|
|
29
36
|
export declare function nodeKatzCentrality(graph: Graph, nodeId: string | number, options?: KatzCentralityOptions): number;
|
|
30
37
|
//# sourceMappingURL=katz.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"katz.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/katz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"katz.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/centrality/katz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEhF;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CAoFlG;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAOrH"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Calculate Katz centrality for all nodes in the graph
|
|
3
|
-
* Uses iterative method to compute centrality scores
|
|
2
|
+
* Calculate Katz centrality for all nodes in the graph.
|
|
3
|
+
* Uses iterative method to compute centrality scores.
|
|
4
|
+
* @param graph - The graph to compute Katz centrality on
|
|
5
|
+
* @param options - Configuration options for the computation
|
|
6
|
+
* @returns Object mapping node IDs to their Katz centrality scores
|
|
4
7
|
*/
|
|
5
8
|
export function katzCentrality(graph, options = {}) {
|
|
6
|
-
const { alpha = 0.1, beta = 1.0, maxIterations = 100, tolerance = 1e-6, normalized = true
|
|
9
|
+
const { alpha = 0.1, beta = 1.0, maxIterations = 100, tolerance = 1e-6, normalized = true } = options;
|
|
7
10
|
const centrality = {};
|
|
8
11
|
const nodes = Array.from(graph.nodes());
|
|
9
12
|
const nodeIds = nodes.map((node) => node.id);
|
|
@@ -28,14 +31,12 @@ export function katzCentrality(graph, options = {}) {
|
|
|
28
31
|
let sum = 0;
|
|
29
32
|
// For directed graphs, use in-neighbors
|
|
30
33
|
// For undirected graphs, use all neighbors
|
|
31
|
-
const neighbors = graph.isDirected ?
|
|
32
|
-
Array.from(graph.inNeighbors(nodeId)) :
|
|
33
|
-
graph.neighbors(nodeId);
|
|
34
|
+
const neighbors = graph.isDirected ? Array.from(graph.inNeighbors(nodeId)) : graph.neighbors(nodeId);
|
|
34
35
|
for (const neighbor of neighbors) {
|
|
35
36
|
const neighborKey = neighbor.toString();
|
|
36
37
|
sum += previousScores.get(neighborKey) ?? 0;
|
|
37
38
|
}
|
|
38
|
-
currentScores.set(nodeId.toString(),
|
|
39
|
+
currentScores.set(nodeId.toString(), alpha * sum + beta);
|
|
39
40
|
}
|
|
40
41
|
// Check for convergence
|
|
41
42
|
let maxDiff = 0;
|
|
@@ -73,7 +74,11 @@ export function katzCentrality(graph, options = {}) {
|
|
|
73
74
|
return centrality;
|
|
74
75
|
}
|
|
75
76
|
/**
|
|
76
|
-
* Calculate Katz centrality for a specific node
|
|
77
|
+
* Calculate Katz centrality for a specific node.
|
|
78
|
+
* @param graph - The graph to compute Katz centrality on
|
|
79
|
+
* @param nodeId - The ID of the node to calculate centrality for
|
|
80
|
+
* @param options - Configuration options for the computation
|
|
81
|
+
* @returns The Katz centrality score for the specified node
|
|
77
82
|
*/
|
|
78
83
|
export function nodeKatzCentrality(graph, nodeId, options = {}) {
|
|
79
84
|
if (!graph.hasNode(nodeId)) {
|