Kosaraju的算法陈述如下:
#Input is graph G
1-define G_rev (links in reversed order)
2-Find the finishing times for G_rev using DFS
3-Run DFS for G in sequence based on finishing time
运行时间为O(n + m),其中n是顶点数,m是边数。 如果我有一个完整的图G(所有节点都连接到所有节点),边数是m = n * n。 这个完整的图G中的运行时间是多少?当我查看(1)中的DFS代码时,我将从节点1(外部循环)开始,我将访问并完成所有其他节点。外部循环将遍历所有其他节点,并发现它们已完成并跳过它们。 同样适用于(2)。似乎我不会在n * n边缘上游玩。 如果G完成,则只有一个SCC(整个图形),并且运行时间是O(n + m)并且m <1。 n * n。这是对的吗?
答案 0 :(得分:2)
这是对的。您的运行时间是O(n + m)= O(n²)。
请注意,如果您事先知道图表已经完成,那么运行SCC并没有多大意义。