穷举法、贪心法、分枝限界法.pdfVIP

  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的城市为始发城市,那么就会有4 !=24个不同的路线,我们只要列举出每一条路线并分 别计算出相应的费用即可。从中就可以找出最小费用及对应的路线。 (三)算法复杂度:O(n!) (四)算法评价 优点:可得到精确值。当n较小时,是可行的; 缺点:较笨拙,由于须列举所有情况,且记录下每次的情况,需要大量的机时和内存空间。当n较大 时,该算法是不可行性的。 二、贪心法 贪心法是一种对某些求最优解问题的更简单、更迅速的设计方法。 (一)引言 在给出贪心法的具体定义和算法步骤之前,我们先来看两个例子。 例1 假设有4种硬币,它们的面值分别为1角、5分、2分和1分。现要找给某顾客3角7分钱,这时,我们 几乎不假思索地拿出3个l角、1个5分和1个2分的硬币交给顾客。我们不仅能很快决定要拿哪些硬币,而 且与其它找法相比.我们拿出的硬币的个数肯定是最少的。 在这里,我们实际使用了这样的算法:首先选出一个面值不超过3角7分的最大硬币(1角) ,然后从3角7分 中减去1角,剩下2角7分再选出一个不超过2角7分的最大硬币(另一个1角) ,如此做下去,直到找足3角7 分。 例2 如图1—1,其中,顶点可解释为城市,边上的代价可解释为两城市问的里程。在图中找一条经过所 有结点一次的回路,并使里程的总和为最小。这同样还是货郎担问题。在解此题时,我们可以按这样一 个想法去做: 首先在图中选一条代价最小的边。为了选择下一条边,先要检查一下候选边与已选入的边之间是否满足 以下两点: 1)不会有三条边(候选边及已入选边)与同一顶点相关联。 2)不会使入选边形成回路,除非入选边的个数已等于图中的顶点总数。 在满足以上两点的候选边中,挑选最短的边作为入选边。如此做下去,直到得到一个经过所有顶点的回 路。 图1-1 最后求得的回路是1—2—5—3—4—1,代价是14。实际图1—1最小代价的回 路是1—2—5—4—3一1,代价是10。 在这两个例子中,我们使用的方法就是贪心法。 (二)问题的定义 事实上,贪心法是我们经常自觉使用的一种方法。下面我们从一般意义上再来认识一下贪心法。在现实 世界中,有这样的一类问题,它有n个输入,而它的解由这n个输入的某个子集组成,只是这个子集必须 满足某些事先给定的条件。我们把那些必须满足的条件称为约束条件,而把满足约束条件的子集称为该 问题的可行解。显然,满足约束条件的子集可能不止一个,因此,可行解一般来说是不唯一的。为了衡 量可行解的优劣,事先也给出了一定的标准。这些标准一般以函数形式给出,这些函数称为目标函数。 那些使目标函数取极值(极大或极小)的可行解,称为最优解。对于这一类需求最优解的问题,又可以根 据描述约束条件和目标函数的数学模型的特性或求解问题方法的不同进而细分为线性规划、整数规划、 非线性规划和动态规划等问题。尽管各类规划问题都有求解本类问题的一些基本方法,但对于其中的某 些问题,则可用一种更直接的方法来设计求解,这种方法就是贪心法。 (三)算法思想 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某 一步不能再继续前进时,算法停止,得到问题的一个解。 (四)实现该算法的过程 贪心法是一种改进了的分级处理方法。它首先根据题意,选取一种量度标淮。然后将这n个输入排成这 种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下 的部分最优解加在一起不能产生一个可行解,则不把此输入加到这部分解中。要注意的是,对于一个给 定的问题。往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的。但实际上,用其中 的大多数量度标准作贪心处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。尤其值 得指出的是,把目标函数作为量度标准所得到的解也不一定是问题的最优解。因此,选择能产生问题最 优解的最优量度标准是使用贪心法的核心问题。在一般情况下,要选出最优量度标准并不是一件容易的 事,不过,一旦对某问题能选择出最优量度标准。用贪心法求解则特别有效。贪心法可以用下面的抽象 过程来描述。 Procedure Greedy (A ,n) ; {A[1...n]包含n个输入} begin solution {将解向量solut

文档评论(0)

137****3135 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档