漫画:什么是动态规划?(整合版)

    科技2022-09-06  123

     

     

     

     

     

     

     

     

    ————————————

     

     

     

     

     

     

     

     

     

    题目:

     

    有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。

     

    比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。

     

     

     

    再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2,2。

     

     

     

    当然,除此之外,还有很多很多种走法。

     

     

     

     

     

     

     

     

     

     

    ————————————

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    第一种情况:

     

     

     

    第二种情况:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    把思路画出来,就是这样子:

     

     

     

     

     

     

     

     

     

     

     

     

    F(1) = 1;

    F(2) = 2; 

    F(n) = F(n-1)+F(n-2)(n>=3)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    方法一:递归求解

     

     

    由于代码比较简单,这里就不做过多解释了。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    如图所示,相同的颜色代表了方法被传入相同的参数。

     

     

     

     

     

     

     

     

    方法二:备忘录算法

     

     

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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    方法三:动态规划求解

     

     

    程序从 i=3 开始迭代,一直到 i=n 结束。每一次迭代,都会计算出多一级台阶的走法数量。迭代过程中只需保留两个临时变量a和b,分别代表了上一次和上上次迭代的结果。 为了便于理解,我引入了temp变量。temp代表了当前迭代的结果值。

     

     

     

     

     

     

     

     

     

     

     

     

     

    Processed: 0.015, SQL: 9