首先,我是一個Java初學者,所以我不確定這是否可能!基本上,我有一個關係數據的巨大(3 +百萬)數據源(即A是B + C + D的朋友,B是D + G + Z的朋友(但不是A - 即非互補)等等),我想找到這個(不一定是連接的)有向圖中的每個週期。在一個巨大的稀疏矩陣中尋找所有的週期
我發現線程Finding all cycles in graph,它指出我是唐納德約翰遜的(基本)週期尋找算法,它至少表面上看起來像它會做我以後(我要去嘗試當我週二回到工作崗位時 - 認爲在此期間提問並不會造成什麼負面影響!)。
我不得不通過Java實現約翰遜的算法的代碼快速掃描(在該線程),它看起來像關係的矩陣是第一步,所以我想我的問題是:
一) Java能夠處理3百萬* 3百萬個矩陣嗎? (正在計劃用二進制稀疏矩陣表示A-friends-with-B)
b)我是否需要找到每個連接的子圖作爲我的第一個問題,或者循環查找算法是否會處理不相交的數據?
c)這實際上是一個合適的解決方案嗎?我對「初級」循環的理解是,在下面的圖表中,不是選擇A-B-C-D-E-F,而是選擇A-B-F,B-C-D等,但這不是任務完成的世界末日。
E
/\
D---F
/\/\
C---B---A
d)如果有必要,我可以通過關係執行相互關係簡化問題 - 即A-朋友-與-B < ==> B-朋友-與-A,如果真的有需要,我可以或許減少數據量,但實際上總是在1mil左右。
z)這是P還是NP任務?我咬得比我咀嚼的還多嗎?
謝謝大家,任何幫助表示讚賞! Andy
如果你想找到_every_ cycle,那肯定不是P,因爲對於一個完整的圖,你有更多的n!週期。另一方面,如果你只是想計算週期(不輸出它們),那麼它就是P(因此NP - P也是NP的一個子集)。 – 2010-05-30 11:09:19
那麼你是否想要找到子集中每個人都與該子集中其他人共享朋友的每個頂點子集?因爲這個問題被稱爲最大集團:http://en.wikipedia.org/wiki/Maximal_clique#Definitions – 2010-05-30 11:14:17
@Tomer:你確定,計算無向圖中基本圓的問題在P? – jpalecek 2010-05-30 11:31:38