Recursion 反例证明动态规划中的记忆并不总是有用的
这是我上个月课堂考试的一部分,从那以后,我花了一些时间阅读DP中的回忆录及其对后者的影响。我能够找到并彻底理解证明有效的案例,但是由于DP从根本上采取了这种方法来存储子问题,以备将来使用,这难道不会让问题变得有点错误,因为现在的解决方案总是有某种缓存供将来使用吗Recursion 反例证明动态规划中的记忆并不总是有用的,recursion,dynamic-programming,memoization,Recursion,Dynamic Programming,Memoization,这是我上个月课堂考试的一部分,从那以后,我花了一些时间阅读DP中的回忆录及其对后者的影响。我能够找到并彻底理解证明有效的案例,但是由于DP从根本上采取了这种方法来存储子问题,以备将来使用,这难道不会让问题变得有点错误,因为现在的解决方案总是有某种缓存供将来使用吗 如果我弄错了什么,请纠正我。不!记忆并不是在所有情况下都有用。我们可以想到的一个简单的反例是factorial(n)函数,其中需要计算给定数字的阶乘n。 factorial(n): 如果(n=1)返回; 否则返回n*阶乘(n-1);
如果我弄错了什么,请纠正我。不!记忆并不是在所有情况下都有用。我们可以想到的一个简单的反例是
factorial(n)
函数,其中需要计算给定数字的阶乘n
。
factorial(n):
如果(n=1)返回;
否则返回n*阶乘(n-1);
考虑上面的伪代码来计算给定数的阶乘<代码> n< /代码>。假设n=5,函数将计算阶乘(5),如下所示:
- 5*
factorial(4)
- 4*
factorial(3)
- 3*
factorial(2)
- 2*
factorial(1)
- 1*
factorial(0)
- 一,
在这种情况下,我们采用另一种方法,我们称之为制表,我想你也可以通过记忆来计算阶乘。请参考:因此,通过递归树找出原因在一定程度上有助于理解这一点,并解释为什么在这种情况下,与通过记忆计算斐波那契数列等其他情况相比,记忆从未真正起到作用。相关: