图论学习笔记(6)
基本概念
对于一给定连通图G,若其某个生成子图为一棵树,则称该图为图G的生成树。
对于一给定的图G,每条边上标有一正数,称为权重,表示代价,则图G生成树T的代价即为T的所有边上权重之和。
图G所有生成树中代价最小的生成树称为最小生成树。
设集合A为图G的边集的子集,当图H满足:E(H)=A并且V(H) = {v : v与集合A内的边相关联},记作<A>,则称图H为集合A的边导出子图。
基本算法
Kruskal算法:
预备:
设带权重的连通图G,其n个结点已被存储,q条边已计算出,边按照权重从小到大的顺序存放在表L中,若权重相同就按他们的字母表顺序存放。
算法描述:
- S=Φ。
- 在已排好序的表L中的下一条边e,若e不属于S且边导出子图<S∪{e}>是无圈图,则令S = S∪{e}。
- 若|S| = n - 1,算法停止,输出集合S。否则,转第2步,继续编历表L。
Prim算法:
算法描述:
- 选出结点v,令V(T) = {v},E(T) = Φ。
- 在所有u不属于V(T)的结点中,若连接结点u和w的边e = uw是最小权重边,其中w∈V(T)。则令V(T) = V(T)∪{u},E(T)∪{uw}。
- 若|E(T)| = n - 1,算法停止,输出E(T)。否则,转步骤2,像树中增加新结点。