- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最小生成树算法分析.
最小生成树算法分析
一、生成树的概念
若图是连通的无向图或强连通的有向图,则从其中任一个顶点出发调用一次bfs或dfs后便可以系统地访问图中所有顶点;若图是有根的有向图,则从根出发通过调用一次dfs或bfs亦可系统地访问所有顶点。在这种情况下,图中所有顶点加上遍历过程中经过的边所构成的子图称为原图的生成树。
对于不连通的无向图和不是强连通的有向图,若有根或者从根外的任意顶点出发,调用一次bfs或dfs后一般不能系统地访问所有顶点,而只能得到以出发点为根的连通分支(或强连通分支)的生成树。要访问其它顶点需要从没有访问过的顶点中找一个顶点作为起始点,再次调用bfs或dfs,这样得到的是生成森林。
由此可以看出,一个图的生成树是不唯一的,不同的搜索方法可以得到不同的生成树,即使是同一种搜索方法,出发点不同亦可导致不同的生成树。
可以证明:具有n个顶点的带权连通图,其对应的生成树有n-1条边。
二、求图的最小生成树算法
严格来说,如果图G=(V,E)是一个连通的无向图,则把它的全部顶点V和一部分边E’构成一个子图G’,即G’=(V, E’),且边集E’能将图中所有顶点连通又不形成回路,则称子图G’是图G的一棵生成树。
对于加权连通图,生成树的权即为生成树中所有边上的权值总和,权值最小的生成树称为图的最小生成树。
求图的最小生成树具有很高的实际应用价值,比如下面的这个例题。
例1、城市公交网
[问题描述]
有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少。
[输入]
n(城市数,1=n=100)
[问题分析]
出发点:具有n个顶点的带权连通图,其对应的生成树有n-1条边。那么选哪n-1条边呢?设图G的度为n,G=(V,E),我们介绍两种基于贪心的算法,Prim算法和Kruskal算法。
1、用Prim算法求最小生成树的思想如下:
①设置一个顶点的集合S和一个边的集合TE,S和TE的初始状态均为空集;
②选定图中的一个顶点K,从K开始生成最小生成树,将K加入到集合S;
③重复下列操作,直到选取了n-1条边:
选取一条权值最小的边(X,Y),其中X∈S,not (Y∈S);
将顶点Y加入集合S,边(X,Y)加入集合TE;
④得到最小生成树T =(S,TE)
上图是按照Prim算法,给出了例题中的图(A)最小生成树的生成过程(从顶点1开始)。其中图(E)中的4条粗线将5个顶点连通成了一棵最小生成树。如何证明Prim算法的正确性呢?提示用反证法。
因为操作是沿着边进行的,所以数据结构采用边集数组表示法,下面给出Prim算法构造图的最小生成树的具体算法框架。
① 从文件中读入图的邻接矩阵g;
② 边集数组elist初始化;
For i:=1 To n-1 Do
Begin
elist[i].fromv:=1;elist[i].endv:=i+1;elist[i].weight:=g[1,i+1]; End;
For k:=1 To n-1 Do
Begin
min:=maxint;m:=k;
or j:=k To n-1 Do {查找权值最小的一条边}
If elist[j].weightmin Then Begin min:=elist[j].weight;m:=j;End;
f mk Then Begin t:=elist[k];elist[k]:=elist[m];elist[m]:=t;End; j:=elist[k].endv; For i:=k+1 To n-1 Do {修改未加入的边集}
Begin s:=elist[i].endv; w:=g[j,s];
If welist[i].weight
Then Begin elist[i].weight:=w;elist[i].fromv:=j;End;
End;
Kruskal算法在实现过程中的关键和难点在于:如何判断欲加入的一条边是否与生成树中已保留的边形成回路?我们可以将顶点划分到不同的集合中,每个集合中的顶点表示一个无回路的连通分量,很明显算法开始时,把所有n个顶点划分到n个集合中,每个集合只有一个顶点,表明顶点之间互不相通。当选取一条边时,若它的两个顶点分属于不同的集合,则表明此边连通了两个不同的连通分量,因每个连
您可能关注的文档
- 最大值问题和两个重要的极限..doc
- 最大利用率防反光黑板..doc
- 最大功率跟踪原理及控制方法..doc
- 最大功率跟踪控制方法及装置..doc
- 最大加工直径为500毫米的经济型数控车床进给系统设计..doc
- 最大摄氧量(VO2max)直接测定法..doc
- 最大加工直径为Ф400mm普通车床主轴变速箱设计..doc
- 最大李雅谱诺夫指数的数值计算..doc
- 最大化地利用高速放大器电路..doc
- 最大气泡压力法测定溶液的表面张力2..doc
- 交通运输行业数字化转型2025:技术应用与市场拓展案例分析报告.docx
- 国家智慧教育云平台在职业院校教育教学信息化建设中的应用研究教学研究课题报告.docx
- 影视鉴赏对初中语文课程教学效果提升的实证研究教学研究课题报告[001].docx
- 《船舶制造企业数字化造船技术项目管理与实施策略研究》教学研究课题报告.docx
- 《基于核心素养的初中生数字素养评价与教学研究》教学研究课题报告.docx
- 初中数学教学可视化在几何图形识别中的应用研究教学研究课题报告.docx
- 未成年人心理问题与心理健康教育政策实施效果评价研究教学研究课题报告.docx
- 8 《城市广场海绵城市设计策略对雨水径流控制与生态修复的影响研究》教学研究课题报告.docx
- 轻量化移动学习平台中人工智能教育资源的动态更新与智能推荐策略教学研究课题报告.docx
- 《基于社区卫生服务的脑卒中患者延续性护理服务质量提升策略》教学研究课题报告.docx
文档评论(0)