这是我上个月课堂测试的一部分,从那以后我花了一些时间阅读DP中的Memoization及其对后者的影响。我能够找到并彻底理解它被证明富有成效的案例,但是因为DP从根本上将这种方法用于 " store" 子问题以供以后使用,这不会使问题变得有点错误,因为我们总会对现有解决方案进行某种缓存以供将来使用吗?
如果我弄错了,请纠正我。
答案 0 :(得分:0)
没有!在每种情况下,记忆都没有帮助。一个简单的反例可以想到的是factorial(n)
函数,您需要计算给定数字n
的阶乘。
factorial(n):
if(n = 1) return;
else return n*factorial(n-1);
考虑上面的伪代码来计算给定数字n
的阶乘。比如说,n = 5,函数将像这样计算factorial(5)
:
factorial(4)
李>
factorial(3)
factorial(2)
factorial(1)
factorial(0)
如您所见,每次从函数返回一个新值并且每次存储时,该值都没有意义,因为后续的递归调用将无法从中受益。
在这些情况下,我们会采用另一种方法,我们将其称为制表。