最小生成树及算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A. Kruskal算法(或避圈法)
步骤如下: (1) 选择边e1,使得w(e1)尽可能小; (2) 若已选定边e1, e2 ,..., ei ,则从E \ {e1, e2 ,..., ei } 中选取ei 1 ,使得: i) G[{e1, e2 ,..., ei 1}] 为无圈图, ii) w(ei 1 ) 是满足i)的尽可能小的权, (3) 当第(2)步不能继续执行时,则停止.
( K3 ) 3。 则:
② G-e: 从G中去掉边e后所得的图。
③收缩运算:e uv 是图G 的边(不是环),在 G 中删去边 e,再 在 G e 中重合 e 的两个端点 u , v 为一个新的顶点 w(u , v)。而 G e 中一切与 v 和 u 关联的边都改成与这个新的顶点相关联。这样所得 到的图称为 G 收缩边 e ,记为 G e 。 例:
v1 e5 v5 e6 e4 e1 v2
e
e2 v3 e3
v1 e5 v5
e1 e6 e4
v2
e2 v3 e3
v1 e5 v5 e6
e1
e2 v3
v4
v4
e4
w(v4 , v2 ) e3
G
Ge
Ge
2、求 (G ) 的递推公式 定理 设 G是无环图,e是图的一条边,则
(G ) (G e ) (G e )
Kruskal算法: 设G是有n个结点,m条边(m≥n-1) 的连通图. S=Φ i=0 j=1
将所有边按照权升序排序: e1, e2, e3,… ,em S=S∪{ai} j=j+1 ai=ej i=i+1 N |S|=n-1 Y 输出S N 取ej使得 S∪{ ej}有回路? Y j=j+1 停
⑵⑶: 已知G无圈,且e=n-1.(推出G是连通的) 假设G不是连通的,设有k个连通分支, G1,G2,..., Gk,(k≥2) 因为它的每个连通分支都是连通无圈的,所以都 是树,设Gi有结点数ni,边数ei, 所以边数 ei =ni-1。 而 n= n1+n2+n3+…+nk e= e1+e2+e3+…+ek=(n1 -1)+(n2 -1)+(n3 -1)+…+(nk -1) =(n1+n2+n3+…+nk)-k=n-k 但已知 e=n-1 , 所以 k=1. 因此,G是连通图.
3.3 生成树
定义 若T是包含图G的全部顶点的子图,它又是树, 则称T是G的生成树. 图G中不在生成树的边叫做弦. 图G=(V,E)有生成树的充要条件是图G是连通的. 找生成树的方法:避圈法和破圈法.
3.4 赋权图的最小生成树
一棵生成树中的所有边的权之和称为该生成树 的权. 具有最小权的生成树,称为最小生成树. 最小生成树很有实际应用价值. 例如 顶点是城市,边的权表示两个城市间的距离 从一个城市出发走遍各个城市,如何选择最优的旅 行路线. 城市间的通信网络问题,如何布线,使得总的线路 长度最短. 求最小生成树一般有两种方法: Kruskal算法(或避圈法)和破圈法.
0 7 4 2 8 7 0 2 3 1 2 0 1 5 2 3 1 0 3 6 5 3 0 4 3 7 4 6 5 0 6 2 4 0 4 8 1 2 7 4 0
注:1. 为了简洁,我们在求解过程中仍然用图本身 来表示该图的生成树个数。 2. 由于一个图的环不包含在任何生成树中,在计 算的过程中,如果出现环,可以不予考虑。
证明:用 T 1表示图G 的生成树全体 用 T 2 表示图G中不含边 e 的生成树全体 e 用 T 表示图G中含边 e 的生成树全体 则易验证
⑷⑸:已知T无圈,且加一条边得到仅有的一圈. (推出G是连通的,且删去一条边后G就不连通了) 假设G不连通,则存在两个结点vi与vj之间无路, 在 G中加上边(vi,vj)不会产生回路, 与已知矛盾. 故G连 通. 因G连通无回路, 故删去任何一条边后,G就不连 通了.
⑸⑹:已知G是连通的,且删去一条边后G就不连通了. (推出每对结点之间有且仅有一条路) 由G是连通图,则任何两个结点间都有一条路. 如果有 两个结点间有多于一条的路, 那么G必有回路, 则删去 回路中的一条边后,G仍然是连通的. 与已知矛盾. ⑹⑴:已知G每对结点间有且仅有一条路(推出G连 通无回路)因为G 每对结点之间有一条路,所以G是连 通的.若G有回路,则回路上任何两个结点间有两条路, 与已知矛盾.
证明:⑴⑵ 当 n=2时, e=1, 显然 e=n-1. 假设n=k-1时命题成立,当n=k时,因G无圈、连 通,则至少有一条边(u,v),deg(u)=1,删去u,得到 连通无圈的图G1, G1的边数e1,结点数n1满足: e1=n1-1= k-2 将u,边(u,v)加到 G1中,得到T,且 e=n-1.
T 2 (G e)
T e (G e)
T (G )
T 1T 2 T e
所以有
(G ) (G e ) (G e )
例
(G )
e
e
e
1 1 2 1 1 2 3 11
性质 任何一棵树至少有两片树叶。 证明 设树T=(V,E),结点数为v,因T是连通的,因 此,树中每个结点vi,有deg(vi)1,且 deg(vi)=2(v-1)=2v-2. 若T中结点度数都大于2,则 deg(vi) 2v,矛盾。 若T中只有一个结点度数为1,则 deg(vi) 2(v-1)+1=2v-1 矛盾。
3、最小生成树及算法
3.1 树的定义
连通且不含圈的无向图称为树.常用T表示. 树中的边称为树枝. 树中度为1的顶点称为树叶.
v1
v2
v3
v4
v5
分支结点(内结点):度数大于1的结点. 森林:来自百度文库个无向图的每个连通分支都是树.如 下图:
3.2 树的等价定义
设G是具有n个顶点的图,则下述命题等价 1)G是树( G无圈且连通); 2) G无圈,且有n-1条边; 3) G连通,且有n-1条边; 4) G无圈,但添加任一条新边恰好产生一个圈; 5) G连通,且删去一条边就不连通了(即G为最 最小连通图); 6) G中任意两顶点间有唯一一条路.
⑶⑷:已知G是连通的且e=n-1(推出G无圈,且加一新边,得到 仅有一条圈路) 当 n=2时,e=1, 无圈。加一新边,得到仅有一个圈。 设n=k-1时命题成立,当n=k时,因G连通且e=n-1, 对每个结点u,deg(u) 1,若都有deg(u) >1, 则 2e 2n,矛盾。 至少存在u0, deg(u0)=1.删去u0及其关联的边得G1,则G1无圈。 在G1中加 上u0及其关联得G,G无圈。 假设在G中加一条新边(u,v),由于G是连通的,u间v必有一条 路径P,加上新边(u,v)后,与P构成圈, 且此圈必是唯一的.因 为如果圈不唯一, 则删去(u,v)边后,还有圈, 与上面证出的 G无圈矛盾.
|S|=n-1, 说明是树 最后S={a1, a2, a3,… ,an-1}
B. 破圈法
算法2 步骤如下: (1) 从图G中任选一棵树T1. (2) 加上一条弦e1,T1+e1中 生成一个圈. 去掉此圈中最大权边,得到新树T2, 以T2代T1,重复(2)再检查剩余的弦,直到全部弦 检查完毕为止.
例 n个城市,各城市之间的距离如下表(距离为 ∞,表示两个城市之间没有直接到达的线路)。 从一个城市出发走遍各个城市,如何选择最优的 旅行路线.
城市作为顶点,两个城市之间有直达的线路,则连边, 且给边赋权距离,得一个赋权图。 v2 v1 7 2 3 2 v3 5 1
1 8 v8 7 v5 3 v4 4 3 4 6 2 4 v6 6 v7 v2 1 v8 v7
2
v3
1 v4
问题就是求一棵最 v1 小生成树。 2
4 3
v5 3 v6
3.5 生成树的计数
1、一些概念 • • ① 设 G 是一个连通图。 T , T 分别是 G 的两个生成树,如果 E (T ) E (T ) ,则认为 T , T 是 G 的两个不同的生成树。 G 的 不同的生成树个数用 (G) 表示。 如:
v1 v3 v2 v3 v1 v2 v3 v1 v2 v3 v1 v2