按顺序计算图中k个顶点的所有派系

时间:2017-03-26 18:54:24

标签: algorithm recursion graph social-networking clique

是否存在用于在无向图中计算所有 k-cliques的顺序算法?

对于k-cliques我的意思是:在无向图中边缘相互连接的顶点集的数量。

在这里可以找到更详细的集团描述。 https://en.wikipedia.org/wiki/Clique_(graph_theory)

1 个答案:

答案 0 :(得分:1)

您可以使用Bron–Kerbosch algorithm列出图表中的所有派系。考虑其最简单的实现(来自维基百科的伪代码):

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时打印clique并切断递归,因为任何递归调用只会产生更大的派系。

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}

在实现具有旋转和顶点排序的优化版本时,您可以使用相同的想法。