第十六讲 贪心算法.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文档。上传文档
查看更多
第十六讲 贪心算法

贪心算法的基本思想: 适用于求解最优化问题的算法往往包含一系列步骤,每一步都有一组选择; 贪心算法总是作出在当前看来是最好的选择; 贪心算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择; 贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解; 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似; 与动态规划方法相比,贪心算法更简单,更直接。 活动安排问题:设有n个活动的集合E={1,2,…,n}其中每个活动都要求使用同一资源,如报告厅等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si fi; 如果选择了活动i,则它在半开时间区间[si ,fi)内占用资源,若区间[si ,fi)与区间[sj,fj)不相交,则称活动i与活动j是相容的 也就是说,当si ≥fj或sj≥fi时,活动i与活动j相容; 目标:要在所给的活动集合中选出最大的相容活动子集合。 贪心策略求解方案:将活动按照结束时间的增序f1≤ f2 ≤…≤ fn-1排列;一开始选择活动1,然后依次检查后面的活动i是否与前面已选择的活动相容,若相容,则将活动i加入到已选择的活动集合中;若不相容,则继续检查下一活动与已选择活动的相容性;由于活动已按结束时间排序,设刚加入已选择活动集合的活动是j,因此只需检查活动i的是否与j相容;也就是检查是否满足si ≥fj,若满足,则活动i与j相容贪心体现在总是选择具有最早完成时间的相容活动。 设待安排的11个活动的开始时间和结束时间已按结束时间的增序排列: i 1 2 3 4 5 6 7 8 9 10 11 S[i] 1 3 0 5 3 5 6 8 8 2 12 f[i] 4 5 6 7 8 9 10 11 12 13 14 GREEDY-ACTIVITY-SELECTOR(s, f) 1 n ← length[s] 2 A ← {activity 1} 3 j← 1 4 for i ← 2 to n 5 do if si ≥ fj 6 then A ← A ∪ {activity i} 7 j← i 8 return A 复杂度分析:如果已经排序,算法的时间复杂度为Θ(n);如果事先没有按照结束时间增序排列,排序需O(nlgn); 贪心算法可以获得该问题的整体最优解可证明:1.活动安排问题有一个最优解以贪心选择开始;2.做出贪心选择之后,原问题简化为比原问题更小的但与原问题形式相同的子问题。 贪心算法的基本要素:贪心算法通过做一系列的选择来给出某一问题的最优解。它所作出的每一个选择当前状态下的最好选择(局部),即贪心选择;这种贪心选择并不总能产生最优解,但对于一些问题,比如活动安排问题,可以给出最优解; 可以根据下列步骤设计贪心算法:将最优化问题转化为这样的一个问题,即先做出选择,再解决剩下的一个子问题;证明原问题总有一个最优解是做贪心选择得到的,从而说明贪心选择的安全说明在做出贪心选择之后,子问题的最优解与所作出的贪心选择联合起来,可以得出原问题的一个最优解。 许多可以用贪心算法求解的问题,具备以下两个性质:贪心选择性质、最优子结构性质。 贪心选择性质:是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到;这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别; 动态规划算法通常以自底向上的方式解各子问题,贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。 最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质; 问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 0-1背包问题 给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 限制:在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。 背包问题 与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。 0-1背包问题和背包问题的求解分析 这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解;而0-1背包问题却不能用贪心算法求解。 用贪心算法解背包问题的基本步骤: 首先计算每种物品单位重量的价值Vi/Wi; 然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价

文档评论(0)

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

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

1亿VIP精品文档

相关文档