2016-02-10 47 views
0

我需要實現一個算法找到here(第5頁)使用來自here(挑選Facebook數據,只有KB大小,如果你想深入挖掘)的數據。算法是:分析和理解這個算法

1: Ti ← 0 //Ti is pi’s count of triangles 
2: for v ∈ Vi do 
3: for u ∈ Nv do 
4:  if u ∈ Vi then 
5:  S ← Nv ∩ Nu 
6:  Ti ← Ti + |S| 
7:  else if u ∈ Vj then 
8:  Send <data,Nv> to pj if not sent already 
9: 
10: Check for incoming messages <t,X>: 
11: if t = data then 
12: Ti ← Ti+ SURROGATECOUNT(X, i) 
13: else 
14: Increment completion counter 
15: 
16: Broadcast <notifier,X> 
17: while completion counter < P-1 do 
18: Check for incoming messages <t,X>: 
19: if t = data then 
20:  Ti ← Ti+ SURROGATECOUNT(X, i) 
21: else 
22:  Increment completion counter 
23: 
24: MPIBARRIER 
25: Find Sum T ← Pi Ti using MPIREDUCE 
26: return T 

據我瞭解,我需要一個二維數組。我需要查詢if語句中的每個元素,並在Ti變量處執行+1。

第一個問題,S ← Nv ∩ Nu我該怎麼分配這個變量S
維基百科上說:A ∩ B means the set that contains all those elements that A and B have in common.

第二個問題,如果你看看數據,我需要所有的數據嗎?我想我只需要.edges文件。

+0

n看字符是交集,大多數編程語言有一個Set類/對象,提供該操作 –

+0

@ cricket_007我不熟悉那個類,你可以提供和示例? – Ctrlfreak

+0

['java.util.Set'](http://docs.oracle.com/javase/7/docs/api/java/util/Set.html)和python ['set()'](https:/ /docs.python.org/2/tutorial/datastructures.html#sets) –

回答

1
S ← Nv ∩ Nu 
Ti ← Ti + |S| 

看起來像你只需要的是在兩種NvNu元素的數量。所以只要算上這個數字就可以增加Ti。該算法似乎不使用S設置任何其他。

它看起來並不像你需要很多關於連接的信息,所以just.edges就足夠了。

+0

所以,如果'Vi'是第一個列,而'Nv'是數組中的第二列,我需要檢查是否有一些'Nv'也可以在'Vi'裏面找到我做什麼,例如:http://imgur.com/qj2SDWH突出顯示的數字3998在兩邊。我在'Ti'上加了1嗎? – Ctrlfreak

+0

我不確定你在這裏帶上'Vi'。你需要'Nv'和'Nu'。但是,如果那些是列,那麼是的,你需要爲3998添加一個,如果還有其他數字顯示在兩側,可能會更多。 – Sorin

+0

謝謝我將開始編碼並返回更多問題! :d – Ctrlfreak