第11讲-贪心算法的应用.pptx

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;;最小生成树(Minimum-spanning-tree,MST) 带权无向连通图G=(V,E),对于每条边(u,v)∈E,其权重为w(u,v),G的一棵生成树T是无环的,并且连通所有顶点。T中各边的权之和W(T) 称为树的权,具有最小权的生成树称为G 的最小生成树。 ;最小生成树(Minimum-spanning-tree,MST) 用带权的连通无向图G的顶点表示城市,边表示连接两个城市之间的通信线路,边上的权表示距离或代价等。若有n个城市,最多可构造n(n-1)/2条线路。如何在这些可能的线路中,选择其中(n-1)条线路,使其总的代价最小(或者线路的总的长度最短)?;最小生成树(Minimum-spanning-tree,MST) 解决最小生成树问题的两种算法:Kruskal算法和Prim算法。这两种算法都是采用贪心策略。 贪心策略的两个基本要素 最优子结构性质 贪心选择正确性;最小生成树的最优子结构 假设生成树T是带权无向连通图G=(V,E)的一棵最小生成树。;?;最小生成树问题也具有重叠子问题性质 因此,可以用动态规划求解最小生成树问题。;最小生成树的形成 贪心策略:每次贪心选择,增长最小生成树的一条边 定义集合A为图G的某棵最小生成树的一个子集 每一次贪心选择一条边(u,v),将其加入集合A中,使得A?{(u,v)}也是一棵最小生成树的子集。称边(u,v)为集合A的安全边。 GENERIC-MST(G,w) A=? Whie A does not form a spanning tree find an edge (u,v) that is safe for A A= A?{(u,v)} Return A;术语定义: 无向图G=(V,E)中的一个切割(S,V-S),将结点集合V划分为S和V-S两个集合。 如果一条边(u,v)∈E的一个端点位于集合S,另一个端点位于集合V-S,则称该条边(u,v)横跨切割(S,V-S)。 边集合A,如果集合A中不存在横跨切割(S,V-S)的边,则称该切割(S,V-S)尊重集合A(a cut respects a set A)。 在横跨一个切割的所有边中,权重最小的边称为轻量级边(light edge)。 ;第11讲 贪心算法的应用;定理: 带权无向连通图G=(V,E),假设集合A是E的一个子集,且A包括在图的某可最小生成树中,设(S,V-S)是图 G中尊重集合A的任意一个切割,(u,v)是横跨切割(S,V-S)的一条轻量级边,那么边(u,v)对于集合A是安全的。;假设T是一棵包含A的最小生成树 T中不包含边(u,v) 待证明: 将边(u,v)加入到集合A中, A?{(u, v)}也是某棵最小生成树的子集,即边 (u,v)对于集合A是安全的。 ;最小生成树T中从结点u到结点v有一条简单路径p; 结点u位于集合S,结点v位于集合V-S中,简单路径p中至少有一条边横跨切割(S,V-S),假设该边为(x,y); 切割(S,V-S)尊重集合A,所以(x,y)? A ;删除边(x,y),添加边(u,v),形成一棵新的生成树T’ T’=T-{(x, y)}?{(u, v)} (u,v),(x,y)都横跨切割(S,V-S)的边 (u,v)是横跨切割(S,V-S)的一条轻量级边 w(u,v)≤w(x,y) W(T’)=W(T)-w(x,y)+w(u,v) ≤W(T) T是最小生成树,W(T) ≤W(T’) T’一定也是一棵最小生成树 ;T是一棵包含A的最小生成树,A?T (x,y)? A,T’=T-{(x, y)}?{(u, v)} A?T’,A?{(u, v)} ?T’ T’是一棵最小生成树 所以,(u,v)对集合A是安全的 ;最小生成树的形成 GENERIC-MST(G,w) A=? Whie A does not form a spanning tree find an edge (u,v) that is safe for A A= A?{(u,v)} Return A Kruskal和Prim算法的差别就在于如何确定安全边(u,v)。;第11讲 贪心算法的应用;;;带权无向连通图G=(V,E),假如所有边的权重都互不相同,则图G的最小生成树是唯一的。;?;?;第11讲 贪心算法的应用;?;?;设置两个辅助数组: lowcost[ ]:存放生成树顶点集合U内顶点到生成树外(V-U)各顶点的各边上的当前最小权值; nearvex[ ]:记录生成树外各顶点距离集合U内哪个顶点最近(即权值最小)。;?;;;;;;;最短路径 (Shortest Path) 用带权有向图表示交通网络,顶点表示城市,边u,v表示城市u到城市v的直

文档评论(0)

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

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

1亿VIP精品文档

相关文档