pub trait RelabelByDegreeOp<NI, EV> {
    // Required method
    fn make_degree_ordered(&mut self);
}

Required Methods§

source

fn make_degree_ordered(&mut self)

Creates a new graph by relabeling the node ids of the given graph.

Ids are relabaled using descending degree-order, i.e., given n nodes, the node with the largest degree will become node id 0, the node with the smallest degree will become node id n - 1.

Note, that this method creates a new graph with the same space requirements as the input graph.

Example
use graph_builder::prelude::*;

let mut graph: UndirectedCsrGraph<u32> = GraphBuilder::new()
    .edges(vec![(0, 1), (1, 2), (1, 3), (3, 0)])
    .build();

assert_eq!(graph.degree(0), 2);
assert_eq!(graph.degree(1), 3);
assert_eq!(graph.degree(2), 1);
assert_eq!(graph.degree(3), 2);

let mut neighbors = graph.neighbors(0);
assert_eq!(neighbors.next(), Some(&1));
assert_eq!(neighbors.next(), Some(&3));
assert_eq!(neighbors.next(), None);

graph.make_degree_ordered();

assert_eq!(graph.degree(0), 3);
assert_eq!(graph.degree(1), 2);
assert_eq!(graph.degree(2), 2);
assert_eq!(graph.degree(3), 1);

assert_eq!(graph.neighbors(0).as_slice(), &[1, 2, 3]);

Implementors§

source§

impl<G, NI, EV> RelabelByDegreeOp<NI, EV> for Gwhere NI: Idx, EV: Copy + Ord + Sync, G: Graph<NI> + UndirectedDegrees<NI> + UndirectedNeighborsWithValues<NI, EV> + SwapCsr<NI, NI, EV> + Sync,