- 1、本文档共43页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图论-数学建模课件.ppt
A 避圈法 这种方法就是在已给的图G中,每步选出一条边使它与已选边不构成圈,直到选够n-1条边为止. 这种方法可称为“避圈法”或“加边法” 在避圈法中,按照边的选法不同,找图中生成树的方法可分为两种:深探法和广探法. a) 深探法 若这样的边的另一端均已有标号,就退到标号为 步骤如下: i) 在点集V中任取一点u, ii) 若某点v已得标号,检 端是否均已标号. 若有边vw之w未标号,则给 w代v,重复ii). i-1的r点,以r代v,重复ii),直到全部点得到标号为止. 给以标号0. 查一端点为v的各边,另一 w以标号i+1,记下边vw.令 0 1 2 3 4 5 6 7 8 9 10 11 12 13 例用深探法求出下图10的一棵生成树 b)广探法 步骤如下: i) 在点集V中任取一点u, ii) 令所有标号i的点集为 是否均已标号. 对所有未标 号之点均标以i+1,记下这些 iii) 对标号i+1的点重复步 步骤ii),直到全部点得到 给u以标号0. Vi,检查[Vi,V\Vi]中的边端点 边. 例用广探法求出下图10的一棵生成树 标号为止. 图10 3 1 0 1 2 2 1 3 2 1 2 2 3 4 B 破圈法 相对于避圈法,还有一种求生成树的方法叫做“破圈法”. 这种方法就是在图G中任取一个圈,任意舍弃一条边,将这个圈破掉,重复这个步骤直到图G中没有圈为止. 例 用破圈法求出 下图的一棵生成树. 图的生成树不是唯一的 . A Kruskal算法(或避圈法) 步骤如下: 1) 选择边e1,使得w(e1)尽可能小; 2) 若已选定边 ,则从 中选取 ,使得: i) 为无圈图, ii) 是满足i)的尽可能小的权, 3) 当第2)步不能继续执行时,则停止. 定理4 由Kruskal算法构作的任何生成树 都是最小树. 最小生成树与算法 例 用Kruskal算法求下图的最小树. 在左图中 权值 最小的边有 任取一条 在 中选取权值 最小的边 中权值最小边有 , 从中选 任取一条边 会与已选边构成圈,故停止,得 中选取在中选取 中选取 . 但 与 都 B破圈法 算法2 步骤如下: 1) 从图G中任选一棵树T1. 2) 加上一条弦e1,T1+e1中 立即生成一个圈. 去掉此 圈中最大权边,得到新 树T2,以T2代T1,重复2)再 检查剩余的弦,直到全 部弦检查完毕为止. 例 用破圈法求下图的最小树. prim算法构造最小生成树 设置两个集合P和Q,其中P用于存放的最小生成 树G中的顶点,集合Q存放的最小生成树G中的边。令 集合P的初值为 (假设构造最小生成树时,从 顶点 出发),集合Q的初值为 。 prim算法的思想是,从所有 , 的边 中,选取具有最小权值的边 ,将顶点v加入 集合P中,将边pv加入集合Q中,如此不断重复,直 到 P=V 时,最小生成树构造完毕,这时集合Q中包 含了最小生成树的所有边。 例11 用prim算法求右图的最小生成树。 我们用的第一、二、三行分别表示生成树边的起点、终点、权集合。 Matlab程序如下: clc;clear; M=1000; a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40; a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;a(4,7)=42; a(5,6)=70; a=[a;zeros(2,7)]; a=a+a;a(find(a==0))=M; result=[];p=1;tb=2:length(a); while length(result)~=length(a)-1 result = temp=a(p,tb); temp=temp(:); 1 2 5 4 4 7 d=min(temp); 2 5 4 6 7 3 [jb,kb]=find(a(p,tb)==d); 50 40
文档评论(0)