2017-03-26 53 views
0

是否存在一個連續算法計算全部 k-cliques在無向圖中?依次計算圖中k個頂點的所有派系

對於k-cliques,我的意思是:無向圖中所有由邊連接的頂點集的數目。

下面是在哪裏可以找到更詳細的描述。 https://en.wikipedia.org/wiki/Clique_(graph_theory)

+1

您是否閱讀過關於算法的[Wikipedia section about algorithms](https://en.wikipedia.org/wiki/Clique_problem#Cliques_of_fixed_size)? –

+0

是的,我一直在尋找一些關於它的僞代碼,因爲我對它很困惑。我只是有一個遞歸算法。 @NicoSchertler – Matt

回答

1

您可以使用Bron–Kerbosch algorithm列出圖中的所有派系。考慮其siplest實現(維基百科僞代碼):

BronKerbosch1(R, P, X): 
    if P and X are both empty: 
     report R as a maximal clique 
    for each vertex v in P: 
     BronKerbosch1(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v)) 
     P := P \ {v} 
     X := X ⋃ {v} 

在每次遞歸調用,設定R包含拉幫結派,同時通過圖中的所有派系迭代。因此,只要其大小爲k,您就可以修改算法以打印該派系並切割遞歸,因爲任何遞歸調用只會產生較大的派系。

BronKerbosch1(R, P, X, k): 
    if |R| = k: 
     report R as a k-clique 
    else 
     for each vertex v in P: 
      BronKerbosch1(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v)) 
      P := P \ {v} 
      X := X ⋃ {v} 

在實現具有旋轉和頂點排序的優化版本時,您可以使用相同的想法。

+0

謝謝我要嘗試這種方法。我很快就會接受這個答案。 – Matt