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,然后重復上述過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM