• CELF算法原理


    影响力传播模型中的独立层叠模型(independent cascading model,IC模型),影响力传播过程中,种子的影响力具备子模性(submodularity),即种子的边际影响力增量会呈现递减趋势,CELF算法(Cost-effective Lazy-forward)利用这个发现改进了Kempe&Kleinberg的原始的Greedy算法,使得算法的速度大幅提升。下面说说具体是怎么回事。

    原始的Greedy算法:

    input:图G={V,E},种子集合Seeds=空集,种子数量K

    output:种子集合Seeds={K个影响力最大的种子}

    step 1:在Seeds为空的条件下,一次算出G中每个节点V的边际影响力Δinfs【节点n的Δinfs=(n加入当前种子集Seeds后形成的新种子集Seeds的影响力)-(当前Seeds的影响力)】,并把各个节点按照Δinfs降序排列。

    step 2:把Δinfs最大的节点加入Seeds。例如下图中A的边际影响力最大,于是Seeds={A}.

    step 3:在新种子集Seeds条件下,重新计算各个节点的边际影响力Δinfs,把Δinfs最大的加入种子集。

    step 4:重复step 3,直至种子集的节点个数达到K,输出Seeds,退出。

    而CELF算法:根据IC模型条件下,节点的Δinfs符合子模性,于是在A加入Seeds后,在下一轮计算各个节点的边际影响力Δinfs时,如果计算出B的Δinfs大于或等于上一轮中比它小且最接近它的那个节点(这里是C)在上一轮中的Δinfs,那么这一轮就可以直接把B加入到Seeds当中,而不用计算后面C,D,E...等节点的Δinfs了,因为他们在这一轮的Δinfs必定比上一轮自己的Δinfs小,所以B就是这一轮最大的,所以选B没错,因此节省了很多计算步骤。

    具体到下图中,如果Δb>=8,那么B就是Δinfs最大的节点,B可直接加入Seeds,不用再计算Δc,Δd,Δe等等,因为依据子模性(即边际递减规律),种子集Seeds加入了A之后,Δc必定小于等于8,Δd必定小于等于7,Δe必定小于等于5。这就是CELF算法能节省时间提高速度的原因。

    那,如果这一轮B的Δinfs没有大于或者等于8呢?就逐个算出每个节点的Δinfs,排序再挑最大的,放进Seeds,然后重复上述过程。

  • 相关阅读:
    用msi安装MySQL时MySQL Server组件不能安装,或安装失败
    在Django中连接MySQL数据库(Python3)
    2,简单的Python爬虫
    把自己的电脑做成服务器,并搭建自己的网站
    任务计划程序(让计算机自动执行程序)
    1,Python爬虫环境的安装
    response和request的区别以及常见问题解决
    Microsoft Visual Studio 2010 Service Pack 1 更新 (KB3002340)
    设置radiobutton 都不选中
    QQ邮件发送问题
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/6548760.html
Copyright © 2020-2023  润新知