@graphty/algorithms 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +490 -336
- package/dist/algorithms.d.ts +42 -2
- package/dist/algorithms.js +11099 -2
- package/dist/algorithms.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +124 -170
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +56 -149
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +3 -3
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
- package/dist/src/algorithms/centrality/index.d.ts +2 -0
- package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/index.js +1 -0
- package/dist/src/algorithms/centrality/index.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +45 -0
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +47 -54
- 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 +13 -3
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +50 -35
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/community/leiden.d.ts +3 -2
- package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
- package/dist/src/algorithms/community/leiden.js +34 -39
- package/dist/src/algorithms/community/leiden.js.map +1 -1
- package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
- package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
- package/dist/src/algorithms/community/louvain-optimized.js +303 -0
- package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
- package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
- package/dist/src/algorithms/community/louvain.js +17 -76
- package/dist/src/algorithms/community/louvain.js.map +1 -1
- package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
- package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
- package/dist/src/algorithms/community/modularity-utils.js +112 -0
- package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
- package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
- package/dist/src/algorithms/matching/bipartite.js +8 -40
- package/dist/src/algorithms/matching/bipartite.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -12
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.js +368 -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/benchmark-all-algorithms.d.ts +23 -0
- package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
- package/dist/src/benchmark-all-algorithms.js +462 -0
- package/dist/src/benchmark-all-algorithms.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +16 -15
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +209 -223
- 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 +16 -15
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +57 -21
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/spectral.d.ts +8 -0
- package/dist/src/clustering/spectral.d.ts.map +1 -1
- package/dist/src/clustering/spectral.js +40 -21
- package/dist/src/clustering/spectral.js.map +1 -1
- package/dist/src/core/graph.js +4 -4
- package/dist/src/core/graph.js.map +1 -1
- package/dist/src/flow/ford-fulkerson.d.ts +17 -11
- package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
- package/dist/src/flow/ford-fulkerson.js +141 -217
- package/dist/src/flow/ford-fulkerson.js.map +1 -1
- package/dist/src/flow/min-cut.d.ts +6 -5
- package/dist/src/flow/min-cut.d.ts.map +1 -1
- package/dist/src/flow/min-cut.js +17 -8
- package/dist/src/flow/min-cut.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
- package/dist/src/link-prediction/adamic-adar.js +17 -26
- package/dist/src/link-prediction/adamic-adar.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +7 -11
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/optimized/bit-packed.d.ts +143 -0
- package/dist/src/optimized/bit-packed.d.ts.map +1 -0
- package/dist/src/optimized/bit-packed.js +292 -0
- package/dist/src/optimized/bit-packed.js.map +1 -0
- package/dist/src/optimized/csr-graph.d.ts +86 -0
- package/dist/src/optimized/csr-graph.d.ts.map +1 -0
- package/dist/src/optimized/csr-graph.js +341 -0
- package/dist/src/optimized/csr-graph.js.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.js +223 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
- package/dist/src/optimized/graph-adapter.d.ts +62 -0
- package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
- package/dist/src/optimized/graph-adapter.js +146 -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 +28 -0
- package/dist/src/optimized/index.js.map +1 -0
- package/dist/src/research/grsbm.d.ts.map +1 -1
- package/dist/src/research/grsbm.js +6 -14
- package/dist/src/research/grsbm.js.map +1 -1
- package/dist/src/research/sync.d.ts.map +1 -1
- package/dist/src/research/sync.js +3 -29
- package/dist/src/research/sync.js.map +1 -1
- package/dist/src/research/terahac.d.ts +2 -0
- package/dist/src/research/terahac.d.ts.map +1 -1
- package/dist/src/research/terahac.js +7 -3
- 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 +79 -0
- package/dist/src/utils/graph-converters.d.ts.map +1 -0
- package/dist/src/utils/graph-converters.js +196 -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 +52 -0
- package/dist/src/utils/math-utilities.d.ts.map +1 -0
- package/dist/src/utils/math-utilities.js +123 -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 +33 -0
- package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
- package/dist/src/utils/optimization-helpers.js +47 -0
- package/dist/src/utils/optimization-helpers.js.map +1 -0
- package/package.json +18 -3
- package/src/algorithms/centrality/betweenness.ts +167 -199
- package/src/algorithms/centrality/closeness.ts +73 -191
- package/src/algorithms/centrality/degree.ts +3 -3
- package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
- package/src/algorithms/centrality/delta-pagerank.ts +435 -0
- package/src/algorithms/centrality/index.ts +2 -0
- package/src/algorithms/centrality/pagerank.ts +66 -0
- package/src/algorithms/community/girvan-newman.ts +52 -59
- package/src/algorithms/community/index.ts +2 -0
- package/src/algorithms/community/label-propagation.ts +64 -35
- package/src/algorithms/community/leiden.ts +40 -41
- package/src/algorithms/community/louvain-optimized.ts +445 -0
- package/src/algorithms/community/louvain.ts +24 -104
- package/src/algorithms/community/modularity-utils.ts +146 -0
- package/src/algorithms/matching/bipartite.ts +8 -44
- package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
- package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
- package/src/algorithms/shortest-path/dijkstra.ts +17 -15
- package/src/algorithms/traversal/bfs-unified.ts +433 -0
- package/src/algorithms/traversal/bfs-variants.ts +496 -0
- package/src/algorithms/traversal/bfs.ts +10 -228
- package/src/benchmark-all-algorithms.ts +548 -0
- package/src/clustering/hierarchical.ts +241 -251
- package/src/clustering/index.ts +4 -2
- package/src/clustering/k-core.ts +87 -39
- package/src/clustering/spectral.ts +44 -20
- package/src/core/graph.ts +4 -4
- package/src/flow/ford-fulkerson.ts +186 -254
- package/src/flow/min-cut.ts +21 -11
- package/src/index.ts +6 -0
- package/src/link-prediction/adamic-adar.ts +17 -30
- package/src/link-prediction/common-neighbors.ts +7 -16
- package/src/optimized/bit-packed.ts +340 -0
- package/src/optimized/csr-graph.ts +455 -0
- package/src/optimized/direction-optimized-bfs.ts +291 -0
- package/src/optimized/graph-adapter.ts +200 -0
- package/src/optimized/index.ts +36 -0
- package/src/research/grsbm.ts +7 -16
- package/src/research/sync.ts +3 -32
- package/src/research/terahac.ts +10 -2
- package/src/types/index.ts +8 -0
- package/src/utils/algorithm-utilities.ts +2 -0
- package/src/utils/graph-converters.ts +241 -0
- package/src/utils/graph-utilities.ts +199 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/math-utilities.ts +140 -0
- package/src/utils/matrix-utilities.ts +2 -0
- package/src/utils/optimization-helpers.ts +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bfs-unified.js","sourceRoot":"","sources":["../../../../src/algorithms/traversal/bfs-unified.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Graph } from "../../core/graph.js";
|
|
2
|
+
import type { NodeId } from "../../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* BFS that tracks shortest path counts (for betweenness centrality)
|
|
5
|
+
*
|
|
6
|
+
* This variant of BFS computes:
|
|
7
|
+
* - Shortest distances from source to all reachable nodes
|
|
8
|
+
* - All predecessors on shortest paths
|
|
9
|
+
* - Number of shortest paths (sigma)
|
|
10
|
+
* - Stack of nodes in reverse BFS order
|
|
11
|
+
*/
|
|
12
|
+
export declare function bfsWithPathCounting(graph: Graph, source: NodeId, options?: {
|
|
13
|
+
optimized?: boolean;
|
|
14
|
+
}): {
|
|
15
|
+
distances: Map<NodeId, number>;
|
|
16
|
+
predecessors: Map<NodeId, NodeId[]>;
|
|
17
|
+
sigma: Map<NodeId, number>;
|
|
18
|
+
stack: NodeId[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* BFS that only returns distances (for closeness centrality)
|
|
22
|
+
*
|
|
23
|
+
* Optimized variant that skips predecessor tracking
|
|
24
|
+
*/
|
|
25
|
+
export declare function bfsDistancesOnly(graph: Graph, source: NodeId, cutoff?: number, options?: {
|
|
26
|
+
optimized?: boolean;
|
|
27
|
+
}): Map<NodeId, number>;
|
|
28
|
+
/**
|
|
29
|
+
* BFS for bipartite checking with partition sets
|
|
30
|
+
*
|
|
31
|
+
* Returns whether the graph is bipartite and the two partitions if it is
|
|
32
|
+
*/
|
|
33
|
+
export declare function bfsColoringWithPartitions(graph: Graph): {
|
|
34
|
+
isBipartite: boolean;
|
|
35
|
+
partitions?: [Set<NodeId>, Set<NodeId>];
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* BFS for finding augmenting paths (for flow algorithms)
|
|
39
|
+
*
|
|
40
|
+
* Finds a path from source to sink in a residual graph with positive capacity
|
|
41
|
+
*/
|
|
42
|
+
export declare function bfsAugmentingPath(residualGraph: Map<string, Map<string, number>>, source: string, sink: string): {
|
|
43
|
+
path: string[];
|
|
44
|
+
pathCapacity: number;
|
|
45
|
+
} | null;
|
|
46
|
+
/**
|
|
47
|
+
* BFS for weighted graphs using priority queue (simplified Dijkstra)
|
|
48
|
+
*
|
|
49
|
+
* Returns distances from source using edge weights
|
|
50
|
+
*/
|
|
51
|
+
export declare function bfsWeightedDistances(graph: Graph, source: NodeId, cutoff?: number, options?: {
|
|
52
|
+
optimized?: boolean;
|
|
53
|
+
}): Map<NodeId, number>;
|
|
54
|
+
//# sourceMappingURL=bfs-variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bfs-variants.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/traversal/bfs-variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAK/C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AASjD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAM,GACpC;IACK,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CA0DJ;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAM,GACpC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCrB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,KAAK,GACb;IACK,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAC3C,CA4CJ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC/C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACb;IACC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CA8CP;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAM,GACpC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqDrB"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { PriorityQueue } from "../../data-structures/priority-queue.js";
|
|
2
|
+
import { DirectionOptimizedBFS } from "../../optimized/direction-optimized-bfs.js";
|
|
3
|
+
import { toCSRGraph } from "../../optimized/graph-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Threshold for switching to CSR-optimized implementations.
|
|
6
|
+
* Based on benchmarks showing CSR benefits at this scale due to
|
|
7
|
+
* improved cache locality and reduced memory allocation overhead.
|
|
8
|
+
*/
|
|
9
|
+
const LARGE_GRAPH_THRESHOLD = 10000;
|
|
10
|
+
/**
|
|
11
|
+
* BFS that tracks shortest path counts (for betweenness centrality)
|
|
12
|
+
*
|
|
13
|
+
* This variant of BFS computes:
|
|
14
|
+
* - Shortest distances from source to all reachable nodes
|
|
15
|
+
* - All predecessors on shortest paths
|
|
16
|
+
* - Number of shortest paths (sigma)
|
|
17
|
+
* - Stack of nodes in reverse BFS order
|
|
18
|
+
*/
|
|
19
|
+
export function bfsWithPathCounting(graph, source, options = {}) {
|
|
20
|
+
const useOptimized = options.optimized ?? false;
|
|
21
|
+
// Use CSR format for large graphs
|
|
22
|
+
if (useOptimized && graph.nodeCount > LARGE_GRAPH_THRESHOLD) {
|
|
23
|
+
const csrGraph = toCSRGraph(graph);
|
|
24
|
+
return bfsWithPathCountingCSR(csrGraph, source);
|
|
25
|
+
}
|
|
26
|
+
const distances = new Map();
|
|
27
|
+
const predecessors = new Map();
|
|
28
|
+
const sigma = new Map();
|
|
29
|
+
const stack = [];
|
|
30
|
+
const queue = [];
|
|
31
|
+
// Initialize
|
|
32
|
+
distances.set(source, 0);
|
|
33
|
+
sigma.set(source, 1);
|
|
34
|
+
queue.push(source);
|
|
35
|
+
while (queue.length > 0) {
|
|
36
|
+
const current = queue.shift();
|
|
37
|
+
if (current === undefined) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
stack.push(current);
|
|
41
|
+
const currentDistance = distances.get(current) ?? 0;
|
|
42
|
+
const currentSigma = sigma.get(current) ?? 0;
|
|
43
|
+
// Process neighbors
|
|
44
|
+
const neighbors = graph.neighbors(current);
|
|
45
|
+
for (const neighbor of neighbors) {
|
|
46
|
+
// First time visiting this neighbor
|
|
47
|
+
if (!distances.has(neighbor)) {
|
|
48
|
+
distances.set(neighbor, currentDistance + 1);
|
|
49
|
+
queue.push(neighbor);
|
|
50
|
+
}
|
|
51
|
+
// Found a shortest path to neighbor
|
|
52
|
+
if (distances.get(neighbor) === currentDistance + 1) {
|
|
53
|
+
const neighborSigma = sigma.get(neighbor) ?? 0;
|
|
54
|
+
sigma.set(neighbor, neighborSigma + currentSigma);
|
|
55
|
+
const preds = predecessors.get(neighbor) ?? [];
|
|
56
|
+
preds.push(current);
|
|
57
|
+
predecessors.set(neighbor, preds);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
distances,
|
|
63
|
+
predecessors,
|
|
64
|
+
sigma,
|
|
65
|
+
stack,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* BFS that only returns distances (for closeness centrality)
|
|
70
|
+
*
|
|
71
|
+
* Optimized variant that skips predecessor tracking
|
|
72
|
+
*/
|
|
73
|
+
export function bfsDistancesOnly(graph, source, cutoff, options = {}) {
|
|
74
|
+
const useOptimized = options.optimized ?? false;
|
|
75
|
+
// Use CSR format for large graphs
|
|
76
|
+
if (useOptimized && graph.nodeCount > LARGE_GRAPH_THRESHOLD) {
|
|
77
|
+
const csrGraph = toCSRGraph(graph);
|
|
78
|
+
return bfsDistancesOnlyCSR(csrGraph, source, cutoff);
|
|
79
|
+
}
|
|
80
|
+
const distances = new Map();
|
|
81
|
+
const queue = [];
|
|
82
|
+
distances.set(source, 0);
|
|
83
|
+
queue.push(source);
|
|
84
|
+
while (queue.length > 0) {
|
|
85
|
+
const current = queue.shift();
|
|
86
|
+
if (current === undefined) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const currentDistance = distances.get(current) ?? 0;
|
|
90
|
+
// Stop if we've reached the cutoff distance
|
|
91
|
+
if (cutoff !== undefined && currentDistance >= cutoff) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const neighbors = graph.neighbors(current);
|
|
95
|
+
for (const neighbor of neighbors) {
|
|
96
|
+
if (!distances.has(neighbor)) {
|
|
97
|
+
distances.set(neighbor, currentDistance + 1);
|
|
98
|
+
queue.push(neighbor);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return distances;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* BFS for bipartite checking with partition sets
|
|
106
|
+
*
|
|
107
|
+
* Returns whether the graph is bipartite and the two partitions if it is
|
|
108
|
+
*/
|
|
109
|
+
export function bfsColoringWithPartitions(graph) {
|
|
110
|
+
const colors = new Map();
|
|
111
|
+
const partitionA = new Set();
|
|
112
|
+
const partitionB = new Set();
|
|
113
|
+
// Handle disconnected components
|
|
114
|
+
for (const node of graph.nodes()) {
|
|
115
|
+
if (!colors.has(node.id)) {
|
|
116
|
+
const queue = [node.id];
|
|
117
|
+
colors.set(node.id, 0);
|
|
118
|
+
partitionA.add(node.id);
|
|
119
|
+
while (queue.length > 0) {
|
|
120
|
+
const current = queue.shift();
|
|
121
|
+
if (current === undefined) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const currentColor = colors.get(current) ?? 0;
|
|
125
|
+
const nextColor = 1 - currentColor;
|
|
126
|
+
for (const neighbor of graph.neighbors(current)) {
|
|
127
|
+
if (!colors.has(neighbor)) {
|
|
128
|
+
colors.set(neighbor, nextColor);
|
|
129
|
+
queue.push(neighbor);
|
|
130
|
+
if (nextColor === 0) {
|
|
131
|
+
partitionA.add(neighbor);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
partitionB.add(neighbor);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (colors.get(neighbor) === currentColor) {
|
|
138
|
+
// Same color as current node - not bipartite
|
|
139
|
+
return { isBipartite: false };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
isBipartite: true,
|
|
147
|
+
partitions: [partitionA, partitionB],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* BFS for finding augmenting paths (for flow algorithms)
|
|
152
|
+
*
|
|
153
|
+
* Finds a path from source to sink in a residual graph with positive capacity
|
|
154
|
+
*/
|
|
155
|
+
export function bfsAugmentingPath(residualGraph, source, sink) {
|
|
156
|
+
const parent = new Map();
|
|
157
|
+
const queue = [];
|
|
158
|
+
parent.set(source, null);
|
|
159
|
+
queue.push(source);
|
|
160
|
+
while (queue.length > 0) {
|
|
161
|
+
const current = queue.shift();
|
|
162
|
+
if (current === undefined) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (current === sink) {
|
|
166
|
+
// Reconstruct path
|
|
167
|
+
const path = [];
|
|
168
|
+
let node = sink;
|
|
169
|
+
let pathCapacity = Infinity;
|
|
170
|
+
while (node !== null) {
|
|
171
|
+
path.unshift(node);
|
|
172
|
+
const parentNode = parent.get(node);
|
|
173
|
+
if (parentNode !== null && parentNode !== undefined) {
|
|
174
|
+
const capacity = residualGraph.get(parentNode)?.get(node) ?? 0;
|
|
175
|
+
pathCapacity = Math.min(pathCapacity, capacity);
|
|
176
|
+
}
|
|
177
|
+
node = parentNode ?? null;
|
|
178
|
+
}
|
|
179
|
+
return { path, pathCapacity };
|
|
180
|
+
}
|
|
181
|
+
const neighbors = residualGraph.get(current);
|
|
182
|
+
if (neighbors) {
|
|
183
|
+
for (const [neighbor, capacity] of neighbors) {
|
|
184
|
+
if (!parent.has(neighbor) && capacity > 0) {
|
|
185
|
+
parent.set(neighbor, current);
|
|
186
|
+
queue.push(neighbor);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* BFS for weighted graphs using priority queue (simplified Dijkstra)
|
|
195
|
+
*
|
|
196
|
+
* Returns distances from source using edge weights
|
|
197
|
+
*/
|
|
198
|
+
export function bfsWeightedDistances(graph, source, cutoff, options = {}) {
|
|
199
|
+
const useOptimized = options.optimized ?? false;
|
|
200
|
+
// Use CSR format for large graphs
|
|
201
|
+
if (useOptimized && graph.nodeCount > LARGE_GRAPH_THRESHOLD) {
|
|
202
|
+
const csrGraph = toCSRGraph(graph);
|
|
203
|
+
return bfsWeightedDistancesCSR(csrGraph, source, cutoff);
|
|
204
|
+
}
|
|
205
|
+
const distances = new Map();
|
|
206
|
+
const visited = new Set();
|
|
207
|
+
// Use efficient priority queue instead of array-based queue
|
|
208
|
+
const queue = new PriorityQueue();
|
|
209
|
+
distances.set(source, 0);
|
|
210
|
+
queue.enqueue(source, 0);
|
|
211
|
+
while (!queue.isEmpty()) {
|
|
212
|
+
const current = queue.dequeue();
|
|
213
|
+
if (current === undefined) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const currentDist = distances.get(current) ?? 0;
|
|
217
|
+
if (visited.has(current)) {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
visited.add(current);
|
|
221
|
+
// Stop if we've reached the cutoff distance
|
|
222
|
+
if (cutoff !== undefined && currentDist >= cutoff) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
for (const neighbor of graph.neighbors(current)) {
|
|
226
|
+
if (!visited.has(neighbor)) {
|
|
227
|
+
const edge = graph.getEdge(current, neighbor);
|
|
228
|
+
const weight = edge?.weight ?? 1;
|
|
229
|
+
const newDistance = currentDist + weight;
|
|
230
|
+
const oldDistance = distances.get(neighbor);
|
|
231
|
+
if (oldDistance === undefined || newDistance < oldDistance) {
|
|
232
|
+
distances.set(neighbor, newDistance);
|
|
233
|
+
queue.enqueue(neighbor, newDistance);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return distances;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* CSR-optimized version of bfsWithPathCounting
|
|
242
|
+
*/
|
|
243
|
+
function bfsWithPathCountingCSR(graph, source) {
|
|
244
|
+
const distances = new Map();
|
|
245
|
+
const predecessors = new Map();
|
|
246
|
+
const sigma = new Map();
|
|
247
|
+
const stack = [];
|
|
248
|
+
const queue = [];
|
|
249
|
+
// Initialize
|
|
250
|
+
distances.set(source, 0);
|
|
251
|
+
sigma.set(source, 1);
|
|
252
|
+
queue.push(source);
|
|
253
|
+
while (queue.length > 0) {
|
|
254
|
+
const current = queue.shift();
|
|
255
|
+
if (current === undefined) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
stack.push(current);
|
|
259
|
+
const currentDistance = distances.get(current) ?? 0;
|
|
260
|
+
const currentSigma = sigma.get(current) ?? 0;
|
|
261
|
+
// Process neighbors using CSR iteration
|
|
262
|
+
for (const neighbor of graph.neighbors(current)) {
|
|
263
|
+
// First time visiting this neighbor
|
|
264
|
+
if (!distances.has(neighbor)) {
|
|
265
|
+
distances.set(neighbor, currentDistance + 1);
|
|
266
|
+
queue.push(neighbor);
|
|
267
|
+
}
|
|
268
|
+
// Found a shortest path to neighbor
|
|
269
|
+
if (distances.get(neighbor) === currentDistance + 1) {
|
|
270
|
+
const neighborSigma = sigma.get(neighbor) ?? 0;
|
|
271
|
+
sigma.set(neighbor, neighborSigma + currentSigma);
|
|
272
|
+
const preds = predecessors.get(neighbor) ?? [];
|
|
273
|
+
preds.push(current);
|
|
274
|
+
predecessors.set(neighbor, preds);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
distances,
|
|
280
|
+
predecessors,
|
|
281
|
+
sigma,
|
|
282
|
+
stack,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* CSR-optimized version of bfsDistancesOnly
|
|
287
|
+
*/
|
|
288
|
+
function bfsDistancesOnlyCSR(graph, source, cutoff) {
|
|
289
|
+
// Use Direction-Optimized BFS for best performance
|
|
290
|
+
if (graph.nodeCount() > LARGE_GRAPH_THRESHOLD) {
|
|
291
|
+
const dobfs = new DirectionOptimizedBFS(graph);
|
|
292
|
+
const result = dobfs.search(source);
|
|
293
|
+
// Filter by cutoff if specified
|
|
294
|
+
if (cutoff !== undefined) {
|
|
295
|
+
const filtered = new Map();
|
|
296
|
+
for (const [nodeId, distance] of result.distances) {
|
|
297
|
+
if (distance <= cutoff) {
|
|
298
|
+
filtered.set(nodeId, distance);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return filtered;
|
|
302
|
+
}
|
|
303
|
+
return result.distances;
|
|
304
|
+
}
|
|
305
|
+
// Fallback to standard BFS on CSR
|
|
306
|
+
const distances = new Map();
|
|
307
|
+
const queue = [];
|
|
308
|
+
distances.set(source, 0);
|
|
309
|
+
queue.push(source);
|
|
310
|
+
while (queue.length > 0) {
|
|
311
|
+
const current = queue.shift();
|
|
312
|
+
if (current === undefined) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
const currentDistance = distances.get(current) ?? 0;
|
|
316
|
+
// Stop if we've reached the cutoff distance
|
|
317
|
+
if (cutoff !== undefined && currentDistance >= cutoff) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
for (const neighbor of graph.neighbors(current)) {
|
|
321
|
+
if (!distances.has(neighbor)) {
|
|
322
|
+
distances.set(neighbor, currentDistance + 1);
|
|
323
|
+
queue.push(neighbor);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return distances;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* CSR-optimized version of bfsWeightedDistances
|
|
331
|
+
*/
|
|
332
|
+
function bfsWeightedDistancesCSR(graph, source, cutoff) {
|
|
333
|
+
const distances = new Map();
|
|
334
|
+
const visited = new Set();
|
|
335
|
+
// Use efficient priority queue
|
|
336
|
+
const queue = new PriorityQueue();
|
|
337
|
+
distances.set(source, 0);
|
|
338
|
+
queue.enqueue(source, 0);
|
|
339
|
+
while (!queue.isEmpty()) {
|
|
340
|
+
const current = queue.dequeue();
|
|
341
|
+
if (current === undefined) {
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
const currentDist = distances.get(current) ?? 0;
|
|
345
|
+
if (visited.has(current)) {
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
visited.add(current);
|
|
349
|
+
// Stop if we've reached the cutoff distance
|
|
350
|
+
if (cutoff !== undefined && currentDist >= cutoff) {
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
for (const neighbor of graph.neighbors(current)) {
|
|
354
|
+
if (!visited.has(neighbor)) {
|
|
355
|
+
// Use actual edge weight from CSR graph, default to 1
|
|
356
|
+
const weight = graph.getEdgeWeight(current, neighbor) ?? 1;
|
|
357
|
+
const newDistance = currentDist + weight;
|
|
358
|
+
const oldDistance = distances.get(neighbor);
|
|
359
|
+
if (oldDistance === undefined || newDistance < oldDistance) {
|
|
360
|
+
distances.set(neighbor, newDistance);
|
|
361
|
+
queue.enqueue(neighbor, newDistance);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return distances;
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=bfs-variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bfs-variants.js","sourceRoot":"","sources":["../../../../src/algorithms/traversal/bfs-variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,11 @@
|
|
|
1
|
-
import type { Graph } from "../../core/graph.js";
|
|
2
|
-
import type { NodeId, ShortestPathResult, TraversalOptions, TraversalResult } from "../../types/index.js";
|
|
3
1
|
/**
|
|
4
2
|
* Breadth-First Search (BFS) implementation
|
|
5
3
|
*
|
|
6
4
|
* Explores graph level by level from a starting node. Guarantees shortest path
|
|
7
5
|
* in unweighted graphs and can be used for various graph analysis tasks.
|
|
6
|
+
*
|
|
7
|
+
* Automatically uses optimized implementations for large graphs (>10k nodes)
|
|
8
|
+
* to provide the best performance without requiring manual configuration.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
-
* Perform breadth-first search starting from a given node
|
|
11
|
-
*/
|
|
12
|
-
export declare function breadthFirstSearch(graph: Graph, startNode: NodeId, options?: TraversalOptions): TraversalResult;
|
|
13
|
-
/**
|
|
14
|
-
* Find shortest path between two nodes in an unweighted graph using BFS
|
|
15
|
-
*/
|
|
16
|
-
export declare function shortestPathBFS(graph: Graph, source: NodeId, target: NodeId): ShortestPathResult | null;
|
|
17
|
-
/**
|
|
18
|
-
* Find shortest paths from source to all reachable nodes using BFS
|
|
19
|
-
*/
|
|
20
|
-
export declare function singleSourceShortestPathBFS(graph: Graph, source: NodeId): Map<NodeId, ShortestPathResult>;
|
|
21
|
-
/**
|
|
22
|
-
* Check if the graph is bipartite using BFS coloring
|
|
23
|
-
*/
|
|
24
|
-
export declare function isBipartite(graph: Graph): boolean;
|
|
10
|
+
export { breadthFirstSearch, isBipartite, shortestPathBFS, singleSourceShortestPathBFS, } from "./bfs-unified.js";
|
|
25
11
|
//# sourceMappingURL=bfs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bfs.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/traversal/bfs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bfs.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/traversal/bfs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACH,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,2BAA2B,GAC9B,MAAM,kBAAkB,CAAC"}
|