网站大量收购独家精品文档,联系QQ:2885784924

[数学]152 贪心算法.ppt

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

《计算概论A》C++程序设计 贪心算法 崔 斌 什么是贪心法 找硬币的例子 假设有四种硬币,面值分别为二角五分、一角、五分和一分。现在要找给顾客六角三分钱。 如何使找给顾客的硬币数最少? 方案:2个二角五分,1个一角和3个一分。 背后的想法:每次都首先选择面值最大的硬币,如果剩余钱不够再选择面值次大的硬币…… ------贪心法的思想 背包问题: 给定n种物品和一个背包,设Wi为物体i的重量,Vi为期价值,C为背包的承重量。要求在背包的承重量的限制下,进可能使背包中物品的价值最大。 贪心策略一:每次选择价值最大的物品。 贪心策略二:每次选择重量最小的物品。 贪心策略三:每次选择Vi/Wi最大的物品 什么是贪心法? “鼠目寸光”的方法?每次选择面值最大的硬币还是能得到正确结果的 贪心法在求解问题时,每一步选择的都是当前看来最好的选择;贪心法的关键是决定每一步该怎么做。每次都试图选择面值最大的硬币 通过一系列小的步骤构成一个解,在每一步根据局部情况作出最优策略,构成问题的最优解把每一步选择的最大面值的硬币交给客户就是硬币总个数最少的方案 一:事件序列问题 问题的描述 已知N = 12个事件的开始时刻和结束时刻,一些在时间上没有重叠的事件可以构成一个事件序列,事件序列包含的事件数目称为事件序列的长度。 要求找出一个最长的事件序列。 贪心策略一:每一步选择最早开始事件? 贪心策略二:每一步选择最短事件? 把所有的事件按结束时间由小到大排序,每一步选择结束时间最早的事件,并且和所选事件不重叠 不重叠: a事件的结束时刻小于等于b 事件的开始时刻 end[a] = begin[b] 这时a事件和b事件不重叠,即为a b begin[N],end[N] select[N]记录其它被选中的事件, 0为选,1选中 select[0]=1;无条件选择第一个事件 如何做到不重叠? begin[i] = 上一个事件结束的时间 上一个事件结束的时间 = end[i-1] begin[i] start_time; select[i] = 1; start_time = end[i]; #include iostream using namespace std; const int N = 12; void OutputResult(int select[], int N) //输出结果函数 { for(int i = 0; i N; i++) { if(select[i] == 1) //当标记为1时该事件被选中 cout i endl; } } int main() { int begin[N] = {1, 3, 0, 3, 2, 5, 6, 4, 10, 8, 15, 15}; //开始时间 int end[N] = {3, 4, 7, 8, 9, 10, 12, 14, 15, 18, 19, 20}; //结束时间 int select[N] = {0}; //标记选取哪些事件 int i = 0; //当前最早结束的事件 int time_start = 0; //当前情况下可选事件的最早开始事件 while(i N) //每次选择结束时间最早的事件 { if(begin[i] = time_start) //时间不重叠 { select[i] = 1; //选择事件i time_start = end[i]; //更新后面事件的最早开始时间 } i++; } OutputResult(select, N); //输出被选择事件 return 0; } 小结 1 贪心法的解题步骤 从问题的某个初始条件出发 事件序列初始为空,第

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档