贪心算法(文字描述解释).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文档。上传文档
查看更多
贪⼼算法(⽂字描述解释) 贪⼼算法 贪⼼算法(⼜称贪婪算法,greedy algorithm)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上 加以考虑,他所做出的是在某种意义上的局部最优解,⽽不能算是全局最优解。它的性质是⼀种改进了的分级处理⽅法,核⼼是根据题意选 取⼀种量度标准,贪⼼算法在解决问题的时候还要考虑其正确性。 贪⼼算法不是对所有问题都能得到整体最优解,关键是贪⼼策略的选择,选择的贪⼼策略必须具备⽆后效性,即某个状态以前的过程不会 影响以后的状态,只与当前状态有关。 1.贪⼼算法包含两个基本元素: 贪⼼选择 贪⼼选择是指所求问题的整体最优解可以通过⼀系列局部最优的选择,即贪⼼选择来达到。这是贪⼼算法可⾏的第⼀个基本要素,也是贪 ⼼算法与动态规划算法的主要区别。贪⼼选择是采⽤从顶向下、以迭代的⽅法做出相继选择,每做⼀次贪⼼选择就将所求问题简化为⼀个规 模更⼩的⼦问题。对于⼀个具体问题,要确定它是否具有贪⼼选择的性质,我们必须证明每⼀步所作的贪⼼选择最终能得到问题的最优解。 通常可以⾸先证明问题的⼀个整体最优解,是从贪⼼选择开始的,⽽且作了贪⼼选择后,原问题简化为⼀个规模更⼩的类似⼦问题。然后, ⽤数学归纳法证明,通过每⼀步贪⼼选择,最终可得到问题的⼀个整体最优解。 最优⼦结构 当⼀个问题的最优解包含其⼦问题的最优解时,称此问题具有最优⼦结构性质。运⽤贪⼼策略在每⼀次转化时都取得了最优解。问题的最优 ⼦结构性质是该问题可⽤贪⼼算法或动态规划算法求解的关键特征。贪⼼算法的每⼀次操作都对结果产⽣直接影响,⽽动态规划则不是。贪 ⼼算法对每个⼦问题的解决⽅案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进⾏选择,有回退功能。动态规划主要运 ⽤于⼆维或三维问题,⽽贪⼼⼀般是⼀维问题。 2.基本思路 : 思想 贪⼼算法的基本思路是从问题的某⼀个初始解出发⼀步⼀步地进⾏,根据某个优化测度,每⼀步都要确保能获得局部最优解。每⼀步只考 虑⼀个数据,他的选取应该满⾜局部优化的条件。若下⼀个数据和部分最优解连在⼀起不再是可⾏解时,就不把该数据添加到部分解中,直 到把所有数据枚举完,或者不能再添加算法停⽌。 过程 1. 建⽴数学模型来描述问题 ; 2. 把求解的问题分成若⼲个⼦问题; 3. 对每⼀⼦问题求解,得到⼦问题的局部最优解; 4. 把⼦问题的解局部最优解合成原来解问题的⼀个解。 3.贪婪算法可解决的问题通常⼤部分都有如下的特性: 随着算法的进⾏,将积累起其它两个集合 :⼀个包含已经被考虑过并被选出的候选对象,另⼀个包含已经被考虑过但被丢弃的候选对 象。 有⼀个函数来检查⼀个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决⽅法是否最优。 还有⼀个函数检查是否⼀个候选对象的集合是可⾏的,也即是否可能往该集合上添加更多的候选对象以获得⼀个解。和上⼀个函数⼀ 样,此时不考虑解决⽅法的最优性。 选择函数可以指出哪⼀个剩余的候选对象最有希望构成问题的解。 最后, ⽬标函数给出解的值。 为了解决问题,需要寻找⼀个构成解的候选对象集合,它可以优化⽬标函数,贪婪算法⼀步⼀步的进⾏。起初,算法选出的候选对象的 集合为空。接下来的每⼀步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。如果集合中加上该对象后不可⾏, 那么该对象就被丢弃并不再考虑 ;否则就加到集合⾥。每⼀次都扩充集合,并检查该集合是否构成解。如果贪婪算法正确⼯作,那么找 到的第⼀个解通常是最优的。 4.使⽤贪⼼算法的前提: 原问题复杂度过⾼; 求全局最优解的数学模型难以建⽴; 求全局最优解的计算量过⼤; 没有太⼤必要⼀定要求出全局最优解,“⽐较优”就可以。 5.什么样的问题可以使⽤贪⼼算法 同质⼦结构:每次做完选择后,⾯对的还是同样的问题; 最优⼦结构:⼀个问题的最优解包含其⼦问题的最优解; 贪⼼选择:每次都贪⼼选择后,最后可以得到整体最优解。 6.如何把原问题分解成⼦问题 按串⾏任务分 时间串⾏的任务,按⼦任务来分解,即每⼀步都是在前⼀步的基础上再选择当前的最优解。 按规模递减分 规模较⼤的复杂问题,可以借助递归思想(见第2课),分解成⼀个规模⼩⼀点点的问题,循环解决,当最后⼀步的求解完成后就得到了所 谓的“全局最优解”。 按并⾏任务分 这种问题的任务不分先后,可能是并⾏的,可以分别求解后,再按⼀定的规则 (⽐如某种

文档评论(0)

掌心教学资料库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档