ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:30.24KB ,
资源ID:14148425      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14148425.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪心算法学习总结Word文档下载推荐.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪心算法学习总结Word文档下载推荐.docx

1、ABCDEFG重量wi35306050401025价值pi35分析:目标函数: pi最大约束条件是装入的物品总重量不超过背包容量:wi=fj thenbegin a ai;j:=i;endend;例1 找零钱 一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩.假设提供了数目不限的面值为2 5美分、1 0美分、5美分、及1美分的硬币。售货员分步骤组成要找的零钱数,每次加入一个硬币。选择硬币时所采用的贪婪准则如下:每一次选择应使零钱数尽量增大。为保证解法的可行性(即:所给的零钱等于要找的零钱数),所选择的硬币不应使零钱总数超过最终所需的数目。 假设需要找

2、给小孩6 7美分,首先入选的是两枚2 5美分的硬币,第三枚入选的不能是2 5美分的硬币,否则硬币的选择将不可行(零钱总数超过6 7美分),第三枚应选择1 0美分的硬币,然后是5美分的,最后加入两个1美分的硬币. 贪婪算法有种直觉的倾向,在找零钱时,直觉告诉我们应使找出的硬币数目最少(至少是接近最少的数目)。可以证明采用上述贪婪算法找零钱时所用的硬币数目的确最少(见练习1)。例2 机器调度 现有n 件任务和无限多台的机器,任务可以在机器上得到处理。每件任务的开始时间为si,完成时间为fi ,si fi .si , fi 为处理任务i 的时间范围.两个任务i,j 重指两个任务的时间范围区间有重叠,

3、而并非是指i,j 的起点或终点重合。例如:区间 1,4 与区间 2,4 重叠,而与区间 4,7 不重叠。一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器.因此,在可行的分配中每台机器在任何时刻最多只处理一个任务.最优分配是指使用的机器最少的可行分配方案。假设有n= 7件任务,标号为a 到g。它们的开始与完成时间如图131a 所示.若将任务a分给机器M1,任务b 分给机器M2,。 。 .,任务g 分给机器M7,这种分配是可行的分配,共使用了七台机器.但它不是最优分配,因为有其他分配方案可使利用的机器数目更少,例如:可以将任务a、b、d分配给同一台机器,则机器的数目降为五台。一种获

4、得最优分配的贪婪方法是逐步分配任务.每步分配一件任务,且按任务开始时间的非递减次序进行分配。若已经至少有一件任务分配给某台机器,则称这台机器是旧的;若机器非旧,则它是新的。在选择机器时,采用以下贪婪准则:根据欲分配任务的开始时间,若此时有旧的机器可用,则将任务分给旧的机器。否则,将任务分配给一台新的机器。根据例子中的数据,贪婪算法共分为n = 7步,任务分配的顺序为a、f、b、c、g、e、d。第一步没有旧机器,因此将a 分配给一台新机器(比如M1).这台机器在0到2时刻处于忙状态。在第二步,考虑任务f。由于当f 启动时旧机器仍处于忙状态,因此将f 分配给一台新机器(设为M2 ).第三步考虑任务

5、b, 由于旧机器M1在Sb = 3时刻已处于闲状态,因此将b分配给M1执行,M1下一次可用时刻变成fb = 7,M2的可用时刻变成ff = 5。第四步,考虑任务c。由于没有旧机器在Sc = 4时刻可用,因此将c 分配给一台新机器(M3),这台机器下一次可用时间为fc = 7。第五步考虑任务g,将其分配给机器M2,第六步将任务e 分配给机器M1, 最后在第七步,任务2分配给机器M3。(注意:任务d 也可分配给机器M2)。上述贪婪算法能导致最优机器分配的证明留作练习(练习7)。可按如下方式实现一个复杂性为O (nl o gn)的贪婪算法:首先采用一个复杂性为O (nl o gn)的排序算法(如堆排

6、序)按Si 的递增次序排列各个任务,然后使用一个关于旧机器可用时间的最小堆。例3 最短路径 给出一个有向网络,路径的长度定义为路径所经过的各边的耗费之和.要求找一条从初始顶点s 到达目的顶点d 的最短路径。贪婪算法分步构造这条路径,每一步在路径中加入一个顶点。假设当前路径已到达顶点q, 且顶点q 并不是目的顶点d.加入下一个顶点所采用的贪婪准则为:选择离q 最近且目前不在路径中的顶点。这种贪婪算法并不一定能获得最短路径。例如,假设在图1 3 2中希望构造从顶点1到顶点5的最短路径,利用上述贪婪算法,从顶点1开始并寻找目前不在路径中的离顶点1最近的顶点。到达顶点3,长度仅为2个单位,从顶点3可以

7、到达的最近顶点为4,从顶点4到达顶点2,最后到达目的顶点5。所建立的路径为1 , 3 , 4 , 2 , 5,其长度为1 0。这条路径并不是有向图中从1到5的最短路径。事实上,有几条更短的路径存在,例如路径1,4,5的长度为6. 根据上面三个例子,回想一下前几章所考察的一些应用,其中有几种算法也是贪婪算法。例如,霍夫曼树算法,利用n 1步来建立最小加权外部路径的二叉树,每一步都将两棵二叉树合并为一棵,算法中所使用的贪婪准则为:从可用的二叉树中选出权重最小的两棵.L P T调度规则也是一种贪婪算法,它用n 步来调度n 个作业。首先将作业按时间长短排序,然后在每一步中为一个任务分配一台机器。选择机

8、器所利用的贪婪准则为:使目前的调度时间最短。将新作业调度到最先完成的机器上(即最先空闲的机器)。注意到在机器调度问题中,贪婪算法并不能保证最优,然而,那是一种直觉的倾向且一般情况下结果总是非常接近最优值。它利用的规则就是在实际环境中希望人工机器调度所采用的规则。算法并不保证得到最优结果,但通常所得结果与最优解相差无几,这种算法也称为启发式方法( h e u r i s t i c s )。因此L P T方法是一种启发式机器调度方法。定理9 2陈述了L P T调度的完成时间与最佳调度的完成时间之间的关系,因此L P T启发式方法具有限定性 能( bounded performance )。具有限

9、定性能的启发式方法称为近似算法( a p p r o x i m a t i o na l g o r i t h m)。本章的其余部分将介绍几种贪婪算法的应用。在有些应用中,贪婪算法所产生的结果总是最优的解决方案。但对其他一些应用,生成的算法只是一种启发式方法,可能是也可能不是近似算法。练习 1。 证明找零钱问题(例1 3 4)的贪婪算法总能产生具有最少硬币数的零钱。2. 考虑例1 3 4的找零钱问题,假设售货员只有有限的2 5美分, 1 0美分, 5美分和1美分的硬币,给出一种找零钱的贪婪算法.这种方法总能找出具有最少硬币数的零钱吗?证明结论。3。 扩充例1 3 4的算法,假定售货员除硬币

10、外还有50, 20, 10, 5, 和1美元的纸币,顾客买价格为x 美元和y 美分的商品时所付的款为u 美元和v 美分。算法总能找出具有最少纸币与硬币数目的零钱吗?证明结论. 4. 编写一个C + +程序实现例1 3 - 4的找零钱算法。假设售货员具有面值为1 0 0,2 0,1 0,5和1美元的纸币和各种硬币.程序可包括输入模块(即输入所买商品的价格及顾客所付的钱数),输出模块(输出零钱的数目及要找的各种货币的数目)和计算模块(计算怎样给出零钱)。5。 假设某个国家所使用硬币的币值为1 4 , 2 , 5和1分,则例1 3 4的贪婪算法总能产生具有最少硬币数的零钱吗?6。 1) 证明例1 3 5的贪婪算法总能找到最优任务分配方案. 2) 实现这种算法,使其复杂性为O (nl o gn)(提示:根据完成时间建立最小

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1