Skip to main content

uni_algo/algo/algorithms/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2024-2026 Dragonscale Team
3
4//! Core algorithm trait and common utilities.
5
6use crate::algo::GraphProjection;
7
8/// Core trait for all graph algorithms.
9pub trait Algorithm: Send + Sync {
10    /// Algorithm parameters.
11    type Config: Default + Clone + Send + 'static;
12    /// Result type.
13    type Result: Send + 'static;
14
15    /// Algorithm identifier.
16    fn name() -> &'static str;
17
18    /// Execute algorithm on a projection.
19    fn run(graph: &GraphProjection, config: Self::Config) -> Self::Result;
20
21    /// Whether this algorithm requires reverse edges.
22    fn needs_reverse() -> bool {
23        false
24    }
25
26    /// Whether this algorithm requires edge weights.
27    fn needs_weights() -> bool {
28        false
29    }
30}
31
32mod pagerank;
33pub use pagerank::{PageRank, PageRankConfig, PageRankResult};
34
35mod wcc;
36pub use wcc::{Wcc, WccConfig, WccResult};
37
38mod dijkstra;
39pub use dijkstra::{Dijkstra, DijkstraConfig, DijkstraResult};
40
41mod louvain;
42pub use louvain::{Louvain, LouvainConfig, LouvainResult};
43
44mod label_propagation;
45pub use label_propagation::{LabelPropagation, LabelPropagationConfig, LabelPropagationResult};
46
47mod betweenness;
48pub use betweenness::{Betweenness, BetweennessConfig, BetweennessResult};
49
50mod node_similarity;
51pub use node_similarity::{
52    NodeSimilarity, NodeSimilarityConfig, NodeSimilarityResult, SimilarityMetric,
53};
54
55mod closeness;
56pub use closeness::{Closeness, ClosenessConfig, ClosenessResult};
57
58mod triangle_count;
59pub use triangle_count::{TriangleCount, TriangleCountConfig, TriangleCountResult};
60
61mod kcore;
62pub use kcore::{KCore, KCoreConfig, KCoreResult};
63
64mod random_walk;
65pub use random_walk::{RandomWalk, RandomWalkConfig, RandomWalkResult};
66
67mod apsp;
68pub use apsp::{AllPairsShortestPath, AllPairsShortestPathConfig, AllPairsShortestPathResult};
69
70mod scc;
71pub use scc::{Scc, SccConfig, SccResult};
72
73mod topological_sort;
74pub use topological_sort::{TopologicalSort, TopologicalSortConfig, TopologicalSortResult};
75
76mod cycle_detection;
77pub use cycle_detection::{CycleDetection, CycleDetectionConfig, CycleDetectionResult};
78
79mod bipartite_check;
80pub use bipartite_check::{BipartiteCheck, BipartiteCheckConfig, BipartiteCheckResult};
81
82mod bridges;
83pub use bridges::{Bridges, BridgesConfig, BridgesResult};
84
85mod articulation_points;
86pub use articulation_points::{
87    ArticulationPoints, ArticulationPointsConfig, ArticulationPointsResult,
88};
89
90mod astar;
91pub use astar::{AStar, AStarConfig, AStarResult};
92
93mod bidirectional_dijkstra;
94pub use bidirectional_dijkstra::{
95    BidirectionalDijkstra, BidirectionalDijkstraConfig, BidirectionalDijkstraResult,
96};
97
98mod bellman_ford;
99pub use bellman_ford::{BellmanFord, BellmanFordConfig, BellmanFordResult};
100
101mod k_shortest_paths;
102pub use k_shortest_paths::{KShortestPaths, KShortestPathsConfig, KShortestPathsResult};
103
104mod mst;
105pub use mst::{MinimumSpanningTree, MstConfig, MstResult};
106
107mod max_matching;
108pub use max_matching::{MaximumMatching, MaximumMatchingConfig, MaximumMatchingResult};
109
110mod dinic;
111pub use dinic::{Dinic, DinicConfig, DinicResult};
112
113mod ford_fulkerson;
114pub use ford_fulkerson::{FordFulkerson, FordFulkersonConfig, FordFulkersonResult};
115
116mod graph_metrics;
117pub use graph_metrics::{GraphMetrics, GraphMetricsConfig, GraphMetricsResult};
118
119mod degree_centrality;
120pub use degree_centrality::{
121    DegreeCentrality, DegreeCentralityConfig, DegreeCentralityResult, DegreeDirection,
122};
123
124mod harmonic_centrality;
125pub use harmonic_centrality::{
126    HarmonicCentrality, HarmonicCentralityConfig, HarmonicCentralityResult,
127};
128
129mod eigenvector_centrality;
130pub use eigenvector_centrality::{
131    EigenvectorCentrality, EigenvectorCentralityConfig, EigenvectorCentralityResult,
132};
133
134mod katz_centrality;
135pub use katz_centrality::{KatzCentrality, KatzCentralityConfig, KatzCentralityResult};
136
137mod maximal_cliques;
138pub use maximal_cliques::{MaximalCliques, MaximalCliquesConfig, MaximalCliquesResult};
139
140mod all_simple_paths;
141pub use all_simple_paths::{AllSimplePaths, AllSimplePathsConfig, AllSimplePathsResult};
142
143mod elementary_circuits;
144pub use elementary_circuits::{
145    ElementaryCircuits, ElementaryCircuitsConfig, ElementaryCircuitsResult,
146};
147
148mod graph_coloring;
149pub use graph_coloring::{GraphColoring, GraphColoringConfig, GraphColoringResult};