一,Kruskal算法的思想
Kruskal算法对最小生成树安全边的通用确定规则进行了细化,在该算法中,集合A是一个森林,其结点就是给定图的结点,每次加入到集合A中的安全边永远是权重最小的连接两个不同分量的边。
二,Kruskal算法介绍
准备阶段:一个赋值无向连通图G=(V,E),我们需要一个集合A用于存放加入的安全边,最后A中的边形成最小生成树
算法过程:在所有连接森林中两棵不同树的边中,找到权重最小的边(u,v),由于这条边连接了两棵树,因此他一定横跨某个切割,再加上是权重最小的边,所以满足安全边的辨别定理。
三,Kruskal算法伪代码
MST_KRUSKAL(G,w)
1. A=∅
2. for each vertex v∈G.V
3. MAKE_SET(v)
4. sort the edges of G.E into nondecreasing order by weight w
5. for each edge(u,v)∈G.E,taken in nondecreasing order by weight
6. if FIND_SET(u)≠FIND_SET(v)
7. A=A∪{(u,v)}
8. UNION(u,v)
9. return A
第1行中,引入集合A并设为空集;第2.3行中,MAKE_SET方法让每个结点都成为一个集合(树),每个集合都只先有一个结点;第4行中,由于我们每次要找权重最小的边,所以我们把所有边按权重升序排列;第5-8行,按