数据结构与算法设计-第7章图11-03.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法设计-第7章图11-03

第 * 页 7.3 图的遍历 图的广度遍历(BFS) 例 1 4 2 3 5 0 1 2 3 4 5 2 5 f r 遍历序列:1 4 3 2 5 0 1 2 3 4 5 5 f r 遍历序列:1 4 3 2 5 0 1 2 3 4 5 f r 遍历序列:1 4 3 2 5 1 2 3 4 1 3 4 2 vexdata firstarc 5 5 4 3 ^ ^ ^ adjvex next 5 5 1 ^ 5 1 1 4 3 ^ 2 2 第 * 页 7.4 图的最小生成树 问题提出 要在n个城市间建立通信联络网: 顶点——表示城市; 权——城市间建立通信线路所需花费的代价; 希望找到一棵生成树,使它的每条边上的权值之和(即建立该通信网所需花费的总代价)最小——此即最小代价生成树。 问题分析 n个城市间,最多可设置 n(n-1)/2 条线路,如全部布线代价太高; n个城市间建立通信网,只需 n-1 条线路即可。 问题转化为:如何在可能的线路中选择 n-1 条,能把所有城市(顶点)均连起来,且总耗费(各边权值之和)最小。 第 * 页 问题分析: 可用连通图表示n个城市以及n个城市间可能的通信线路,其中图的顶点表示城市,便表示两城市之间的线路,边的权值表示该段线路的代价。对于n个顶点的连通图可以建立许多不同的生成树,每一棵生成树都可以是一个通信网。现在,要选择一棵生成树,使得总耗费最少。这就是构造连通图的最小代价生成树(Minimum Cost Spanning Tree,简称最小生成树MST)的问题。一棵生成树的代价就是树上各边的代价之和。 构造图的最小生成树的两种算法: 第 * 页 7.4 图的最小生成树 Prim算法的基本思想: 取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。 在添加的顶点 w 和已经在生成树上的顶点 v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。 之后继续往生成树上添加顶点,直至生成树上含有”n个顶点、n-1条边”为止。 第 * 页 7.4 图的最小生成树 普里姆算法(Prim) 设 G=(V,GE)为一个具有 n 个顶点的连通网络,T=(U,TE)为构造的生成树。 (1)初始时,U = {u0},TE = ?; (2)在所有 u?U 、v?V-U 的边(u,v)中选择一条权值最小的边,不妨设为(u,v); (3)(u,v) 加入TE,同时将 v 加入U(注意这时U集合变大、V-U变小了,实际上是按照选择U集合与V-U集合关联的最小权的边,向U中添加顶点); (4)重复(2)(3),直到 U=V 为止; U V-U ? v u ? U扩大 V-U缩小 v u ? ? 第 * 页 7.4 图的最小生成树 普里姆算法(Prim)——教材P175 V3 V1 V4 V6 V5 V2 3 6 5 2 1 6 5 5 4 6 V3 V1 V4 V6 V5 V2 1 2 V3 V1 V4 V6 V5 V2 1 4 V3 V1 V4 V6 V5 V2 1 4 2 V3 V1 V4 V6 V5 V2 1 4 5 2 V3 V1 V4 V6 V5 V2 1 4 5 3 U={ V1 } U={ V1,V3 } U={ V1,V3,V6} U={ V1,V3,V6,V4 } U={ V1,V3,V6,V4,V2 } U={ V1,V3,V6,V4,V2,V5 } Question:从不同的顶点出发 构造的最小生成树是否唯一? 第 * 页 7.4 图的最小生成树 克鲁斯卡尔(Kruskal)算法 考虑问题的出发点:为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。 具体做法:先构造一个只含 n 个顶点的子图SG,然后从权值最小的边开始,若它的添加不使SG中产生回路,则在SG 中加上这条边,如此重复,直至加到n-1条边为止。 第 * 页 Kruskal算法的例子 V3 V1 V4 V6 V5 V2 1 2 V3 V1 V4 V6 V5 V2 1 3 2 V3 V1 V4 V6 V5 V2 1 4 2 V3 V1 V4 V6 V5 V2 1 3 5 2 V3 V1 V4 V6 V5 V2 1 3 (a) (b) (c) (d) (f) V3 V1 V4 V6 V5 V2 3 6 5 2 1 6 5 5 4 6 (e) 第 * 页 7.4 图的最小生成树 克鲁斯卡尔(Kruskal)

文档评论(0)

317960162 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档