用于 SCC 最坏情况分析的 Tarjan 算法

Posted

技术标签:

【中文标题】用于 SCC 最坏情况分析的 Tarjan 算法【英文标题】:Tarjan Algorithm for SCC worst case analysis 【发布时间】:2015-06-09 05:59:28 【问题描述】:

我正在阅读 Donal B .Johnson 的论文,以查找有向图中的所有基本电路,http://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF

在这篇论文中,他提到 Tarjan 算法的最坏情况是 O(V*E (c+1)) 虽然其他地方都显示为 O(V+E),但 Johnson 论文已经举了几个例子来证明这一点,就像论文上的图 1 和图 2。

图 2 的例子非常相似,在 O(k) 时间内找到第一个周期 1...k 之后,现在根据我的理解,所有其他顶点将简单地返回,因为它们的索引已经定义并且应该需要另一个k 个顶点的 k 时间,所以总结起来应该是 2k 次而不是 k**2 ,我在这里遗漏了一些要点吗?

请举个例子,谢谢

【问题讨论】:

【参考方案1】:

“Tarjan 算法”在这种情况下不是强连通分量的算法。这是他枚举基本电路的算法。但是,在the original paper 中,这种方法被认为具有严格的最坏情况 O((V + E) * (C + 1)) 时间。有趣的是,Tarjan 用来证明这个界限的论点(找到两个电路之间的 O(V + E) 时间)在 Johnson 的论文中突然改变了(找到两个电路之间的 O(V * E) 时间)。我对这两种算法都不熟悉,所以我不能说哪个是正确的。快速搜索似乎认为 Johnson 的算法渐近更快(尽管两种方法都声称相同的时间复杂度),但我在任何地方都找不到反驳 Tarjan 论文中时间复杂度的来源。

【讨论】:

SIAM 论文介绍确实说 Tarjan Algorithm for Elementary Circuit 确实需要 O(e.v(c+1)) epubs.siam.org/doi/abs/10.1137/0202017【参考方案2】:

对于任何寻找更快方法的人:有人将 Tarjan 与 Johnson 和另一种方法进行了对比,发现了另一种声称更快但至少更灵活的方法: link to writeup 和link to paper(称为“在具有自弧和多弧的图中枚举电路和循环。”,K.A. Hawick 和 H.A. James)

所有方法都需要使用相同的语言进行适当的基准测试才能获得可靠的结果。

【讨论】:

以上是关于用于 SCC 最坏情况分析的 Tarjan 算法的主要内容,如果未能解决你的问题,请参考以下文章

Tarjan算法 有向图SCC

[Luogu 2341] HAOI2006 受欢迎的牛

c_cpp Tarjan SCC(导演)

受欢迎的牛 tarjan求scc模板

tarjan scc

图之强连通强连通图强连通分量 Tarjan算法