-
Notifications
You must be signed in to change notification settings - Fork 0
/
GraphMetrics.cs
37 lines (30 loc) · 1.19 KB
/
GraphMetrics.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GraphFramework.Interfaces;
namespace GraphGenerationModelsSample {
public static class GraphMetrics {
public static SortedDictionary<int, double> OutDegreeDistribution<TVertex>(this IAdjacencyGraph<TVertex> graph) {
return DegreeDistribution(graph,(v => graph.OutDegree(v))) ;
}
public static SortedDictionary<int, double> InDegreeDistribution<TVertex>(this IBidirectionalGraph<TVertex> graph) {
return DegreeDistribution(graph, (v => graph.InDegree(v)));
}
public static SortedDictionary<int, double> TotalDegreeDistribution<TVertex>(this IAdjacencyGraph<TVertex> graph) {
return DegreeDistribution(graph, (v => graph.AdjacentDegree(v)));
}
private static SortedDictionary<int, double> DegreeDistribution<TVertex>(this IAdjacencyGraph<TVertex> graph, Func<TVertex, int> DegreeFunc) {
SortedDictionary<int, double> DegreeDist = new SortedDictionary<int, double>();
foreach (var v in graph.Vertices) {
var degree = DegreeFunc(v);
if (DegreeDist.ContainsKey(degree)) {
DegreeDist[degree]++;
} else {
DegreeDist.Add(degree, 1);
}
}
return DegreeDist;
}
}
}