繁体   English   中英

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

[英]Which is the best (in time complexity) algorithm for finding a cycle in directed graph?

也有任何随机算法。 我需要尽快找到一个周期,而不是所有周期。

最快的只是深度优先的图形遍历。 这是因为您未指定任何特定的拓扑,因此任何其他方法都可能会遇到最坏的情况。 渐近O(| E |)。 您要做的是,在进一步递归时,通过输入节点的唯一时间来标记每个节点,并且一旦找到已经具有时间标签的节点,就会出现周期并暂停。

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

Tarjan的强连接组件算法 如果O(| V | + | E |),则时间复杂度。

我不知道在一般情况下是可以做到的,但是如果您知道图形的某些属性(例如,如下文所述,其“与无循环性的距离”),则可以使用随机算法高概率会很快找到一个周期。 具体来说,请参见链接论文第3节中的第一种算法,并进行相应的分析以解释如何提取循环。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM