动态规划
参考链接
DP
动态规划是一种分阶段求解决策问题的数学思想
题目一
问:下楼梯问题,有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,请问有多少中走法。
思路
刚才这个题目,你每走一步就有两种走法,暂时不管0级到8级台阶的过程。想要走到10级,必然是从8级或者9级走的。那么问题来了,如果我们以及0到9级台阶的走法有x种,0到8级台阶有Y种,那0到10级台阶就是X+Y。

公式就是:
F(10) = F(9)+ F(8)
当只有1级台阶的时候只有一种解法,2级台阶的时候有两种方法。
递推公式就是:
F(1) = 1
F(2) = 2
F(N) = F(N-1)+ F(N-2)
动态规划的三个概念:
- 最优子结构
- 边界
- 状态转移公式

当只有1级台阶或2级台阶,我们直接得出结果,无需建华,我们就成F(1)F(2)为边界。
F(N) = F(N-1)+ F(N-2)是阶段与阶段之间的状态转移公式。
求解问题
方法一:递归法

但是复杂度很高,因为当中有很多大量的重复计算。复杂度 O ( 2 N ) O(2^N) O(2N)。具体分析见开头的链接。
遇到这种情况,我们只需要创建一个哈希表,在python种建立一个字典就好了。把每次不同参数的计算结果存入哈希,当遇到相同参数时,再从哈希表里面取出,就不会重复计算了。
方法二

感觉红色箭头少了个参数。
在以上代码中,集合map是一个备忘录。当每次需要计算F(N)的时候,会首先从map中寻找匹配元素。如果map中存在,就直接返回结果,如果map中不存在,就计算出结果,存入备忘录中


其实不用对F(N)自顶向下做递归运算,可以从下往上算。已知1,2是不是就能求3了。以此类推。


题目二
国王和金矿
问:有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也

本文深入解析动态规划原理,涵盖下楼梯问题与国王金矿问题,介绍递归法、备忘录算法及动态规划方法,对比不同算法的时间与空间复杂度。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



