一、最小生成树的形成
1、假定有一个连通无向图G=(V,E),和权重函数w:E->R,我们希望找到图G的一棵最小生成树。
2、管理一个边集合A:在每遍循环之前,A是某棵最小生成树的一个子集。在每一步,我们要做的事情是选择一条边(u, v), 将其加入到集合A中,使得A不违反循环不变式,即A∪{(u, v)}也是某棵最小生成树的子集。由于我们可以安全地将这种边加入到集合A而不会破坏A的循环不变式,因此称这样的边为集合A的安全边。
GENERIC-MST(G,w)
A=∅
while A does not form a spanning tree //当A不构成生成树的时候
find an edge (u,v) that is safe for A //找到一条安全边
A = A∪{(u,v)} //A更新
return A
3、一些定义:
无向图G=(V, E)的一个切割(S,V-S)是集合V的一个划分,如图23-2所示。如果一条边(u, v)∈E的一个端点位于集合S,另一个端点位于集合V-S,则称该条边横跨切割(S,V-S)。如果集合A中不存在横跨该切割的边,则称该切割尊重集合A。在横跨一个切割的所有边中,权重最小的边称为轻量级边。注意,轻量级边可能不是唯一的。一般,如果一条边是满足某个性质的所有边中权重最小的,则称该条边是满足给定性质的一条轻量级边。
4、辨认安全边的规则:
5、GENERIC-MST算法的第2~4行的while循环执行的总次数为|V|-1次,因为该循环的每遍循环都找出最小生成树所需|V|-1条边中的一条。在初始时,当A=x时,GA中有|Vl棵树,每遍循环将树的数量减少1棵。当整个森林仅包含一棵树时,该算法就终止。
6、
可以参考上面的图片理解。