昨天面试被问到betweenness的计算方法,很尴尬没有自己实现过。平时用的时候通常用Python的networkx包计算,具体算法之前还没了解过。复杂网络的教材通常就介绍了betweenness的意义与定义,直接从定义出发计算的复杂度达到 O(n3)
这里介绍一个2001年brandes提出的算法”A faster algorithm for betweenness centrality”,在无权图上复杂度为 O(mn) ,在有权图上复杂度在 O(mn+nlogn) ,在网络稀疏的时候,复杂度接近 O(n2) .
betweenness定义
betweenness的直接定义式为:
CB(v)=∑s≠v≠t∈Vσst(v)σst
其中 σst(v) 表示经过节点 v 的
直观上来说,betweenness反映了节点 v 作为“桥梁”的重要程度。
为了方便,定义pair-dependency为
则
CB(v)=∑s≠v≠t∈Vδst(v)
如何计算 σst
首先引入一个记号
Ps(v)={
u∈V:{
u,v}∈E,dG(s,v)=dG(s,u)+ω(u,v)}
意思就是从节点 s 到节点