Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Bron&x2013的迭代版本;Kerbosch算法?_Algorithm_Graph Algorithm_Pseudocode - Fatal编程技术网

Algorithm Bron&x2013的迭代版本;Kerbosch算法?

Algorithm Bron&x2013的迭代版本;Kerbosch算法?,algorithm,graph-algorithm,pseudocode,Algorithm,Graph Algorithm,Pseudocode,是一种列出图的所有最大团的方法。我最近成功地实现了这个算法只是为了好玩。缺点是算法是递归的,因此只能在极小的图上运行,直到堆栈溢出 应该可以使算法完全迭代。考虑维基百科上的基本版本(无枢转)。该算法的迭代版本在伪代码中是什么样子的?有什么描述吗 我想象一个堆栈数据结构来模拟递归。我还应该有一个循环来测试P和X的空性,但我没有看到完整的答案。如下所示: BronKerbosch1(R, P, X): if P and X are both empty: report R as

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

应该可以使算法完全迭代。考虑维基百科上的基本版本(无枢转)。该算法的迭代版本在伪代码中是什么样子的?有什么描述吗

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

如下所示:

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))
因此:

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))

这是一个有效的问题,但是IIRC B--K在堆栈的最大深度上取时间指数。所以这是一个有效的问题,但是IIRC B--K在堆栈的最大深度上取时间指数。