graph_neighbor_matching/
lib.rs

1//! A graph similarity score using neighbor matching according to [this paper][1].
2//!
3//! [1]: http://arxiv.org/abs/1009.5290 "2010, Mladen Nikolic, Measuring Similarity
4//!      of Graph Nodes by Neighbor Matching"
5//!
6//! TODO: Introduce EdgeWeight trait to abstract edge weight similarity.
7
8pub mod graph;
9mod graph_traits;
10mod node_color_matching;
11mod score_norm;
12mod similarity_matrix;
13
14use closed01::Closed01;
15pub use {graph_traits::*, node_color_matching::*, score_norm::*, similarity_matrix::*};
16
17impl NodeColorWeight for f32 {
18    fn node_color_weight(&self) -> f32 {
19        *self
20    }
21}
22
23pub fn similarity_max_degree<T: Graph>(a: &T, b: &T, num_iters: usize, eps: f32) -> Closed01<f32> {
24    let mut s = SimilarityMatrix::new(a, b, IgnoreNodeColors);
25    s.iterate(num_iters, eps);
26    s.score_optimal_sum_norm(None, ScoreNorm::MaxDegree)
27}
28
29pub fn similarity_min_degree<T: Graph>(a: &T, b: &T, num_iters: usize, eps: f32) -> Closed01<f32> {
30    let mut s = SimilarityMatrix::new(a, b, IgnoreNodeColors);
31    s.iterate(num_iters, eps);
32    s.score_optimal_sum_norm(None, ScoreNorm::MinDegree)
33}