最小生成树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在左图中 {e1,e2,...,e8}权值
最小的边有e1,e5, 任取一条e1,
在 {e2,e3,...,e8} 中选取权值 最小的边 e5, {e2,e3,e4,e6,e7,e8} 中权值最小边有 e3,e7,:从中选 任取一条边 e3; {e2,e4,e6,e7,e8} 中选取在中选取e7, 在{e2,e4, e6,e8}中选取 e4,e8 . 但e4与 e8都
5
4
若这样的边的另一端均已有标号,就退到标号为
i-1的r点,以r代v,重复ii),直到全部点得到标号为止.
b)广探法 例用广探法求出下图10的一棵生成树
步骤如下:
i) 在点集V中任取一点u, 给u以标号0.
ii) 令所有标号i的点集为
图10
Vi,检查[Vi,V\Vi]中的边端点
0 1
1 2
是否均已标号. 对所有未标
源自文库
a) 深探法 例用深探法求出下图10的一棵生成树
步骤如下: i) 在点集V中任取一点u,
给u以标号0.
ii) 若某点v已得标号,检 查一端点为v的各边,另一
端是否均已标号.
图10
1 8
2 7
若有边vw之w未标号,则给 0
10 11
3
w以标号i+1,记下边vw.令
9 13 12 6
w代v,重复ii).
中选取ei1 ,使得: i) G[{e1,e2,...,ei1}] 为无圈图, ii) w(ei1)是满足i)的尽可能小的权,
3) 当第2)步不能继续执行时,则停止.
定理 由Kruskal算法构作的任何生成树 T * G[{e1,e2,...,e 1}] 都是最小树.
例: 用Kruskal算法求下图的最小树.
会与已选边构成圈,故停止.
【Kruskal算法的MATLAB实现】
function [T c]=krusf(d,flag) if nargin==1
定义 连通且不含圈的无向图称为树.常用T表示. 树中的边称为树枝. 树中度为1的顶点称为树叶. 孤立顶点称为平凡树.
v3
v1
v4
v2
v5
平凡树
(2)找图中生成树的方法 可分为两种:避圈法和破圈法 A 避圈法 : 深探法和广探法 B 破圈法
A 避圈法
定理3的充分性的证明提供了一种构造图的生 成树的方法.
取一圈{v1e1v2e3v3e2v1}, 去掉e3; 取一圈{v1e1v2e4v4e5v3e2v1},去掉 e4 ; 取一圈{v1e1v2e6v5e8v3e2v1},去掉 e8 ; 取一圈{v1e1v2e6v5e7v4e5v3e2v1}去掉e6; 得到另一颗生成树.
不难发现,图 的生成树不是 唯一的 .
w(T *) min{w(T )},式中取遍G 的所有生成树T .
T
介绍最小树的两种算法: Kruskal算法和Prim破圈法.
A Kruskal算法(或避圈法)
步骤如下: 1) 选择边e1,使得w(e1)尽可能小; 2) 若已选定边 e1,e2,...,ei ,则从 E \ {e1,e2,...,ei}
顶点割集:设V1是V中任一非空子集,若图G连 通而图G[V-V1]不连通,则称V1是G的顶点割集。 最小顶点割集中顶点的个数叫做图G的连通度。 边割集:设S是V中任一非空子集,记S2=V-S, 在图G中连接S与S2之间的边集,记作[S,S2], 称为G的一个边割集。
三.最小生成树及其算法
(1) 树的定义与树的特征
3) 最小生成树与算法
定义 设T (V , E1) 是赋权图G (V , E)的一棵生 成树,称T 中全部边上的权数之和为生成树的权,记为
w(T ),即w(T ) w(e).
eE1
如果生成树T *的权w(T *)是G的所有生成树的权中最 小者,则称T *是G 的最小生成树,简称为最小树,即
一、树及其性质
• 树:
图论中把不包含圈的连通图称为树,记为T;不 包含圈的图称为无权圈图;图G的连通无圈子图称 为G的树;包含图G的所有顶点的G的树为图G的一棵 生成树或支撑树。
定理1:树T的任意两个顶点之间存在唯一的路。 定理2:若G是树,则:边数=顶点个数-1
二、割点、割边、割集
割点:设简单图G=(V,E),满足w(G-u)>w(G)的顶 点u称为割点。 割边:在简单图G=(V,E)中,满足w(G-e)>w(G)的 边e称为割边。
例 用破圈法求出
取一圈{v1e1v2e3v3e2v1},去掉e3; 取一圈{v1e1v2e4v4e5v3e2v1},去掉 e5 ;
下图的一棵生成树. 取一圈{v2e4v4e7v5e6v2},去掉e7;
取一圈{v1e1v2e6v5e8v3e2v1},去掉e6.
B 破圈法
例 用破圈法求出下图的另一棵生成树.
号之点均标以i+1,记下这些 边.
iii) 对标号i+1的点重复步
1
23
23 4
3
1
图10
2 2
步骤ii),直到全部点得到 标号为止.
b)广探法 例用广探法求出下图10的一棵生成树
步骤如下:
i) 在点集V中任取一点u, 给u以标号0.
ii) 令所有标号i的点集为 Vi,检查[Vi,V\Vi]中的边端点 是否均已标号. 对所有未标 号之点均标以i+1,记下这些 边.
这种方法就是在已给的图G中,每步选出一 条边使它与已选边不构成圈,直到选够n-1条边为 止. 这种方法可称为“避圈法”或“加边法”
在避圈法中,按照边的选法不同,找图中生 成树的方法可分为两种:深探法和广探法.
a) 深探法 例用深探法求出下图10的一棵生成树 步骤如下:
i) 在点集V中任取一点u, 给以标号0.
iii) 对标号i+1的点重复步 步骤ii),直到全部点得到 标号为止.
图10
0 1
1 2
1
23
2
23 4
3
1
2
显然图10的生成树
不唯一.
B 破圈法
相对于避圈法,还有一种求生成树的方法叫做
“破圈法”. 这种方法就是在图G中任取一个圈,
任意舍弃一条边,将这个圈破掉,重复这个步骤
直到图G中没有圈为止.
ii) 若某点v已得标号,检
图10
查一端点为v的各边,另一
1
2
端是否均已标号.
8
7
若有边vw之w未标号,则给
w以标号i+1,记下边vw.令 w代v,重复ii).
0
10 9 13 5
11
12 6
3 4
若这样的边的另一端均已有标号,就退到标号为
i-1的r点,以r代v,重复ii),直到全部点得到标号为止.
相关文档
最新文档