memoization与动态编程空间复杂性

时间:2015-06-07 12:56:20

标签: dynamic-programming memoization

我想知道LCS有问题,我们可以降低dp解决方案的空间复杂度,因为当我们在dp中填充表时,我们只需使用dp[i - 1][j]dp[i][j - 1]来填充{{ 1}}而不是一个大小为m X n的dp表。

我们可以使用dp[i][j]来解决这个问题,并在计算时切换状态。这可以通过记忆将空间复杂度降低到O(n + m)吗?

1 个答案:

答案 0 :(得分:1)

简单的答案是

在自下而上,您可以删除不必要的行,因为您知道这些行不会再次使用.... 在Memoization中,递归以任何顺序调用,而不是完整的形式方法,例如:从LCS(i,j)到LCS(i-1,j)的调用,并且计算并保存此结果!现在,Recursion调用LCS(k,x)(对于其他一些情况)导致相同的子问题LCS(i-1,j)现在,如果你已经删除了这个存储的值,那就不会正确地记住解决方案......!

您不能确定要记住哪个子问题而不是记忆。 相反,自下而上我们确定哪些子问题不会再次使用(这就是为什么我们要消除其他行)!