哪个是在有向图中找到循环的最佳(时间复杂度)算法?

时间:2010-11-14 15:20:22

标签: algorithm graph cycle

还有任何随机算法。我需要尽可能快地找到一个循环,而不是所有循环。

3 个答案:

答案 0 :(得分:3)

最快的一个就是深度优先的图遍历。 这是因为您没有指定任何特定拓扑,因此任何其他方法都可能面临最糟糕的情况。渐近O(| E |)。 你做的是你在进一步递归的时候用你输入它的唯一时间标记每个节点,一旦你找到一个已经有时间标签的节点,你的周期就停止了。

答案 1 :(得分:2)

  

在有向图中找到循环的最佳(时间复杂度)算法是什么?

Tarjan's strongly connected components algorithm。时间复杂度如果为O(| V | + | E |)。

答案 2 :(得分:2)

我不知道在一般情况下这是可行的,但是如果你知道图的某些属性(例如它的“与自由度之间的距离”,如下文所述),则存在随机化具有高概率的算法将很快找到一个循环。具体来说,请参阅链接论文第3部分中的第一个算法,并通过相应的分析解释如何提取循环。

至于确定性算法,Saurav先生的答案是正确的。在最坏的情况下,您至少必须扫描整个输入才能正确判断是否存在循环,这已经需要O(| V | + | E |)时间。

[1] http://arxiv.org/abs/1007.4230