版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
——图的最小生成树图的常用算法1一、图的生成树
在一个连通图G中,如果它的全部顶点和部分边构成一个子图G’,且边将图中的所有顶点连通又不形成回路,则称子图G’是原图G的一棵生成树。同一个图可以有不同
的生成树,但可以证
明:n个顶点的连通图
的生成树必定含有n-1
条边。要构成这样的图,其基本算法如下:
从图“G”的选取一个顶点放到“G’”中,因只有一个顶点,因此该图是连通的;以后每加入一个顶点,都要加入以该点为顶点与已连通的顶点之中的一个顶点为端点的一条边,使其既连通而不产生回路,进行n-1次后,就产生G’,在G’中有n个顶点,n-1条边且不产生回路。
二、图的最小生成树对于一个连通网(带权的图),生成的树不同,每棵树的路径总长度就可能不同,其中具有最小权的树我们称为最小生成树。研究图的生成树的意义?
例如城市的通讯系统,网的顶点代表城市,网的边代表城市之间架设通讯线路的造价,求使总的造价最低。
2012-1-106图的最小生成树主要两种方法:prim算法,kruskal算法三、prim算法(深度优先和广度优先结合算法)
prim算法的要点是:(1)设有n个顶点的连通网:G=(V,E),T=(U,TE)是G的最小生成树,其中U是顶点集,TE是T的边集,U、TE开始值为空(2)原图用邻接矩阵存储
1234567∞8∞5∞∞∞8∞12310∞∞∞12∞∞62∞53∞∞∞715∞106∞∞9∞∞∞279∞∞∞∞∞15∞∞∞
(3)prim算法的实现过程{自己到自己为∞}12345672012-1-107首先任取一个顶点(V1)进入顶点集合,U={V1},只要U⊂V,就找这样的一条边,它的一个端点已经在树T(vi)中,而将另一个端点且仍在T外,且长度最短的边,假定为(vi,vj),将该边并入边的集合(TE),(vj)并入顶点的集合(U)。将该操作重复执行n-1次,直到所有顶点都并入顶点集合中。问题关键:每次如何从生成树T中到T外的所有边中,快速找出一条最短路径。分析:
假设已经生成K个顶点,K-1条边的树,需要搜索K个顶点与n-k条边的联系,这样时间复杂性为O(k(n-k))。能否降低查找时间则成为该题关键。(c)解决方法:2012-1-108
初始化
U={V1}TE={}LW={(V1,V2)8,(V1,V3)∞,(V1,V4)5,(V1,V5)∞,(V1,V6)∞,(v1,v7)∞}
第一次:U={V1,V4}
TE={(V1,V4)5}LW={(V4,V2)3,(V1,V3)∞,(V1,V5)∞,(V4,V6)7,(V4,V7)15}
第二次:U={V1,V4,V2}
TE={(V1,V4)5,(V4,V2)3}LW={(V2,V3)12,(V2,V5)10,(V4,V6)7,(V4,V7)15}9第三次U={V1,V4,V2,V6}
TE={(V1,V4)5,(V4,V2)3,(V4,V6)7}LW={(V6,V3)2,(V6,V5)9,(V4,V7)15}第四次U={V1,V4,V2,V6,V3}TE={(V1,V4)5,(V4,V2)3(V4,V6)7,(V6,V3)2}LW={(V3,V5)6,(V4,V7)15}第五次U={V1,V4,V2,V6,V3,V5}TE={(V1,V4)5,(V4,V2)3,(V4,V6)7,(V6,V3)2,(V3,V5)6}LW={(V4,V7)152012-1-1010第六次U={V1,V4,V2,V6,V3,V5,V7}TE={(V1,V4)5,(V4,V2)3,(V4,V6)7,(V6,V3)2,(V3,V5)6},(V4,V7)15}LW={}
2012-1-10112012-1-1012(4)算法如下:ProcedurePrim(GA,CT);beginforI:=1ton-1do{给CT赋初值,对应第0次的LW值}
[CT[I].from:=1;ct[I].end:=I+1;ct[I].w:=GA[1,i+1];fork:=1ton-1do{进行n-1次循环,求出最小生成树的第K条边}①[min:=maxint;m:=k;forj:=kton-1doifct[j].w<minthenmin:=ct[j].w;m:=j;]②ifm<>kthenct[k]与ct[m]的交换
{将最短边调到第K单元}2012-1-1013③j:=ct[k].end;{将新的并入T中顶点给J}④forI:=k+1ton-1do{修改LW中的有关边}1.[d:=ct[I].end;w:=GA[j,d];2.IFW<CT[I].Wthen[CT[i].w:=w;CT[i].from:=j;]
End;2012-1-1014四、Kruskal
算法(贪心算法)Kruskal
算法的关键在于如何判断是否构成回路。假设G=(V,E)是一个具有n个顶点的连通图,T=(U,TE)是G的最小生成树,U的初值等于V,即包含有G中的全部顶点,TE的初值为空。此算法的基本思想是:将图G中的边按权值从小到大的顺序依次选取,若选取的边使生成树T不形成回路,则把它并入TE中,保留作为T的一条边,若选取的边使生成树T形成回路,则将其舍弃,如此行进下去,直到TE中包含有n-1条边为止,此时的T即为最小生成树。2012-1-10152012-1-10162012-1-1017判断最小生成树在构成过程中,是否构成回路的方法:方法:将各个顶点划分所属集合的方法解决。每个集合的顶点表示一个无回路的连通分量。
(1)初始化:{V1},{V2},{V3},{V4},{V5},{V6}(2)当从边集数组中按次序选择一条边时,若它的两个端点分别属于两个不同的集合,则表明该边连接了两个不同的连通分量,无回路,该边作为树的一条边,将端点所在的两个集合合并为一个集合,此时它们成为一个连通分量。(3)若选择的边的两个端点在一个集合中,则放弃该边,否则造成回路。
{V1,V5},{V2,V3,V4},{V6}
{V1,V5},{V2,V3,V4,V6}
{V1,V5,V2,V3,V4,V6}2012-1-1018算法的实现:(1)用边集数组存放图的结构:GE,记录数组(2)实现边的排序:按边的权值进行(3)用集合数组S存放连通的顶点集合(4)用C数组存放生成的第i条边属于GE边集数组的第X条边下标序号。2012-1-1019算法:Procedurekruskal(GE,C);beginfori:=1tondos[i]:=[i];{初始化顶点集合}i:=1;j:=1{i表示边数,j表示边集数组GE的下标}whilei<=n-1do[(1)fork:=1tondobeginifGE[J].frins[k]thenm1:=k;ifGE[J].edins[k]thenm2:=k;end;{记录第j条边的两个端点的集合序号}(2)ifm1<>m2then{生成树的一条边}2012-1-1020
begin
c[i]:=j;{保存生成树的第i条边,因为j是GE数组的下标}i:=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度解除聘用合同及知识产权归属协议
- 2025年度现浇混凝土预制构件施工安全监理合同
- 二零二五年度股权并购重组合同范本
- 科技产品中的数学设计原理
- 2025年度消防演练场地设计与包工包料施工合同
- 2025年度网络安全聘用安全专家的保密合同
- 二零二五年度蛋糕店租赁与品牌使用合同
- 二零二五年度合资企业股权比例调整合同范本
- 2025年度高端产品销售代表入职服务合同
- 二零二五年度电商直播销售合作合同
- 人力资源服务公司章程
- (正式版)CB∕T 4552-2024 船舶行业企业安全生产文件编制和管理规定
- 病案管理质量控制指标检查要点
- 2024年西藏中考物理模拟试题及参考答案
- 九型人格与领导力讲义
- 药品经营和使用质量监督管理办法培训试题及答案2023年9月27日国家市场监督管理总局令第84号公布
- 人教版五年级上册数学脱式计算练习200题及答案
- 卵巢黄体囊肿破裂教学查房
- 医院定岗定编
- 2023年大学物理化学实验报告化学电池温度系数的测定
- 脑出血的护理课件脑出血护理查房PPT
评论
0/150
提交评论