(python编程)k-shell的实现

一.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()

该算法引用自:7:45am的博客_CSDN博客-影响力最大化算法研究领域博主https://blog.csdn.net/qq_37730871

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值