Sch1-4分治法.ppt

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

* 证明: 假设G的任何一棵最小生成树都不含边(u, v)。将边(u, v)添加到G的一棵最小生成树T上,将产生含有边(u,v)的圈,并且在这个圈上有一条不同于(u, v)的边(u’ , v’),使得u’∈U, v’∈V -U。如下图所示,将边(u’ , v’)删去,得到G的另一棵生成树T’。由于c[u][v]=c[u’ ][v’],所以T’的耗费=T的耗费。于是,T’是一颗含有边(u,v)的最小生成树,这与假设矛盾。 Sch1-4 贪心算法 U u u V v v 含边(u,v)的圈 * Prime算法 设G=(V,E)是连通带权图,V={1,2,…,n},算法思想为:首先置S={1},然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件i?S,j?V-S,且c[i][j]最小的边,将顶点j添加到S中。这个过程一直进行到S=V时为止。 在这个过程中选取到的所有边恰好构成G的一棵最小生成树。 Sch1-4 贪心算法 Void Prime( n, c[][]) { T= Φ; S = {1}; while( S != V ){ (i,j) = i ∈ S且j ∈ V-S的最小权边; T = T U {(i,j)}; S = S U {j}; } } * Sch1-4 贪心算法 利用最小生成树性质和数学归纳法容易证明,上述算法中的边集合T始终包含G的某棵最小生成树中的边。因此,在算法结束时,T中的所有边构成G的一棵最小生成树。 例如,对于右图中的带权图,按Prim算法选取边的过程如下页图所示。 * Sch1-4 贪心算法 * 在上述Prim算法中,还应当考虑如何有效地找出满足条件i?S,j?V-S,且权c[i][j]最小的边(i,j)。实现这个目的的较简单的办法是设置2个数组closest和lowcost。 在Prim算法执行过程中,先找出V-S中使lowcost值最小的顶点j,然后根据数组closest选取边(j,closest[j]),最后将j添加到S中,并对closest和lowcost作必要的修改。 用这个办法实现的Prim算法所需的计算时间为 Sch1-4 贪心算法 * Kruskal算法 Kruskal算法构造G的最小生成树的基本思想是:首先将G的n个顶点看成n个孤立的连通分支。将所有的边按权从小到大排序。然后从第一条边开始,依边权递增的顺序查看每一条边,并按下述方法连接2个不同的连通分支:当查看到第k条边(v,w)时,如果端点v和w分别是当前2个不同的连通分支T1和T2中的顶点时,就用边(v,w)将T1和T2连接成一个连通分支,然后继续查看第k+1条边;如果端点v和w在当前的同一个连通分支中,就直接再查看第k+1条边。这个过程一直进行到只剩下一个连通分支时为止。 Sch1-4 贪心算法 * 例如,对前面的连通带权图,按Kruskal算法顺序得到的最小生成树上的边如下图所示。 Sch1-4 贪心算法 * 时间复杂度: 当图的边数为e时,Kruskal算法所需的时间是 : 当 时,Kruskal算法比Prim算法差; 当 时,Kruskal算法却比Prim算法好得多。 Sch1-4 贪心算法 谢谢! * * Q A University of Science and Technology of China University of Science and Technology of China University of Science and Technology of China University of Science and Technology of China University of Science and Technology of China * 主讲人: 吕敏 Email: { lszhuang@ustc.edu.cn } Spring 2012 ,USTC 算法基础 * * 算法设计复习 内容提要: 算法设计思想回顾(递归和分治、动态规划、贪心算法、回溯法、分支限界法、随机算法) 经典例子讲解 算法设计策略 已学过的算法设计策略: 递归和分治 动态规划 贪心算法 回溯法 分支限界法 随机算法 * * * 基本思想:把一个规模大的问题划分为规模较小的子问题,然后分而治之,最后合并子问题

文档评论(0)

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

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

1亿VIP精品文档

相关文档