节点重要度算法-MATLAB源代码
更新时间:2024-01-29 13:34:01 阅读量: 教育文库 文档下载
节点收缩算法:
function Z=node(a,dy)%a为邻接矩阵 a(a==inf)=0; a(~=0)=1; n=size(a,1);%矩阵维数 Z=zeros(n,1);%节点重要度向量 %由邻接矩阵a得到直接矩阵H %H表示c(i j) H=zeros(size(a)); for i=1:n for j=1:n if j==i H(i,j)=0; elseif a(I,j)==1 H(i,j)=1; else H(i,j)=inf; end end end %用Floyd法计算节点收缩前的最短就离矩阵D D=H; for k=1:n for i=1:n for j=1:n If D(i,k)+D(k,j) %计算节点重要度 D2=zeros(size(D)); for i=1:n %得到与节点i邻接的节点向量I I=zeros(1,0); T=0; for j=1:n if a(i,j)=1 T=t+1; I=[i,j]; end end %计算收缩后最短距离矩阵D2 ò为d’(pq) D为d(pq) for p=1:n for q=1:n If p~=1&q~=i If D(p,i)+D(i,q)==D(p,q) D2(p,q)=D(p,q)-2; elseifD(p,i)+D(i,q)==D(p,q)+1 D2(p,q)=D(p,q)-1; elseif D(p,i)+D(i,q)==D(p,q)+2 D2(p,q)=D(p,q); end elseif p==i|q==i D2(p,q)=D(p,q)-1; else D2(p,q)=0; end end end N3=n-t;%收缩后的节点数n3 D3=D2;%计算收缩后的最短距离矩阵D3,D3为D D3(I,:)=[];%删除与节点i邻接的节点对应的行 D3(:,I)=[];%删除与节点i邻接的节点对应的列 %计算节点收缩后的节点重要度 s=0; for p=1:n3 for q=p:n3 s=s+D3(p,q); end end l=s/(n3*(n3-1)/2);%为n Z(i)=1/(n3*l); end ===================================节点介数========================= function B=betweenness_node(A,a) %%求网络节点介数,BY QiCheng %%思想:节点i、j间的距离等于节点i、k间距离与节点k、j间距离时,i、j间的最短路径经过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间最短路径条数 if a==0 for k=1:N for i=1:N if i~=k %两端节点不算 for j=i+1:N %因为是无向的,所以正向、反向只算一次,所以只算一半; %都算的话累加一起就是两倍了,也不影响 if j~=k %两端节点不算 if D(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 end end else for k=1:N for i=1:N if i~=k %两端节点不算 for j=1:N if j~=k %两端节点不算 if D(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 end end end ====================================边介数========================== function B=betweenness_edge(A,a) %%求网络边介数,BY QiCheng %%思想:节点i、j间的距离等于节点i、k间距离与节点k、j间距离时,i、j间的最短路径经过k。 %%因为i、j节点的最短路径经过k时,i到k与k到j必定都是最短路,这个可以用反证法来证明。 % A————网络邻接矩阵,亦可以是赋权图 % a==0为无向网络;a==1为有向网络; % B————边介数 N=size(A,1); B=zeros(N,N); [D,C,aver_D]=Distance_F(A); %C是ij间最短路径条数 for i=1:N %**************************************** C(i,i)=1; %不管有没有自连接,自身到自身的最短路数为1, end %因为nm的其中一点可能与i或j重合,若不设为1,会算少 %**************************************** if a==0 for n=1:N for m=1:N %边介数没有什么记不计入端点一说 for i=1:N for j=1+i:N %无向网络对称,正向、反向只算一次,所以只算一半;全算就是两倍 if D(i,j)==D(i,n)+D(n,m)+D(m,j)&C(i,j)~=0&A(n,m)~=0 %满足条件即证明ij间最短路径经过边enm B(n,m)=B(n,m)+C(i,n)*C(m,j)/C(i,j); B(m,n)=B(n,m); end end end end end else for n=1:N for m=1:N %****注意:有向、无向网络的边介数算出来是一样的, %因为虽然无向网络正反向只算一次,但同时nm不考虑通过顺序,二者抵消了 for i=1:N for j=1:N if D(i,j)==D(i,n)+D(n,m)+D(m,j)&C(i,j)~=0&A(n,m)~=0 %满足条件即证明ij间最短路径经过边eik B(n,m)=B(n,m)+C(i,n)*C(m,j)/C(i,j); end end end end end end for i=1:N B(i,i)=0; %不考虑自连接,就相当于计算节点介数时不考虑端点一样 end ======================需要调用函数求节点间最短路径数============================== function [D,C,aver_D]=Distance_F(A) %% 求复杂网络中两节点的距离、平均最短路径长度以及节点间最短路径条数 %% 采用Floyd算法计算任意两节点的距离,并求最短路径条数用于计算介数 % A—————网络图的邻接矩阵, **** 亦可以是赋权图 **** % D—————网络的距离矩阵 % C—————节点间最短路径条数 % aver_D—————网络的平均路径长度 N=size(A,2);%N为矩阵A的列数 D=A; C=A; C((C==inf))=0;%若A为赋权图,inf表示两点间无连接,所以连接数记为0 C((C~=0))=1;%原先直接相连的边记为1,可以有自连接(若A为赋权图,自连接信息就没了) D((D==0))=inf;%将邻接矩阵变为邻接距离矩阵,两点无边相连时赋值为无穷大 %自身到自身的距离为0 for i=1:N D(i,i)=0; %自身到自身的距离为0 end for k=1:N %Floyd算法求解任意两点的最短路径长度 for i=1:N for j=1:N %可以只算一半,因为是对称的,**不影响结果大小**,但是记得加上D(j,i)=D(i,j) if D(i,j)>D(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j); %更新ij间距离 C(i,j)=C(i,k)*C(k,j); %更新最短路径条数 elseif D(i,j)==D(i,k)+D(k,j) if k~=i&&k~=j %为避免重复计数,这里排除端点; C(i,j)=C(i,j)+C(i,k)*C(k,j); %更新与最短距离相同的路径数 end end end end end aver_D=sum(sum(D))/(N*(N-1)); %平均最短路径长度 % if aver_D==inf % disp('该网络图不是连通图'); % end
正在阅读:
节点重要度算法-MATLAB源代码01-29
学校常规管理讲话稿03-19
电路分析基础实验报告07-18
词句理解06-18
the Great Wall05-11
公安机关人民警察的内务制度02-26
《原创》大一下学期期末考试历史知识点整理09-21
注册测绘工程师考试试题12-25
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 节点
- 源代码
- 算法
- 重要
- MATLAB
- 2015高教社杯全国大学生数学建模竞赛获奖名单 - 图文
- 初中英语词汇教学的实践研究结题报告
- 生活委员个人工作总结及工作计划
- 高层建筑室内燃气管道设计的要点
- 有理数运算c++程序
- 图书馆改造装修工程项目施工设计方案
- 2012年全国各地中考数学解析汇编第二十六章二次函数的应用
- 非劣效界值的确定
- 奥尔夫教材
- 红歌会领导讲话稿
- 2016年水利检测员继续教育混凝土
- (20份合集)泰安市2018年中考物理模拟试题 - 图文
- 公司财务风险预警模型
- 雅思阅读教师25小时授课大纲-雅思阅读剑桥4-8 - 图文
- 12UCOS学生练习- 带答案
- 企业财务会计第六版第四章习题答案
- 写钢笔字教学设计及反思
- 食品工厂生产实习心得
- 机电传动与控制考试参考答案2014
- 修改病句口诀