如何计算kurskal算法的时间复杂度,该算法可以是O(E log E)= O(E log V)。

时间:2014-04-14 10:09:29

标签: algorithm sorting time-complexity

请告诉我如何计算Kruskal定理的时间复杂度的程序? 我知道Kruskal算法的算法,但不知道伪代码和时间复杂度的计算...... Kruskal算法的复杂性是O(E log E)= O(E log V)(维基百科)。但我不知道如何计算......

2 个答案:

答案 0 :(得分:2)

Kruskal的算法基于森林的联合查找,直到它们形成单个树。在每个步骤中,您使用单个边连接两棵树。
伪代码(来自wikipedia):

tree = {}
for each v:
   make-set(v)
for each edge (u,v) ordered by w(u,v):
   if find(u) != find(v):
        tree.add((u,v))
        union(u,v)
return tree

算法的瓶颈是根据重量对边缘进行分类。排序最多只需O(nlogn),我们正在对大小E进行排序,总计O(ElogE)=O(Elog(V^2))=O(2ElogV)=O(ElogV)

答案 1 :(得分:0)

Kruskal算法步骤: -

1. Sort the edges by weight
2. Select from lowest to highest
3. Connect edge if they don't form the loop.
4. Repeat 2,3 until n-1 edges are connected.

时间复杂度: -

1. Sorting takes O(Elog(E))
2,3 : O(E) using efficient union-find .

总体而言: - O(Elog(E))

图表中的

: -

E = O(V^2)
logE = O(2*logV)
hence O(ElogE) = O(ElogV)