在循环中应用 Kruskal 算法的最坏情况时间复杂度是多少?
What is the worst case time complexity of applying Kruskal algorithm in a loop?
这是我的一段伪代码,用于在给定图形 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(V1, E1) + f(V2,
E2) ≤ f(V1 + V2, E1 +
E2),这意味着处理多个
单独的组件永远不会超过一起处理它们。的
当然,如您所见,可能只有一个组件,在这种情况下
没有积蓄了。
这是我的一段伪代码,用于在给定图形 G:
的情况下查找每个强连接组件 (SCC) 的 MSTNumber 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(V1, E1) + f(V2, E2) ≤ f(V1 + V2, E1 + E2),这意味着处理多个 单独的组件永远不会超过一起处理它们。的 当然,如您所见,可能只有一个组件,在这种情况下 没有积蓄了。