最小生成树-数学建模

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
● 时间复杂度:O(n2) , n为图的顶点数
1) Kruskal算法和Prim算法都蕴涵了 贪婪法的思想,是贪婪法;
2) 贪婪法的基本思想:把解看成是 由若干个部件构成,每一步求出 解的一个部件(不是从整体或长 远的角度考虑,只是局部或当前 的最好选择)。求出的一个个部 件组合而作为最终的解。
8
1
2
5
7
时间复杂度: O(m)
1
5
6 其中m为图的边数
3
10
4
3
Kruskal 算 法
步骤
1) 选择边e1,使得w(e1)尽可能小;
2) 若已选定边 e1,e2,..e.i,,则从 E\{e1,e2,..ei.}, 中选取 ei 1,使得: i) G [e { 1,e2,.e .i .1} , 为]无圈图,
赵根 赵亮
赵丽
赵虹 赵云 赵霞
赵松 赵梅
形象地表 示家族
树图——直观形象的表示工具
树: 没有圈的连通图 • 树中任意两点间有唯一路径。 • 树的边数恰好为顶点数减1。
引例:计算机网络的 线路设计
城市电信局有许多业务如收费, 营业,112,114等,希望在全市范围 实现计算机联网服务,共享各种资源。 一个主要关心的问题是:用数据通讯 线把一组站点联结起来,而不允许通 讯线在非站点处相交,如何连接可使 通讯线的花费最小?
子树
3号 子树
返回
整理边权矩阵
初始化:j0, T, c0, k0; 对所有顶点i ,t(i)i .
B: 图的边权矩阵; T: 生成树的边集; C: 生成树的权; t: 顶点所属子树的编号
jj+1
t(B(1,j))t(B(2,j)) Y
N
TT(B(1,j),B(2,j)), cc+B(3,j),kk+1,i 0
1) 贪婪法可被用于各种各样问题的 处理。该法只是一种试探法,计 算上简便有效,可提供正确解的 一个近似。但一般情况下,不能 保证输出的解是正确的。其正确 性需要证明,这往往比较困难。
2) 已证明,求最小生成树的Kruskal算 法和Prim算法都是正确的
i i+1
N
k=n-1或j=m
Y
T, c
t(i)=max{t(B(1,j)), t(B(2,j))
Y
N
t(i) min{t(B(1,j)), t( B(2,j)),
终止
Y
i=n
N
Kruskal 算 法
例 : 用 Kruskal 算 法 求 引 例 中 的 加 权
图的最小生成树。
8 1
5
7
1
5
3
10
引例:计算机网络的线路设计
8
1
2
5
7
1
5
6
3
10
4
3
9
最经济的网络不应该有任何封闭的
回路。
引例:计算机网络的线路设计
生成树或支撑树(spanning tree):G的子
图且是树,其顶点集等于G的顶点集;
8 1
5
7
2
1
5
6 如何简便地得到
3
10
左图的生成树?
4
3
它应有几条边?
9
引例:计算机网络的线路设计
2 边权矩阵:
6 b=[1 1 1 2 2 3 3 4; 2 4 5 3 5 4 5 5;
4 9
3
8 1 5 6 7 9 10 3];
b=[1 1 1 2 2 3 3 4;2 4 5 3 5 4 5 5;8 1 5 6 7 9 10 3];
[B,i]=sortrows(b',3);B=B’; m=size(b,2);n=5;
30 个 顶 点 的 完 全 图 就 有 3028 个 生 成 树 , 求 最小生成树时用穷举法是无效的。
返回
最小生成树与算法
定义 设T = (V , E1)是赋权图G = (V , E)的一棵生 成树,称T中全部边上的权数之和为生成树的权,记为
w(T ),即w(T ) = w(e).
eE1
如果生成树T *的权 w(T *)是G 的所有生成树的权中最 小者,则称 T*是G 的最小生成树 ,简称为 最小树 ,即
t=1:n; k=0; T=[ ]; c=0;
for i=1:m
if t(B(1,i))~=t(B(2,i))
k=k+1; T(k,1:2)=B(1:2,i), c=c+B(3,i)
tmin=min(t(B(1,i)),t(B(2,i)));
tmax=max(t(B(1,i)),t(B(2,i)));
w(T*) = min{w(T )},式中取遍G 的所有生成树 T.
T
返回
最小生成树算法及其MATLAB程序实 现
Kruskal算法 算法的MATLAB程序实 现 Prim算法
返回
Βιβλιοθήκη Baidu
Kruskal 算

基本思想:
最初把图的n个顶点看作n个分离的部分树,每个树具有 一个顶点,算法的每一步选择可连接两分离树的边中权最 小的边连接两个部分树,合二为一,部分树逐步减少,直到 只有一个部分树(n-1步之后)便得到最小生成树。
ii) w(ei1) 是满足i)的尽可能小的权,
3) 当第2)步不能继续执行时,则停止.
定理 由Kruskal算法构作的任何生成树
T *=G [e { 1 ,e2,.e . .1 } ,都]是最小生成树.
Kruskal 算 法
给每个子 树一个不 同的编号
1号 子树
8
1
2
5
7
1
5
3
6
10
4
3
9 2号
for j=1:n
if t(j)==tmax if k==n-1
t(j)=tmin;
break ;
end
end
end
end
end
T,c
Kruskal 算 法
程序运行结果:
T=
1
2
7
14
4
5
1
5
6
23
3
2
5
4
3
c=
17
返回
Prim算法
● 基本思想:任选一个顶点v0开始,连接 与v0最近的顶点v1,得子树T1,再连接与T1 最近的顶点v2得子树T2,如此继续下去, 直到所有顶点都用到为止。
确定应在哪些站点之间铺设通讯 线路,是否可看作是在相应的加 权图中构造最小费用的生成树的 问题?
引例:计算机网络的线路设计
最小生成树
最大生成树 1) 一个完全图Kn有多少不同 的生成树? 2) 如何求其最小生成树?
引例:计算机网络的线路设计
10个顶点的完全图,其不同的生成树就有 一亿棵。
一般地,n个顶点的完全图,其不同的生成 树个数为nn-2。
最小生成树算法
参考书: 1.傅鹂 龚劬 刘琼荪 何中市 《数学实验》科学出版社 2.张绍民 李淑华 《数据结构教程C语言版》中国电力出版社
主要内容
一个例子 基本概念与结论 Kruskal算法 Prim算法 最小生成树问题的0-1规划模型
树图——直观形象的表示工具
类似于自 然界中的

赵明 赵雷 赵雨
相关文档
最新文档