一、什么是关键节点检测
关键结点检测(CDNP)也就是识别一些网络中的重要结点,当把这些结点删除后会对网络产生巨大影响(比如让图变的支离破碎),通过识别这样的结点,我们就可以很好的进行预防,就有很强的现实意义。
二、贪婪算法的局限性
案例
我们以结点中心性中的度中心性为衡量指标,来找出图中的关键节点。
其Matlab代码:
% 示例使用
% 假设 G 是一个邻接矩阵表示的图
% 这里我们用一个简单的3x3邻接矩阵作为示例
G =[0 1 1 1 1 0 ;1 0 1 0 0 0 ;
1 1 0 1 0 0 ;1 0 1 0 1 0 ;
1 0 0 1 0 1 ;0 0 0 0 1 0 ;
];
k = 1; % 我们想要找到2个关键节点
% 调用函数并获取结果
S_star = greedy_node(G,k);
disp(S_star); % 显示结果
function s_node=greedy_node(G, k)
%定义一个向量来接收获得关键结点
V_node=[];
%获取图的结点个数
V=size(G,1);
%获取图中每个结点的度
V_d=sum(G,2);
while numel(V_node)<k
%得到不在V_node中的结点索引
V_index=find(~ismember(1:V,V_node))
[~,max_index]=max(V_d(V_index))
i=V_index(max_index);
V_node=[V_node,i];
end
s_node=V_node;
end
结果:
可以看出最终选择的是结点1,但是结点1删除后并不能对整个网络产生影响。
也就是说贪婪算法仅仅选择在当前看来最好的选择,但是从全局看并不一定是最好的选择。