一.k-shell 算法(改错,他发的代码报错)
def kshell(graph):
importance_dict = {}
ks = 1
while graph.nodes():
temp = []
node_degrees_dict = {}
for i in graph.degree():
node_degrees_dict[i[0]]=i[1]
kks = min(node_degrees_dict.values())
while True:
for k, v in node_degrees_dict.items():
if v == kks:
temp.append(k)
graph.remove_node(k)
node_degrees_dict = {}
for i in graph.degree():
node_degrees_dict[i[0]]=i[1]
if kks not in node_degrees_dict.values():
break
importance_dict[ks] = temp
ks += 1
return importance_dict
k-shell原文:复杂网络K-Shell算法及其Python实现_梦家の博客-CSDN博客_k-shell算法
=========================================
上边这个算法不对,结果是错的
==============================================================
二.自己实现的k-shell改进算法(IKS):
由于k-shell算法每一层壳下有很多节点,重要性无法区分。所以引入熵对同层节点排序。
(python)改进的k-shell算法 The improved k-shell algorithm(IKS)_蓝砂石的博客-CSDN博客
====================
三. 更新2021.12.16 上边的kshell好像是错的,建议用下边的
def kshell(G):
"""
kshell(G)计算k-shell值
"""
graph = G.copy()
importance_dict = {}
ks = 1
while graph.nodes():
temp = []
node_degrees_dict = gDegree(graph)
kks = min(node_degrees_dict.values())
while True:
for k, v in node_degrees_dict.items():
if v == kks:
temp.append(k)
graph.remove_node(k)
node_degrees_dict = gDegree(graph)
if kks not in node_degrees_dict.values():
break
importance_dict[ks] = temp
ks += 1
return importance_dict
def gDegree(G):
"""
将G.degree()的返回值变为字典
"""
node_degrees_dict = {}
for i in G.degree():
node_degrees_dict[i[0]]=i[1]
return node_degrees_dict.copy()