给定图G(V, E)
目标: 找到一簇子图, 每个子图都是一个社区(community) 即 \(S = \{S_i | S_i \subset V \}\)
社区(community): 子图中任意点在该子图中的连通性 高于 非社区的子图
定义
社区连通性 community connectedness, 即点 \(v_j\)在社区\(S_i\)邻点超阈值个数 除以 该社区点数, 代表 点对应社区的归属性。
\[ \zeta^i_j = \frac{|N_i(v_j)|-K+1}{|S_i| - K} if |N_i(v_j)| > K, else, 0 \]
邻接连通性 neighborhood connectedness, 即 点 \(v_j\)在社区\(S_i\)邻点数 除以 \(v_j\)的总邻点数, 代表 点加入新社区的可能性
\[ \xi^i_j = \frac{|N_i(v_j)|}{|N(v_j)|} \]
外围结点 peripheral node: \(v_i\)的在社区内的邻接点
\[ Added_i = \{v_k|v_k \in N(v_i) \land v_k \in S_i \}, \forall S_i \in S^l \]
对两个社区\((C, C^{'})\), 定义社区相似度:
\[\psi(C, C^{'}) = \frac{|C \cap C^{'}|}{min(|C|, |C^{'}|)}\]
图示:
对点\(v_i\)为索引的社区\(S_i\),仅需要与该社区内其他点为索引的社区进行比较, 可有效节省时间。
最右的非零元为 第14位, 向左扫描, 第11位的值小于第14位且小于第10位, 因此选择第11位
for(j = buck-1 ; j > 0; j--){
if(network[i].bcount[j]){
mbuck = j;
break;
}
}
min = network[i].bcount[mbuck];
for(j = mbuck-1 ; j > 0; j--){
if(network[i].bcount[j] < min)
min = network[i].bcount[j];
if(network[i].bcount[j] == min && network[i].bcount[j] <= network[i].bcount[j -1]){
network[i].bucket = j + 1;
break;
}
}
if(j == 0)
network[i].bucket = 0;
对各个社区\(S_i\) 进行如下操作:
注: > Removal of only peripheral nodes ensures that nodes that form the core of a community are never eliminated
对每个社区\(S_i\), 从外围点\(Added_i\)向它的邻点\(v_j\)进行扩展。
扩展需要满足以下条件:
join cut-off 选中阈值的计算方式与 stay 相同
时间复杂度:
\[O(m+nl^2 + nl^3 + nl^3) = O(m + nl^3) \approx O(m+n)\]
\[ NMI(C_A, C_B) = \frac { -2 \sum^{C_A}_{i=1}\sum^{C_B}_{j=1} C_{ij} log( \frac{C_{ij}N}{C_{i.} C_{.j}} ) } { \sum^{C_A}_{i=1}{C_{i.}log(\frac{C_{i.}}{N})} + \sum^{C_B}_{j=1}{c_{.j} log(\frac{c_{.j}}{N})} } \]
有点奇怪
The proposed cut-off selection method has been chosen after observing the score distributions.
It helps in selecting communities with near-best connectivities
maximum number of communities that can be detected by this method is equaltothenumberofnodesinanetwork
因为 初始化后, 只有删除社区, 没有添加新社区
Orkut 社区个数是点数的两倍有余
如果能合理地添加新社区, 也许可以作为很好的 动态图的方法
在去重与排除两个阶段, 遍历的次序会有小的影响