第18讲 最小生成树.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
武汉科技大学理学院 §7.4 图的连通性问题 无向图的连通分量和生成树 最小生成树 §7.4.1 无向图的连通分量和生成树 对于连通图:从图中任一顶点出发,进行DFS或BFS搜索,便可访问到所有顶点。 对于非连通图:从多个顶点出发进行搜索,每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为各个连通分量的顶点集。 例1:从顶点A出发DFS遍历该图: 生成树 对于连通图:所有顶点和遍历过程中经历的边的集合构成一个极小连通子图,即该连通图的一棵生成树。 例3:画出非连通图G3的深度优先生成森林和广度优先生成森林。 §7.4.3 最小生成树 Prim算法 Kruscal算法 一、问题的定义 假设在n个城市之间建立通信联络网,任意两个城市间设置一条线路都需要一定的经济代价,考虑如何建网最节省经费? 二、构造最小生成树的MST性质 假设G=(V, E)是一个连通网,U是顶点集V的一个非空真子集,若(u,v)是满足 的边(称这种边为两栖边); 且(u,v)在所有两栖边中具有最小的权值(此时称它为最小两栖边),则必存在一棵包含边(u,v)的最小生成树。 三、Prim算法及其实现 3.Prim算法的基本步骤 (1)初始化:U={u0},TE={ }; (2)如果U=V,则完成; (3)找最小两两栖边(u,v),将(u,v)加入到边集TE中,并将顶点v并入集合U中; (4)由于新顶点的加入,U的状态发生变化,需要对U和V-U之间的两栖边进行调整; (5)转至(2); 4. Prim 算法的实现 1)连通图用邻接矩阵表示: 3)构造最小生成树过程中TE向量的变化过程: 算法关键步骤: 求第k条最小两栖边,将其加入到TE中。 1)求当前最小两栖边及应添加的顶点v 3)调整V-U中各顶点对应的两栖边 (由于v加入最小生成树引起) for(j=k+1; j=n-2; j++){ d=G.arcs[v][TE[j].end]; if (dTE[j].w) { TE[j].beg=v; TE[j].w=d; } } Prim算法总体控制: 1)初始化:建立初始入选点,并初始化生成树边集TE for(i=0; i=n-2; i++){ TE[i].beg=0; TE[i].end=i+1; TE[i].w=G.arcs[0][i+1]; } 四、Kruscal算法 假设连通网N=(V,E),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T={V, { }},图中每个顶点自成一个连通分量。 在E中选择代价最小的边,若该边依附的顶点落在T中不同连通分量上,则将此边加入T中,否则舍去此边而选择下一条代价最小的边。 依次类推,直至T中所有 顶点落在同一连通分量上。 作业 对如下无向网: 1) 写出它的邻接矩阵,并按Prim算法求其最小生成树及程序实现过程中最小生成树边向量的变化过程(给出3步); * * 对无向图进行遍历: A B M L I D E G H K J C F 10 11 12 遍历得到的3个顶点集加上所有依附于它们的边便构成该非连通图的3个连通分量。 无向图G3 A 0 B 1 2 3 4 5 6 7 11 5 2 12 0 4 3 0 10 10 8 7 ^ ^ 8 9 C D E F G H I J K L M ^ ^ ^ 6 ^ 0 ^ 6 ^ 12 7 6 ^ 12 9 0 ^ 11 9 1 ^ 11 ^ 1 ^ V1 V2 V3 V4 V5 V6 V7 V8 例2:画出如下连通图的深度优先生成树和广度优先生成树。 对于非连通图:每个连通分量的顶点集和遍历时走过的边的集合构成若干棵生成树,即该非连通图的生成森林。 生成森林 定义:无向图G有n个顶点,若G’是G的一棵生成树,并且树中n-1条边的权值之和在所有生成树中最小,则称G’是G的最小生成树。 A E C B D F 15 12 12 10 8 7 10 5 6 6 基本思想 假设G={V,E}是连通网,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V),TE={ }开始,重复执行下述操作: 在所有u∈U, v∈V-U的边(u,v)中找一条代价最小的两栖边并入集合TE,同时把它的顶点并入集合U,直至U=V为止。 10 8 2.算法演示:Prim算法求解最小生成树 6 A 7 D 5 F 6 10 E C B 12 15 10 E C B 12 15 B D D F D A E C B F 15 12 12 10 8 7 10 5 6 6

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档