这是我的伪代码片段,用于查找给定图G的每个强连接组件(SCC)的MST:
Number of SCC, K <- apply Kosaraju's algorithm on Graph G O(V + E)
Loop through K components:
each K components <- apply Kruskal's algorithm
据我了解,Kruskal算法的运行时间为O(E log V)。
然而,我不确定循环的最坏情况的时间复杂度。我认为最坏的情况会发生在K = 1的时候。因此,大O时间复杂度将简单地等于O(E log V)。
我不知道我的想法是否正确,或者如果他们是正确的,它的理由是什么。
是的,直觉上你节省了比较边的成本具有另一个边的组件。形式上,f(V, E)∑E log V是一个凸功能,所以f (V<子>1子>,E<子>1 ) + f (2 V<子>,2 E<子>子>)≤f (V<子>1子>+ V<子>2子>子>+ 1E2),这意味着处理倍数的成本组件分开只不过是一起处理它们。的当然,正如你所看到的,可能只有一种成分,在这种情况下没有储蓄可存。子>子>