Bron-Kerbosch算法的迭代版本?

时间:2015-02-09 09:22:00

标签: algorithm graph-algorithm pseudocode

Bron–Kerbosch algorithm是一种列出图表所有最大集团的方法。我最近成功地实现了算法,只是为了好玩。缺点是算法是递归的,因此只能在小图上运行,直到堆栈溢出。

应该可以使算法纯粹迭代。考虑维基百科上的基本版本(无枢轴)。算法的迭代版本如何在伪代码中看起来像?在某处有描述吗?

我正在想象一个堆栈数据结构来模拟递归。我还应该有一个循环,我测试P和X的空虚,但我没有看到完整的答案。

1 个答案:

答案 0 :(得分:4)

The recursive version is given in Wikipedia就是这样:

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}

要模拟递归,我们只需要使用堆栈跟踪三个变量:

BronKerbosch(P):
    S := empty stack
    S.push({}, P, {})
    while S is not empty:
        R, P, X := S.pop()
        if P and X are both empty:   
            report R as a maximal clique            
        if P is not empty:
            v := some vertex in P
            S.push(R, P \ {v}, X ⋃ {v})
            S.push(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v))