题头,matlab代码尝试,共勉。有误请指正
先感谢7:45am大佬的文献提供和笔记。以下为其文章
论文笔记—— 利用邻接信息熵识别复杂网络中的重要节点-CSDN博客
(该文章有举例理解定义和算法步骤,本文不再叙述。)
相关定义及公式
其中是从节点i指向节点j的边数,是从节点j指向节点i的边数,为节点i将被其邻居j选择的概率,为邻接信息熵。
下列代码中,Link为有向图的邻接矩阵,若为有向图可用
A = adjacency(G, 'weighted'); %获取邻接矩阵
function Hi = Hmessage(Link, lambda)
degrees_in = sum(Link, 1)'; % 计算每个节点的入度
degrees_out = sum(Link, 2); % 计算每个节点的出度
Hi = zeros(1, size(Link, 2));
% 计算节点邻接度K
K = lambda * degrees_in + (1 - lambda) * degrees_out;
for i = 1:size(Link, 2)
temp_in = find(Link(:, i))'; % 节点i的入度邻接节点
temp_out = find(Link(i, :)); % 节点i的出度邻接节点
Kwj = 0; % 节点i的入节点度值
Kjw = 0; % 节点i的出节点度值
for j = 1:size(temp_in, 2)
Kwj = Kwj + K(temp_in(j));
end
for j = 1:size(temp_out, 2)
Kjw = Kjw + K(temp_out(j));
end
Q(i) = Kwj * lambda + (1 - lambda) * Kjw;
end
for i = 1:size(Link, 2)
temp_in = find(Link(:, i))'; % 节点i的入度邻接节点
temp_out = find(Link(i, :)); % 节点i的出度邻接节点
temp = unique([temp_out temp_in]); % 节点i的邻接节点
for j = 1:size(temp, 2)
if Q(temp(j)) ~= 0 % 避免除以0的情况
p = K(i) / Q(temp(j));
Hi(i) = p * log2(p) + Hi(i);
end
end
Hi(i) = -Hi(i);
end
Hi = abs(Hi);
end