第六部分贪心策略.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分析 如果有6?6的盒子,则将它放入箱子,这个箱子就满了,该过程直到6?6的盒子全部装箱为止,不会浪费; 如果有5?5的盒子,则将它放入箱子,这个箱子还有空余,可以放入尽可能多的1?1盒子;这个过程的结束条件是5?5的盒子全部装箱,并且1?1的盒子全部装箱或者箱子全部装满; 如果有4?4的盒子,箱子中的剩余空间可以放2?2的盒子,如果还有剩余,则放1?1的盒子;这个过程直到4?4的盒子全部装箱,并且剩余空间被充分利用; 3*3可以放4个,则最后剩下0,1,2,3个 只剩2*2时直接计算 1*1:“见缝插针”最后放 简而言之就是每次找出最大的盒子放入当前的箱子,直到无法再放;再拿一个空箱继续这一过程,直到所有的盒子都被装箱。解决这一类问题我们通常采用贪心算法。 设要装下a1个1?1的盒子,a2个2?2的盒子,……,a6个6?6的盒子需要的箱子数为f(a1,a2,a3,a4,a5,a6)个。 扩展2:(2011重庆省选) 首先最终每个人的金币数量可以计算出来,接下来用M来表示每个人最终拥有的金币数。 现在假设编号为 i 的人初始有Ai 枚金币,对于1号来说,他给了4号x1枚金币,还剩Ai -x1枚金币;但是2号给了他x2枚金币,所以还剩A1-x1+x2枚金币。所以A1-x1+x2=M。同理对于第2个人,有A2-x2+x3=M。最终得到n个方程,实际上只有n-1个有用。 尝试用x1表示出其他的xi ,则本题就变成了单变量的极值问题。 对于第1个人,A1-x1+x2=M → x2=M-A1+x1=x1-C1(规定C1=A1-M,下面类似) 对于第2个人,A2-x2+x3=M → x3=M-A2+x2=M-A2+x1-C1=x1-(C1+A2-M)=x1-C2 对于第3个人,A3-x3+x4=M → x4=M-A3+x3=M-A3+x1-C2=x1-(C2+A3-M)=x1-C3   …… 对于第n个人,An-xn+x1=M。这是一个多余的等式。 其中:Ci=Ci-1+Ai-M 我们希望所有xi 的绝对值之和尽量小,即|x1|+|x1-C1|+|x1-C2|+...+|x1-Cn-1|要最小。 注意到|x1-Ci|的几何意义是数轴上的点x1到Ci 的距离,所以问题变成了:给定数轴上n个点,找出一个到他们距离之和尽量小的点。而这个点就是中位数 。 (一)、三个区间上的问题 例题5:活动安排 分析:所有活动有一个起始时间和结束时间,将它们映射到X轴上,最早的起始时间和最晚的结束时间可以构成X轴上最小的坐标点Xmin和最大的坐标点Xmax。对应的任务,就是在X轴上的Xmin到Xmax之间选择最多不相交的线段,活动的起始和结束时间构成构成线段。 由此,可以选择一种贪心策略,将每个活动的结束时间从小到大排序,每次选择最早的结束时间fi,使得剩下的Xmax- fi最大化,这样每次剩下的能选择更多的不相交的活动。 主要程序段: i:=1; for j:=2 to n do if f[i]=s[j] then begin inc(count); i:=j; end; 例题8:喷水装置 算出这个草地的斜边长度, 然后只要全部圆的半径合大于等于这个斜边长度的一半就可以了(但是必须丢弃半径小于等于1的装置,在横中线上无论怎么放,它是无法完全覆盖草地的)。 如图 x = sqrt(r*r-(h/2)*(h/2)), ?这样半径为r的圆能够覆盖的长度为2x, 题目马上转变成区间覆盖问题了。 (二)、两个调度问题 分析 分析 若只有一个作业(a1,b1),明显时间为a1+b1; 若有两个作业(a1,b1),(a2,b2); 若(a1,b1)在前,则有时间T12=a1+b1+a2+b2-min(a2,b1); 若(a2,b2)在前,则有时间T21=a2+b2+a1+b1-min(b2,a1); 由上可得时间为Tmin=a1+b1+a2+b2-max{min(a2,b1),min(a1,b2)}; 由此我们可以得到一个贪心的性质,(ai,bi)和(ai+1,bi+1)中的元素若min(ai+1,bi)=min(ai,bi+1)则(ai,bi)放在(ai+1,bi+1)前面;反之(ai+1,bi+1)放在(ai,bi)前面; 分析 Johnson算法:设N1为ab的作业集合,N2为a=b的作业集合,将N1的作业按a非减序排序,N2中的作业按b非摘译排序,则N1作业接N2作业构成最优顺序。 【样例输入】 6 3 4 6 7 1 3 2 5 5 6 4 7 【样例输出】4 按照b[i]从小到大排序后的结果为: 1 3 3 4 2 5 5 6 4 7 6 7 选择的区间为:

文档评论(0)

勤能补拙 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档