《第四讲贪心方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《第四讲贪心方法

第四讲 贪心方法 1. 一般方法 在现实世界中,有这样一类问题:它有n个输入,而它的解就由这n个输入的某个子集组成,不过这个子集必须满足某些事先给定的条件。把那些必须满足的条件称为约束条件;而把满足约束条件的子集称为该问题的可行解。显然,满足约束条件的子集可能不止一个,因此,一般来说可行解不是唯一的。为了衡量可行解的优劣,事先也给出了一定的标准,这些标准一般以函数形式给出,这些函数称为目标函数。那些使目标函数取极值(极大或极小)的可行解,称为最优解。这一类需求取最优解的问题,又可根据描述约束条件和目标函数的数学模型的特性或求解问题方法的不同,进一步划分为线性规划、整数规划、非线性规划、动态规划等问题。尽管各类规划问题都有一些相应的求解方法,但其中的某些问题,还可用一种更直接的方法来求解,这种方法就是贪心方法(贪婪法)。 贪心方法是一种改进了的分级处理方法。它首先根据题意,选取一种量度标准。然后按这种量度标准对这n个输入排序,并按次序每次输入一个输入量。如果该输入和当前已构成在这种量度意义下的部分最优解组合在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下的最优解的分级处理方法称为贪心方法。要注意的是,对于一个给定的问题,往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的。但实际上,在贪心处理中,利用量度标准中的大多标准所得到的该量度意义下的最优解往往不是问题的最优解,而是次优解。尤其值得指出的是,把目标函数作为量度标准所得到的解也不一定是问题的最优解。因此,选择能产生问题最优解的最优量度标准是使用贪心法设计求解的核心问题。在一般情况下,要选出最优量度标准并不是一件容易的事,不过,一旦能选择出某个问题的最优量度标准,那么用贪心方法求解这个问题则特别有效。 贪心方法可以用下面的抽象化控制来描述。 算法1.1 贪心方法的抽象化控制 void Greedy(a[],n) { //A(1:n)包含n个输入 solution = Φ //将解向量solution初始化为空 for(j=1;j=n;++j) { x = Select(a[]); if Feasible(solution,x) {solution=union(solution,x);} };//for return solution; }// Greedy 函数Select的功能是按某种最优量度标准从A(1:n)中选择一个输入,把它的值赋给x并从A中消去它。Feasible是一个布尔函数,它判定x是否可以包含在解向量中。union将x与解向量结合并修改目标函数。过程Greedy描述了用贪心策略设计算法的主要工作和基本控制路线。一旦给出一个特定的问题,就可将Select,Feasible和Union具体化并付诸实现。 2. 背包问题 本节介绍使用贪心设计策略来解决更复杂的问题——背包问题。背包问题的描述如下: 已知有n种物品和一个可容纳m重量的背包,每种物品i的重量为wi。假定将物品i的一部分xi放人背包就会得到pixi的效益,0≤xi≤1,pi>0。采用怎样的装包方法才会使装入背包物品的总效益最大呢?显然,由于背包容量是m,因此,要求所有选中要装入背包的物品总重量不超过m。如果这n件物品的总重量不超过m,则把所有物品装入背包自然获得最大效益。如果这些物品重量的和大于m,则在这种情况下该如何装包呢?这是本节所要解决的问题。根据以上讨论,可将问题形式描述如下: 极大化 Σpixi (4.1) 1≤i≤n 约束条件 Σwixi ≤m (4.2) 1≤i≤n 0≤xi≤1,pi>0,wi>0,1≤i≤n (4.3) 其中,(4.1)式是目标函数,(4.2)和(4.3)是约束条件。满足约束条件的任一集合(x1,…,xn)是一个可行解(即能装下),使目标函数取最大值的可行解是最优解。 例2.1 考虑下面的背包问题。n=3,m=20,(pl,p2,p3)=(25,24,15),(w1,w2,w3)=(18,15,10)。 表2.1 例2.1问题的四个可行解 序号 (x1,x2,x3) Σwixi 1≤i≤n Σpixi 1≤i≤n ① (1/2,1/3,1/4) 16.5 24.25 ② (1,2/15,0) 20 28.2 ③ (0,2/3,1) 20 31 ④ (0,1,1/2) 20 31.5 在这四个可行解中,第④个解的效益值最大。下面将看到,该解是背包问题在这一情况下

文档评论(0)

shit0605 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档