- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1第9章 图的最小支撑树什么是图的最小支撑树 2一个通用的贪心法策略 4Kruskal算法 11Prim算法 18
1.什么是图的最小支撑树无向图G的一个子图,如果包含所有顶点,则称为G的一个支撑子图无向图G的一个支撑子图,如果是一棵树,则称为图G的一棵支撑树。连通的无向图才有支撑树。加权图G的一棵支撑树T称为最小支撑树(minimumspanningtree,简称MST),如果它的边的总权值,记作W(T),是所有支撑树中最小的。讨论如何为连通的加权无向图G找出最小支撑树的算法问题很多应用问题可建模为找MST的问题。2
3例:(a)一个连通的加权无向图Gaecbd4751243(c)一个非最小的支撑树,权值=16aecbd7513(d)一个最小支撑树,权值=10aecbd1243(b)一个支撑子图aecbd47512
4设连通加权图G(V,E)中,|V|=n,|E|=m,步骤如下:第一步,初始化边的集合A??。 //含n个孤立顶点第二步,在E中找出一条边e使得集合A?{e}包含在某个MST中。第三步,如果当前的A形成一个支撑树,也就是含n-1条边,算法停止,A是一个MST。否则,重复第二步。Kruskal和Prim算法都遵循这一策略。显然,主要问题是在第二步中,如何找到这样的边。这条边称为安全边。2.一个通用的贪心法策略
5通用算法的伪码Generic-MST(G(V,E))A??ConstructgraphT(V,A) //初始,T含n个顶点,没有边fork?1ton-1 findasafeedge(u,v)inEforA //从E中找一条安全边(u,v) A?A?{(u,v)} //把边(u,v)加到集合A中endfor returnTEnd下面讨论如何找安全边。
6割的定义及割的最小交叉边图的一个割C=(P,V-P),就是把V分成两个非空子集,每个顶点必须属于P或者V-P,但不能同属于两者。给定一个割,C=(P,V-P),如果边(u,v)的两端,u和v分属于两边,即u?P和v?V-P,那么我们说,割C与边(u,v)相交,边(u,v)是一条交叉边(Crossedge)。如果一个割,C=(P,V-P),与集合A?E中每一条边都不相交,那么,我们说这个割尊重(respect)集合A。给定一个割,C=(P,V-P),所有交叉边组成的集合称为边与这个割的交集,记为B(C)。交集B(C)中权值最小的边称为最小交叉边。
7割的最小交叉边的例子下图中,P={a,b,d,f,h},V-P={c,e,g,i}。粗线条表示A中的边,并与割C=(P,V-P)不相交。交集B(C)={(a,c),(b,g),(d,c),(d,e),(d,g),(h,g),(h,i)}。最小交叉边是(b,g),权值为w(b,g)=2。
8定理9.1 A?E是E的一个子集且包含在某个MST中。如果有一个割C=(P,V-P)与A不相交,那么它的最小交叉边是一条安全边。证明: 我们只需证明A?{(u,v)}包含在某一个MST中。假设T*是一个包含A的MST,而边(u,v)是割C的最小交叉边。如果边(u,v)也属于T*,那么定理得证。考虑(u,v)?T*的情况。因为T*是个支撑树,有一条从u到v的路径L。因为u和v分属割的两边,所以,如果沿着从u到v的路径L走,一定会碰到另一条交叉边(x,y)。下图显示了这种情况。图中粗线条表示集合A里的边。如果把(x,y)刪去,会把T*断开为两个子树,分别含u和v。(接下页)
9这时,如果把(u,v)加进去,则会把这两个子树又连成一个支撑树T’,T’=(T*–{(x,y)}?{(u,v)})。因为(u,v)是最小交叉边,w(u,v)?w(x,y),所以有:W(T’)=W(T*)–w(x,y)+w(u,v)?W(T*)。因为T*是一个MST,T’也必定是一个MST且包含了边(u,v)。所以,集合A?{(u,v)}包含在某一个MST中。?定理9.1 证明(继续)
10定理9.1意味着最小支撑树的通用算法是正确的。这是因为:1. 因为|V|=n,只要|A|n-1,导出的图T就不连通,集合V就必有与A不相交的割C=(P,V-P)。因为连通的G必有连接割的两边的边,即P和V-P之间的边
您可能关注的文档
- 计算机算法基础 第2版 课件 第1章 概述.pptx
- 计算机算法基础 第2版 课件 第2章 分治法.pptx
- 计算机算法基础 第2版 课件 第3章 基于比较的排序算法.pptx
- 计算机算法基础 第2版 课件 第4章 不基於比较的排序算法.pptx
- 计算机算法基础 第2版 课件 第5章 中位数和任一顺序数的选择.pptx
- 计算机算法基础 第2版 课件 第6章 动态规划.pptx
- 计算机算法基础 第2版 课件 第7章 贪心算法.pptx
- 计算机算法基础 第2版 课件 第8章 图的周游算法.pptx
- 计算机算法基础 第2版 课件 第10章 单源最短路径.pptx
- 计算机算法基础 第2版 课件 第11章 网络流.pptx
文档评论(0)