Algorithm DP中的递归和n阶示例
我是动态规划的新手,我看了这个例子 你要爬n级台阶。一次只能爬1到2步。 找到达到第n步的方法 溶液为..T(n)=T(n-1)+T(n-2) 我做的最后一步是什么 我不是在n-1步就是n-2步。现在,达到第n步的方法数怎么可能是达到n-1步和n-2步的方法数之和呢。我无法获得推理所需的直觉。请帮助 p.S我可以用递归编写代码。到达第(n-2)步然后做一个2步的方法,以及到达第(n-1)步和第一步的方法是不相交的,因为它的最后一步是不同的,没有其他方法可以到达第n步,而不绕过(n-1)或(n-2),这些方法已经为(n-1)和(n-2)计算过了 现在,达到第n步的方法的数量怎么可能是 达到n-1步和n-2步的方法数量Algorithm DP中的递归和n阶示例,algorithm,recursion,dynamic-programming,Algorithm,Recursion,Dynamic Programming,我是动态规划的新手,我看了这个例子 你要爬n级台阶。一次只能爬1到2步。 找到达到第n步的方法 溶液为..T(n)=T(n-1)+T(n-2) 我做的最后一步是什么 我不是在n-1步就是n-2步。现在,达到第n步的方法数怎么可能是达到n-1步和n-2步的方法数之和呢。我无法获得推理所需的直觉。请帮助 p.S我可以用递归编写代码。到达第(n-2)步然后做一个2步的方法,以及到达第(n-1)步和第一步的方法是不相交的,因为它的最后一步是不同的,没有其他方法可以到达第n步,而不绕过(n-1)或(n-2
这样想。您正处于
n
th步骤。考虑到你可以一次爬一步或两步,你是如何到达那里的?那么,您的上一步必须位于步骤n-1
(采取1步)或步骤n-2
(采取2步)。现在,有T(n-1)
方法达到n-1
th步骤,有T(n-2)
方法达到n-2
th步骤,这意味着如果您的最后一步是n-2
和T(n-1),则有T(n-2)
方法达到n
如果您的最后一步是在n-1
到达n
的方法。这是你最终到达n
的唯一两种可能性,因此到达n
第四步的方法总数是T(n-1)+T(n-2)
。希望这有帮助 动态规划解决方案
T(n)=T(n-1)+T(n-2)
基本上是求n
th fibonacchi数的递归算法。现在,如果我正确理解了您的问题,您正在尝试为这个问题找到一个动态规划解决方案
使用DP,我们只需保留以前答案的记忆,并根据以前的答案计算新答案。这基本上可以归结为:
int[] s = new int[n]
s[0] = 0;
s[1] = 1;
for(int i = 2; i < n; i++) {
s[i] = s[i - 1] + s[i - 2];
}
return s[n - 1] + 1;
对于3个步骤,解决方案是(1+1)+1=3
:
1 + 1 + 1
1 + 2
2 + 1
对于4个步骤,解决方案是(1+1+2)+1=5
1 + 1 + 1 + 1
1 + 1 + 2
1 + 2 + 1
2 + 1 + 1
2 + 2
对于5个步骤,解决方案是(1+1+2+3)+1=8
1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 2
1 + 1 + 2 + 1
1 + 2 + 1 + 1
2 + 1 + 1 + 1
1 + 2 + 2
2 + 1 + 2
2 + 2 + 1
让我们深入一点 我做的最后一步是什么 这不能用我们得到的信息来确定。最后一步完全取决于我们选择的行走顺序。然而,我们能做的是找到最后一步是2步或1步的概率。如上图所示,最后一步的概率为1:
P(1) = 1 / 1 = 100.0%
P(2) = 1 / 2 = 50.0%
P(3) = 2 / 3 = 66.6%
P(4) = 3 / 5 = 60.0%
P(5) = 5 / 8 = 62.5%
我们可以看到,分子和分母都遵循相同的模式;分子只是分母前面的一个斐波纳契数
因此,最后一步的概率为1:
F(n) = F(n - 1) + F(n - 2), F(0) = 0, F(1) = 1, n >= 0
P(n) = F(n) / F(n - 1), n >= 2
当n
接近无穷大时,1/p(n)
的递归公式实际上限制在(1+sqrt(5))/2
处,这可能更为人所知
知道这一点后,最后一步为1的概率为1/((1+sqrt(5))/2)
,也可以写成2/(1+sqrt(5))
。因为这大于0.5,我们可以说最后一步可能是1
您可以在中看到完整的计算。检查此链接的可能副本:
F(n) = F(n - 1) + F(n - 2), F(0) = 0, F(1) = 1, n >= 0
P(n) = F(n) / F(n - 1), n >= 2