use crate::Graph;
use std::collections::HashMap;
use std::fmt::Display;
use std::hash::Hash;
pub fn degree_centrality<T, A>(graph: &Graph<T, A>) -> HashMap<T, f64>
where
T: Hash + Eq + Clone + Ord + Display + Send + Sync,
A: Clone + Send + Sync,
{
let num_nodes = graph.get_all_nodes().len();
if num_nodes <= 1 {
return graph
.get_all_nodes()
.iter()
.map(|n| (n.name.clone(), 1.0))
.collect();
}
let s = 1.0 / (num_nodes as f64 - 1.0);
graph
.get_all_nodes()
.iter()
.map(|n| {
(
n.name.clone(),
graph.get_node_degree(n.name.clone()).unwrap() as f64 * s,
)
})
.collect()
}