2020年 05月 10日 星期日

欢迎您访问昆山市永乐国际金属表面处理有限公司网站

设为首页加入收藏企业邮箱




联系我们永乐国际

+MORE

昆山市永乐国际金属表面处理有限公司
联系人:张傲弟 13906266375
电话:0512-57772596 57757196 
传真:0512-57772735 

地址:昆山市高新区中环路88号

动态规划-如何推导出状态转移方程?

作者:永乐国际 来源:永乐国际 日期:2020-05-10 17:52 人气:

  今天学习了《程序员的数据基础课》中的动态规划小节。如果你觉得这个课程对你有,请通过分享一个IT专属的数学课,让这个冬天不太冷下方的链接购买,加我微信 somenzz,返你 12 元红包,降低你的学习成本。

  在递归的时候,我们可以通过不断地分解问题,将复杂的任务简化为最基本的小问题,比如基于递归实现的归并排序,排列,组合等。不过有时候,我们并不用处理所有可能的情况,只要找到满足条件的最优解就可以了,这种情况下,我们需要在各种可能的局部解中,找出那些可能达到最优的局部解,而放弃其他的局部解,这个寻找最优解的过程叫动态规划。

  首先,如果一个问题有多种可能,看上去需要排列或者组合的思想,但是最终求的只是最优解,如最大值,最小值,最短子串,最长子串等,可以试试使用动态规划。

  其实,状态转移方程是个关键。你可以用状态转移表来帮助自己理解整个过程。如果能找到准确的转移方程,那么离最终的代码实现也就不远了 。

  这里说下什么是状态转移方程:从上一个状态到下一个状态之间可能存在一些变化,以及基于这些变化的最终决策结果。我们把这样的表达式称为状态转移方程。所有的动态规划算法中,状态转移是关键。

  一般会优先想到这样的方法:优先使用大面额的,不够的话再用次大面额的,直到凑成 100 块。100 除以 7 = 14 余数为 2 ,正好再用一张 2 的面额就可以了,也就是说最低 15 张。这属于算法,今天先不讲。

  如果分析到这里,你可能会想到递归是一种解决思,没错,但递归从大到小的分解其实保留了每一步的结果,并没有非最优解,效率并不高。

  其中,c[i] 表示总额为 i 的时候,所需要的最少钱币数,其中 j=1,2,3,…,n,表示 n 种面额的钱币,value[j] 表示第 j 种钱币的面额。c[i - values(j)] 表示选择第 j 种钱币的时候,上一步为止最少的钱币数。需要注意的是,i - value(j) 需要大于等于 0,而且 c[0] = 0。

  动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...

  回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...

  栈 1. 栈(stack)又名堆栈,它是一种运算受限的线性表。其是仅允许在表的一端进行插入和删除运算。这一端被...

  在理解动态规划、BFS和DFS一文中,只是初步了一下动态规划,理解的并不到位,这里再加深理解一下。 本文主要参...

  本文翻译自TopCoder上的一篇文章: Dynamic Programming: From novice to ...



联系人:张先生 13906266375 电话:0512-57772596 57757196 传真:0512-57772735 邮箱:jinchang@ksjinchang.net
版权所有:昆山市锦昌金属表面处理有限公司 地址:昆山市高新区中环路88号 网站地图  苏ICP备07016350号-1