Skip to main content

leading_eigenvector

Function leading_eigenvector 

Source
pub fn leading_eigenvector(
    graph: &Graph,
    weights: Option<&[f64]>,
    steps: Option<u32>,
) -> IgraphResult<LeadingEigenvectorResult>
Expand description

Detect communities using Newman’s leading eigenvector method.

Repeatedly bisects communities by the sign of the leading eigenvector of the restricted modularity matrix. Stops when no further split increases modularity, or after steps splits.

Edge directions are ignored (the graph is treated as undirected).

steps: maximum number of split steps. Pass None for vcount - 1 (exhaustive).

§Examples

use rust_igraph::{Graph, leading_eigenvector};

// Barbell graph: two triangles connected by a bridge
let mut g = Graph::with_vertices(6);
// Triangle 1
g.add_edge(0, 1).unwrap();
g.add_edge(1, 2).unwrap();
g.add_edge(0, 2).unwrap();
// Triangle 2
g.add_edge(3, 4).unwrap();
g.add_edge(4, 5).unwrap();
g.add_edge(3, 5).unwrap();
// Bridge
g.add_edge(2, 3).unwrap();

let result = leading_eigenvector(&g, None, None).unwrap();
// Should find 2 communities (one per triangle)
assert_eq!(result.membership[0], result.membership[1]);
assert_eq!(result.membership[3], result.membership[4]);
assert_ne!(result.membership[0], result.membership[3]);