计算机算法设计与分析第三章第四章.ppt

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

背包问题实例 考虑下列情况的背包问题 n=3,M=20,(p1,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10) 其中的4个可行解是: 贪心方法的数据选择策略(1) 用贪心策略求解背包问题时,首先要选出最优的度量标准。可以选取目标函数为量度标准,每装入一件物品就使背包获得最大可能的效益值增量。在这种量度标准下的贪心方法就是按效益值的非增次序将物品一件件放到背包中。 如上面的实例所示,可将物品按效益量非增次序排序: (p1,p2,p3)=(25,24,15)。先装入物品1重量为18,即x1=1;然后再装物品2,由于约束条为∑wi xi ≤M=20,所以物品2只能装入重量为2的一小部分,即x2=2/15。 贪心方法的数据选择策略(2) 按上述的数据选择策略,装入顺序是按照物品的效益值从大到小的输入,由刚才的方法可得这种情况下的总效益值为∑pixi = 25+24*2/15=28.2,显然是一个次优解,原因是背包容量消耗过快。 2. 若以容量作为量度,可让背包容量尽可能慢地被消耗。这就要求按物品重量的非降次序来把物品放入背包,即(w3,w2,w1)=(10,15,18)。 贪心方法的数据选择策略(2) 先装入物品3, x3=1, p3x3 =15,再装入重量为10的物品2, ∑pixi =15+24*10/15=31。 由刚才的方法可得这种情况下的总效益值为31,仍是一个次优解,原因是容量在漫漫消耗的过程中,效益值却没有迅速的增加。 贪心方法的数据选择策略(3) 3. 采用在效益值的增长速率和容量的消耗速率之间取得平衡的量度标准。即每一次装入的物品应使它占用的每一单位容量获得当前最大的单位效益。这就需使物品的装入次序按pi/wi比值的非增次序来考虑。 这种策略下的量度是已装入物品的累计效益值与所用容量之比。(p2/w2 , p3/w3 , p1/w1 )=(24/15,15/10,25/18)。先装入重量为15的物品2,在装入重量为5的物品3, ∑pixi =24+15*5/10=31.5。此结果为最优解。 思考题 0/1背包问题:在杂货店比赛中你获得了第一名,奖品是一车免费杂货。店中有n 种不同的货物。规则规定从每种货物中最多只能拿一件,车子的容量为c,物品i 需占用wi 的空间,价值为pi。你的目标是使车中装载的物品价值最大。当然,所装货物不能超过车的容量,且同一种物品不得拿走多件。如何选择量度标准才能找到最优解? 若n=2, w=[100,10,10],p=[20,15,15],c=105。利用价值贪心准则时所得结果是否是? 思考题 找零钱问题:一个小孩买了价值为33美分的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为25美分、10美分、5美分、及1美分的硬币。使用贪心算法求解最优结果。并证明找零钱问题的贪心算法总能产生具有最少硬币数的零钱。 考虑假设售货员只有数目有限的25美分,10美分,5美分和1美分的硬币,给出一种找零钱的贪心算法。 已知一个n 结点的有向图G=(V,E)和边的权函数c(e),求由G中某指定结点v0到其他各个结点的最短路径。 产生最短路径的贪心方法 逐条构造这些最短路径,使用迄今已生成的所有路径长度之和作为一种量度标准。 为了使这一量度达到最小,其单独的每一条路径都必须具有最小长度。 使用这标准时,假定已构造了i条最短路径,则下面要构造的路径应该是下一条最短的最小长度路径。 生成从v0到所有其它结点的最短路径的贪心方法就是按照路径长度的非降次序生成这些路径。 产生最短路径的贪心方法 设S表示对其已经生成了最短路径的那些结点(包括v0)的集合。 对于不在S中的结点w,设DIST(w)是从v0开始只经过S中的结点而在结点w结束的那条最短路径的长度,则有: 如果下一条最短路径是到结点u,则这条路径是从v0处开始而在u处终止,并且只通过那些在S中的结点。 所生成的下一条路径的终点u必定是所有不在S内的结点中具有最小距离DIST(u)的结点。 产生最短路径的贪心方法 选出了结点u并生成了从v0到u的最短路径之后,结点u就成为S中的一个成员。 此时,那些从v0开始,只通过S中的结点并且在S外的结点w处结束的最短路径可能会减小。 如果长度改变了,则它必定是由一条从v0开始,经过u然后到w的更短路径所造成的。 其中从v0到u的路径是一条最短路径,从u到w的路径是边u,w,于是这条路径的长度就是:DIST(u)+c(u,w) 算法实例 求下图中v1到其余各结点的最短路径 算法实例 货郎担问题实例 邮路问题 在一条装配线上用一个机械手取紧固待装配部件上的螺帽问题 产品的生产安排问题 …… 设有路程长度为L公里的公路上,分布着M个加油站,而汽车油

文档评论(0)

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

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

1亿VIP精品文档

相关文档