算法设计方法 作者 吴哲辉 第4章.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文档。上传文档
查看更多
2000年1月25日 北京化工学院信息基础教研室 算法设计方法 吴哲辉 崔焕庆 马炳先 吴振寰 编著 机械工业出版社 第4章 贪心算法 4.1 背包问题的贪心算法 背包问题:有一个容量为M的背包和n种物品,其中第i种物品的重量为,价值为,要求把物品的全部或一部分装入背包中,使装入背包的物品总重量不超过M,而获得的总价值最大。 用贪心算法求解背包问题的基本思路是按物品的单位重量所含的价值由大到小对各种物品进行选择,直到把背包装满为止。具体做法可以归纳为下列三个步骤。 (1) 把各种物品按单位重量的价值由大到小排序(这是贪心策略的关键) 求下标k,使得 取 4.2 求最小生成树的Kruskal算法 设为一个无向连通图,G的一个无回路连通子图称为它的一个生成树。最小生成树的概念则是对带权无向连通图而言的。设为一个带权无向连通图,T是G的一个生成树。如果对于G的任意一个生成树都有 ,则称T为G的一个最小生成树。 Kruskal算法是一种典型的贪心算法。它的基本思路是:首先把图的各条边按权值从小到大排成一个非降序列,然后依次考察各条边。如果所考察的边同已选取的边不构成回路,那么就把这条边选为树边;否则就把这条边舍弃。直到图中的每个顶点都至少有一个树边与之关联为止。 4.2 求最小生成树的Kruskal算法 为了用具体的算法实现上述思路,可以采用以下两点措施。 (1) 用一个队列来存放经过排序的图的各条边,算法执行过程中,每次都取出队列头的元素进行考察。 (2) 开始时把图的顶点分为n=|V|个子集,每个子集包含一个顶点。当考察一条边e=(u,v)时,如果u和v当时属于不同的子集,就把e选为最小生成树的树边,并把u和v各自所在的顶点子集合并成一个;否则,就把e舍弃。 4.2 求最小生成树的Kruskal算法 4.3 求最小生成树的Prim算法 Prim算法的基本思路是这样的:以无向加权连通图的任意一个顶点作为初始部分树(即初始部分树只含一个顶点,不含任意边),由此出发,每次找出同部分树中某个顶点关联的一条最小权的边,对部分树进行扩展,直到部分树包含图中的全部顶点。扩展过程中,要注意每次找出的新的边同部分树中已有的边不能构成回路。 4.3 求最小生成树的Prim算法 为实现上述算法思路,算法的设计给出下面的具体处理方法。 (1) 把图的顶点集V分为3个子集:V1: 已构成部分树的顶点集;V2: 同部分树中某个顶点相邻的顶点集;V3: 其他顶点集。 (2) 把图的边集也分为3个子集:E1: 已构成部分树的边的集合;E2: 对中的每个顶点,选出一条与之关联(且与部分树顶点集中的一个顶点关联) 的最小权的边的集合;E3: 其他边集。 (3) 算法运行的具体措施: 从初始部分T0开始,循环执行以下过程:每次从E2中选出权最小的边加入E1,并相对应地对E1、E2和E3,以及V1、V2和V3的元素进行调整,直到V1=V为止。 其中对E2的调整稍微复杂一些。由于V2的元素发生了变化,不仅对V2中新增的顶点要选出一条同部分树相连接的最小权的边,而且中V2原有(且尚未调整入)的顶点,也要考查它同部分树相连接的最小权的边是否(由于V1增加了新元素而)有所改变。 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.3 求最小生成树的Prim算法 4.4 求单源最短路的Dijkstra算法 求单源最短路是指在一个加权无向连通图中,求从某个顶点u(源)出发,到指定的另一个顶点v(或到图中其余各个顶点)的最短路径。Dijkstra提出的求单源最短路径算法的基本思路同求最小生成树的Prim算法相类似,也属于一种贪心算法。Dijkstra算法基本思路是这样的:设已求出从顶点u到其的最短路径的那些顶点的集合v1(v1的初始值为{u}),每次从的邻接顶点集中找出一个顶点,使得 值为最小(其中表示顶点到顶点的最短路径的长度),然后把加入到中,直到(或)为止。 4.4 求单源最短路的Dijkstra算法 定理4.1 设为一个加权无向连通图。对于包含顶点u的任意顶点子集V1,若 和 使得 且P(u,x0)是顶点u到x0的最短路,那么P(u,x0)(x0,y0)就是顶点u到y0的最短路。 4.4 求单源最短路的Dijkstra算法 4.4 求单源最短路的Dijkstra算法 4.5

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档