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