Newman快速社区发现算法:
FastCommunity算法
论文中的公式不是太好懂,这里详细描述一下:
Q的具体公式为:
目标函数:
MAX Q = 求和{ dki/2m - ((dki+dko)/2m) ^ 2 } (
k= 1...x )
x为分得的社区个数
dki -社区k内部的所有点的度数和
dko -社区k边界向外部的度数和,也可以说是社区k的邻接度和。
m -图中所有边数和
2m -图中所有点的度数和。
==================
比如:
$ cat in1.wpairs
1 2 1
3 4 1
2 3 1
4 5 1
5 6 1
运行结果为:
scanning input file for basic information.
edgecount: [0]
edgecount: [5] total (first pass)
allocating space for network.
reparsing the input file to build network data structure.
edgecount: [0]
edgecount: [5] total (second pass)
totweight: [5]
now building initial dQ[]
starting algorithm now.
************ hsize = 6
Q[0] = -0.18 dQ = 0.16 |H| = 5
join: 2 -> 3 (1 -> 2)
Q[1] = -0.02 dQ = 0.16 |H| = 4
join: 7 -> 6 (1 -> 2)
Q[2] = 0.14 dQ = 0.12 |H| = 3
join: 4 <- 5 (2 <- 2)
Q[3] = 0.26 dQ = -0.04 |H| = 2
join: 4 <- 3 (2 <- 1)
Q[4] = 0.22
exited safely
那么最大模块性Q的聚合划分状态为:
1——2——
3——4——
5——6
最大模块性 Q[3] = (2/10 - (3/10)^2) *2 + (2/10 - (4/10)^2) = 26/100 = 0.26