介數中心性和接近中心性指標, 雖然具有較好的刻畫節點重要性的能力, 但計算複雜度太高, 難以在大規模網絡上使用. 爲了權衡算法的效率和效果, Chen 等人提出了一種基於半局部信息的節點重要性排序方法, 簡稱半局部中心性(semi-local centrality). 首先定義N(w)爲節點Vw的兩層鄰居度,其值等於從 Vw出發 2步內可到達的鄰居的數目, 然後定義
其中 表示節點 vj的一階鄰居節點的集合. 最終節點 vi的局部中心性定義爲
可見, 半局部中心性涉及了節點的四階鄰居信息.
###############################################################
#CreatedDt:20170603
#Author:Scc
#Function: Chen等 考慮最近鄰居節點和次鄰居節點的信息
#一種多級鄰居節點的重要性排序 局部中心性LC
#參數:A--鄰接矩陣,n--網絡節點個數;返回:LC--局部中心性
###############################################################
calLC<-function(A,n){
#計算度
D<-apply(A,1,sum) #即最近鄰居節點和次鄰居節點NeiborN
NeiborN<-rep(0,n)
#library(dplyr)
for(i in 1:n){
Neibor<-which(A[i,]==1) #最近鄰居節點下標
for(k in Neibor){
Neibor2<-which(A[k,]==1) #最近鄰居節點的鄰居節點Neibor2
Neibor<-union(Neibor,Neibor2) #合併得到鄰居節點和次鄰居節點和當前節點
}
NeiborN[i]<-length(Neibor)-1;#計算當前節點的鄰居節點和次鄰居節點個數(去掉當前節點)
}
#計算鄰居節點的最近鄰居節點和次鄰居節點個數之和
Q<-rep(0,n)
for(i in 1:n){
Q[i]<-sum(NeiborN[which(A[i,]==1)]);
}
#計算局部中心性
LC<-rep(0,n) for(i in 1:n){
LC[i]<-sum(Q[which(A[i,]==1)]);
}
return (LC);
}
參考:
Duanbing Chen, Linyuan Lü, Ming-Sheng Shang, et al. Identifying influential nodes in complex networks[J]. Physica A: Statistical Mechanics and its Applications, 2012, 391(4):1777-1787.
任曉龍, 呂琳媛. 網絡重要節點排序方法綜述[J]. 科學通報, 2014(13):1175-1197.
http://www.xiaowangyun.com/wyblog/detail/?id=121