1贪婪算法的思想.ppt

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

贪婪算法 1 贪婪算法的思想 2 可绝对贪婪问题 3 相对贪婪问题 4 问题的复杂性 5 贪婪算法实例 1 贪婪算法的思想 贪婪算法(贪心算法)的根本思想: 1 贪婪算法的思想-例4.1-问题分析 例4.1 币种统计问题 某单位给每个职工发工资(精确到元)。为了保证不要临时兑换零钱,且取款的张数最少,取工资前要统计出所有职工的工资所需各种币值(100,50,20,10,5,2,1元共七种)的张数。请编程完成。 1 贪婪算法的思想-例4.1-算法设计 数据结构 1 贪婪算法的思想-例4.1-算法实现 代码只需完全实现算法; 能否得到最优解由算法决定。 1 贪婪算法的思想-例4.1-不同情况 什么样的问题可以使用贪婪算法策略,并获得最优解? 1 贪婪算法的思想-例4.2 活动安排问题 n个活动E={1,2,..,n},都要求使用同一公共资源(如演讲会场等)。且在同一时间仅一个活动可使用该资源。 i?[si,fi), si为起始时间, fi为结束时间。sifi 活动i和j相容: si=fj或sj =fi 活动安排问题:求最大的相容活动子集合。 ---尽可能多的活动兼容使用公共资源。 1 贪婪算法的思想-例4.2 活动安排问题-算法 1.按结束时间非减序排序:f1=f2 = .. = fn --O(nlogn) 2.从第1个活动开始,按顺序放进集合A。放入活动i当且仅当与集合A中已有元素相容。 --与集合A中最后元素j比较:若si =fj则加入,否则不加入 fj=max k ? A( fk)---集合A中的最大结束时间 void GreedySelector(int n, int s[], int f[],bool A[]) { A[1]=true;// A[i]=true表示已被放入集合 int j=1; for (int i = 2; i =n; i++) -O(n) { if (s[i]=f[j]) { A[i]=true; j=i; } else A[i]=false; } } 1 贪婪算法的思想-例4.2 活动安排问题 规则:选择具有最早结束时间的相容活动加入,使剩余的可安排时间最大,以安排尽可能多的活动。 由于输入的活动以其完成时间的非减序排列,所以算法GreedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。 也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 1 贪婪算法的思想-例4.2 活动安排问题 例:设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下: 例4.2 活动安排问题 算法GreedySelector的计算过程如左图所示。图中每行相应于算法的一次迭代。阴影长条表示的活动是已选入集合A的活动,而空白长条表示的活动是当前正在检查相容性的活动。 1 贪婪算法的思想-例4.2 活动安排问题 若被检查的活动i的开始时间Si小于最近选择的活动j的结束时间fi,则不选择活动i,否则选择活动i加入集合A中。 贪心算法并不总能求得问题的整体最优解。但对于活动安排问题,贪心算法GreedySelector却总能求得的整体最优解,即它最终所确定的相容活动集合A的规模最大。这个结论可以证明。 贪心算法GreedySelector—总能得到整体最优解,即A规模最大。 证明: n个活动E={1,2,..,n},按结束时间非减序排序:f1=f2 = .. = fn。 1.总存在一个最优解以贪心选择开始即包含活动1。 E按结束时间非减序排序,活动1具有最早结束时间。 设A为最优解,A?E,A也按结束时间非减序排序。 设A中第一活动为k,k=1时,显然成立。 k1时,设B=A-{k}?{1},由于f1 =fk,且A中活动互为相容,则B中活动也互为相容。 而B与A中活动个数相同,且A为最优解,则B为最优解。 2. 选择活动1以后,问题变为子问题E’:与活动1相容的活动安排问题。 设A为包含活动1的最优解,则A’=A-{1}为E’的一个最优解。 假如存在E’的一个解B’,|B’||A’|,则|B’ ?{1}|A,与A为最优解矛盾。 由1,2 可知GreedySelector—总能得到整体最优解。 对于一个具体

文档评论(0)

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

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

1亿VIP精品文档

相关文档