【发布时间】:2013-12-24 07:54:53
【问题描述】:
我正在计算这样的 kruskal 算法的时间复杂度(请参阅附件中的算法)
T(n) = O(1) + O(V) + O(E log E) + O(V log V)
= O(E log E) + O(V log V)
as |E| >= |V| - 1
T(n) = E log E + E log E
= E log E
CLRS 算法:
是正确的还是我做错了什么请告诉。
【问题讨论】:
-
请告诉我第4行和第5-9行的复杂性
-
第 5-9 行将不是 VlogV;循环针对每条边运行,因此它将是 E*(something)。 findset 和 union 需要 logV 时间,总体 5-9 应该需要 E.logV 时间。所以整体复杂度来了:O(ElogE + ElogV)。因为 E 可以至少为 O(V) 并且最多为 O(V^2);术语 ElogE 总是大于或等于 ElogV;因此总体上它的 O(ElogE)。
-
@SpawN 对不起,我没有得到这部分:“因为 E 至少可以是 O(V) 和最多 O(V^2)” 我可以理解 E 可以至少是 V - 1次为什么最多 V^2 ?以及为什么我们要考虑这个“ElogE 总是大于或等于 ElogV?”
-
@MrA 对于 v 个顶点,最大边可以是 v*(v-1)/2,即 O(V^2)。 v 个顶点至少需要 (v-1) 条边(连通图),因此需要 O(V)。
标签: algorithm time-complexity graph-algorithm asymptotic-complexity kruskals-algorithm