AI产品经理必修:揭开算法的面纱(动态规划).docVIP

AI产品经理必修:揭开算法的面纱(动态规划).doc

  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文档。上传文档
查看更多
AI产品经理必修:揭开算法的面纱(动态规划) / 乔治·桑塔亚纳说过,“那些遗忘过去的人注定要重蹈覆辙。”这句话放在问题求解过程中也同样适用。不懂动态规划的人会在解决过的问题上再次浪费时间,懂的人则会事半功倍。要了解这句话,得从动态规划的含义说起。 一、什么是动态规划? quora上有这样一个问题: How should I explain dynamic programming to a 4-year old?底下有个42K赞同的答案,是这样说的: *writes down “1+1+1+1+1+1+1+1 =” on a sheet of paper*”What’s that equal to?” *counting* “Eight!” *writes down another “1+” on the left* “What about that?” *quickly* “Nine!” “How’d you know it was nine so fast?””You just added one more” “So you didn’t need to recount because you remembered there were eight!DynamicProgramming is just a fancy way to say ‘remembering stuff to save time later” 就不翻译了,相信大家都能看懂。 现在,我们来看一下动态规划的官方定义: 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 按照定义,动态规划的原理是将一个问题分解成子问题,逐渐求解局部最优解并扩展,最终得出全局最优解。但是我觉得的这个不是动态规划的核心思想,或者说,一个”大问题“之所以能用”动态规划解决,并不是因为它能拆解成一堆小问题,而是这些”小问题“会不会被被重复调用。? 这个概念很重要,实际上很多问题都可以拆解成小问题来解决,例如我们之前讲的贪心算法,但这个区别决定了该选取哪种算法 。 二、动态规划能解决什么问题? 如果一个问题满足以下两点,那么它就能用动态规划解决。 (1)问题的答案依赖于问题的规模,也就是问题的所有答案构成了一个数列。举个简单的例子,1人有2条腿,2个人有4条腿,n个人有多少条腿?答案是2n条腿。这里的2n是问题的答案,n则是问题的规模,显然问题的答案是依赖于问题的规模的答案是因变量,问题规模是自变量。因此,问题在所有规模下的答案可以构成一个数列(f(1),f(2)…f(n)),比如刚刚“数腿”的例子就构成了间隔为2的等差数列(0,2.4….2n) 。 (2)大规模问题的答案可以由小规模问题的答案递推得到,还是刚刚“数腿” 的例子,显然f(n)可以甚于f(n-1) 求得: f(n)= f(n-1)+2 三、动态规划的应用? 应用场景:动态规划比较合适的就是来求最优问题的,比如求最大值,最小值等等。它可以显著的降低复杂度,节约计算时间。所有的导航系统都采用了动态规划。 我们就是以导航为例来看看动态规划吧。 比如,我们想找到从北京到广州的最短行车路线或者最快行车路线。当然,最直接的笨办法是把所有可能的路线看一遍,然后找到最优的。 这种办法只有在节点数是个位数的图中还行得通,当图的节点数(城市数目)有几十个的时候,计算的复杂度就已经让人甚至计算机难以接受了,因为所有可能路径的个数随着节点数的增长而成呈指数增长(或者说几何级数),也就是说每增加一个城市,复杂度要大一倍,显然我们的导航系统中不会用这种笨办法。 以上面的问题为例,当我们要找从北京到广州的最短路线时,我们先不妨倒过来想这个问题:假如我们找到了所要的最短路线(称为路线一),如果它经过郑州,那么从北京到郑州的这条子路线(比如是北京- 保定-石家庄-郑州,称为子路线一),必然也是所有从北京到郑州的路线中最短的。 在实际实现算法时,我们又正过来解决这个问题,也就是说,要想找到从北京到广州的最短路线,先要找到从北京到郑州的最短路线。当然,聪明的读者可能已经发现其中的一个”漏洞”,就是我们在还没有找到全程最短路线前,不能肯定它一定经过郑州。不过没有关系,只要我们在图上横切一刀,这一 刀要保证将任何从北京到广州的路一截二,如下图: 那么从广州到北京的最短路径必须经过这一条线上的某个城市(图中蓝色

文档评论(0)

150****6040 + 关注
实名认证
文档贡献者

互联网产品运营推广以及k12教育内容。

1亿VIP精品文档

相关文档