只看楼主 #每日一题#-基础-044使用最小花费爬楼梯
-
阅读:543 回复:7 2022-04-14 08:45:55
-
2022-04-14 09:03:05
-
题解:
2022-04-14 15:19:21
-
2022-04-15 08:20:10
-
2022-04-15 08:20:23
-
2022-04-15 08:20:41
-
2022-04-15 08:21:05
-
这是一个不属于动态规划的递归实现:
为什么不属于动态规划呢?因为在上面的这个算法中,如果我4-1做过第3级台阶,已经有第3级台阶的最小状态了,当递归到5-2的时候找到第3级台阶还是会继续往下搜,搜到边界值(0或1)为止,那就会重复计算了。
我们再来思考动态规划的定义:对于之前的状态不需要重复计算。所以只要用一个列表,在第一次算过第3级台阶的时候,就把它的最小花费存储下来就可以了。因为我们的递归是自顶向下搜索、自底向上回溯的,所以当第i级台阶已经被赋值过一次时,就证明这是之前已经的状态了。
我们来看使用动态规划能节省多少时间:
这是图1的算法执行10000次的时间:
这是动态规划的算法执行10000次的时间:
差了近乎100倍,这还是在数据量仅仅是10的情况下。所以说动态规划是一个非常精妙的优化算法。
这是动态规划的递归实现:
2022-04-15 09:53:34