《第八章贪心算法.docVIP

  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文档。上传文档
查看更多
《第八章贪心算法

第8章 贪心算法 8.1简介 8.1.1 例子 例子: 有4种硬币,面值分别为2角5分、一角、五分和一分。现在要求以最少的硬币个数找给顾客6角三分。 通常是:先拿两个2角5分的+1个一角+3个一分 这种找法所拿出的硬币个数最少。这种算法其实就是贪心算法。顾名思义:该算法总是作出在当前看来最好的选择,并且不从整体上考虑最优问题,所作出的选择只是在某种意义上的局部最优解。 上面的解法得到的恰好也是最优解。因此,贪心方法的效率往往是很高的。 假如,面值有一角一分、五分和一分,要找给顾客一角五分。如果还是使用上述贪心算法,得到的解是:一个一角一分+4个一分。而最优解是3个5分。 又例如: 求节点1到节点6的最短路径。用贪心法得19,而实际为17。 显然贪心算法不能对所有问题都能得到最优解,但是对很多问题(包括很多著名的问题)都能产生整体最优解。例如,我们今天要讲的图的单元最短路径问题、最小生成树问题。在有些情况下,算法不能得到整体最优解,但是结果确是最优解的很好近似。 8.1.2 贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到,即贪心选择来达到。这是贪心算法可行的第一个基本要素.也是贪心算法与动态规划算法的主要区别: 动态规划算法:每步所做出的选样往往依赖于相关子问题的解,因而只有在解出相关子问题后.才能做出选择。 贪心算法:仅在当前状态下做出最好选样,即局部最优选则。然后再去解做出这个选择后产生的相应的子问题。贪心算法所做出的贪心选则可以依赖于以往做过的选则,但决不依赖于将来所做的选样,也不依赖于子问题的解。 动态规划:是自底向上的方法解各子问题; 贪心算法:是自顶向下的方法。每做出一次贪心选择就将所求问题简化为规模更小的子问题. 使用贪心法的难点在于:证明所设计的算法确实能够正确解决所求解的问题。即对于一个具体的问题,必须证明每一步所做出的贪心选择最终导致问题的整体最优解。 首先,考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始。做出贪心选择后.原问题简化为规模更小的类似子问题。然后,用数学归纳法证明、通过每一步做贪心选择.最终可得到问题的整体最优解。 其中,证明贪心选择后的问题简化为规模最小的类似子问题的关键在于利用该问题的最优子结构性质。 最优子结构性质: 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。 贪心算法和动态规划算法都要求问题具有最优子结构性质,这是两类算法的一个共同点。但是都具有最优子结构的问题该选则贪心法还是动态规划算法求解?是否能用动态规划法的也能用贪心算法解? 背包问题: 给定n种物品和一个背包,物品i的体积为,价值为。已经知道背包的承重量为C。 假设是物体i被装入背包的部分,;要求装满背包且背包内物体价值最大。 max 选择方法:目标函数的值增加最快,而包载容量的消耗较慢的物体装入包中。故优先选择价值体积比最大的物体装入背包。 背包与0-1背包的区别: 结论0-1背包问题能用动态规划法解,但不能用贪心法解。 8.3单源最短路径问题(狄斯奎诺Dijkstra’s算法) 一、问题描述 是一个有向图,每条边上有一个非负整数表示长度值,其中有一个顶点称为源节点。所谓的单源最短路径问题就是:求解该源节点到所有其它节点的最短路径值。不失去一般性,我们假设并且=1。那么该问题可以使用Dijkstra’s算法来求解,该算法是一种贪心算法,并且能求得最优解。 二、算法思想 开始时,我们将所有的顶点划分为两个集合。所有已经计算好的顶点存放在中,中表示还没有计算好的。中的每个顶点有一个对应的量,该值是从源顶点到(并且只经由中的顶点)的最短路径值。 下面就是选择一个最小顶点,并将其移动到中。 一旦被从移动到中,中每个和相邻的顶点的都要更新:表示经由到的一条更短的路径被发现了。 对于任意一个顶点 ,假如我们使用表示源顶点到顶点的最短路径,最后,我们可以证明上述的贪心法结束后有。 三、算法DIJKSTRA 输入:含权有向图G=(V,E), V={1,2,…n} 输出:G中顶点1到其他顶点的距离 1. ;; 2. For y←2 to n If y相邻于1 then Else ; End if 6. end for 7. for j←1 to n-1 8. 令,找到最小 9. X←X∪{y} /*将从移动到中 10 Y←Y-{y} For 每条边{y,w} If w∈Y and +length[y,w] then /*更新 中和相邻顶点的值 endfor 15.end for

文档评论(0)

shit0605 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档