资源描述:
《节点重要度算法-matlab源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、节点收缩算法:functionZ=node(a,dy)%a为邻接矩阵a(a==inf)=0;a(~=0)=1;n=size(a,1);%矩阵维数Z=zeros(n,1);%节点重要度向量%由邻接矩阵a得到直接矩阵H%H表示c(ij)H=zeros(size(a));fori=1:nforj=1:nifj==iH(i,j)=0;elseifa(I,j)==1H(i,j)=1;elseH(i,j)=inf;endendend%用Floyd法计算节点收缩前的最短就离矩阵DD=H;fork=1:nfori=1:
2、nforj=1:nIfD(i,k)+D(k,j)3、,q)=D(p,q)-2;elseifD(p,i)+D(i,q)==D(p,q)+1D2(p,q)=D(p,q)-1;elseifD(p,i)+D(i,q)==D(p,q)+2D2(p,q)=D(p,q);endelseifp==i|q==iD2(p,q)=D(p,q)-1;elseD2(p,q)=0;endendendN3=n-t;%收缩后的节点数n3D3=D2;%计算收缩后的最短距离矩阵D3,D3为DD3(I,:)=[];%删除与节点i邻接的节点对应的行D3(:,I)=[];%删除与节点i邻接的节点
4、对应的列%计算节点收缩后的节点重要度s=0;forp=1:n3forq=p:n3s=s+D3(p,q);endendl=s/(n3*(n3-1)/2);%为nZ(i)=1/(n3*l);end===================================节点介数=========================functionB=betweenness_node(A,a)%%求网络节点介数,BYQiCheng%%思想:节点i、j间的距离等于节点i、k间距离与节点k、j间距离时,i、j间的最短路径
5、经过k。%%因为i、j节点的最短路径经过k时,i到k与k到j必定都是最短路,这个可以用反证法来证明。%A—网络邻接矩阵,亦可以是赋权图%a==0为无向网络;a==1为有向网络;%B—节点介数N=size(A,1);B=zeros(1,N);[D,C,aver_D]=Distance_F(A);%C是ij间最短路径条数ifa==0 fork=1:N fori=1:N ifi~=k %两端节点不算
6、forj=i+1:N %因为是无向的,所以正向、反向只算一次,所以只算一半; %都算的话累加一起就是两倍了,也不影响 ifj~=k %两端节点不算 ifD(i,j)==D(i,k)+D(k,j)&C(i,j)~=0 %满足条件即证明ij间最短路径经过k节点 B(k)=B(k)
7、+C(i,k)*C(k,j)/C(i,j); end end end end end endelse fork=1:N fori=1:N ifi~=k %两端节点不算 forj=1:N ifj~=k %两端节点不算
8、 ifD(i,j)==D(i,k)+D(k,j)&C(i,j)~=0 %满足条件即证明ij间最短路径经过k节点 B(k)=B(k)+C(i,k)*C(k,j)/C(i,j); end end end end