证明动态规划中的记忆化并不总是有帮助的反例

Counter-examples to prove that memoization in dynamic programming is not always helpful

这是我上个月 class 测试的一部分,从那时起我花了一些时间阅读 DP 中的记忆化及其对后者的影响。我能够找到并彻底理解它被证明是富有成果的案例,但是由于 DP 从根本上将这种方法用于 "store" 子问题为了以后使用,从某种意义上说,这不会使问题有点错误,因为总会有某种当前解决方案的缓存以供将来使用吗?

如有错误请指正

没有!记忆并非在所有情况下都有帮助。人们可以想到的一个简单的反例是 factorial(n) 函数,您需要在其中计算给定数字 n 的阶乘。

factorial(n): if(n = 1) return; else return n*factorial(n-1);
考虑上面的伪代码来计算给定数字 n 的阶乘。比如,n = 5,该函数将计算 factorial(5),如下所示:

  • 5*factorial(4)
  • 4*factorial(3)
  • 3*factorial(2)
  • 2*factorial(1)
  • 1*factorial(0)
  • 1

如您所见,每次从函数返回一个新值并且每次存储该值都没有意义,因为后续的递归调用将无法受益来自它。

在这种情况下,我们采用另一种方法,我们称之为制表