【问题标题】:memoization vs dynamic programming space complexity记忆化与动态规划空间复杂度
【发布时间】:2015-06-07 12:56:19
【问题描述】:
我想知道一个问题,比如 LCS,我们可以降低 dp 解决方案的空间复杂度,因为当我们在 dp 中填充表格时,我们只需使用 dp[i - 1][j] 或 dp[i][j - 1] 来填充 dp[i][j] 而不是有一个大小为 m X n 的 dp 表。
我们可以使用dp[2][n] 解决这个问题,并在计算时切换状态。这可以通过记忆将空间复杂度降低到 O(n + m) 来实现吗?
【问题讨论】:
标签:
dynamic-programming
memoization
【解决方案1】:
简单的答案是
否
在bottom Up中,您可以删除不必要的行,因为您知道这些行不会再次使用....
在 Memoization 中,递归调用以任何顺序而不是完整的形式方法,例如:有一个从 LCS(i,j) 到 LCS(i-1,j) 的调用,让这个结果被计算并保存!现在,递归调用 LCS(k,x) (对于其他情况),这会导致相同的子问题 LCS(i-1,j) 现在,如果您删除了这个存储值,它将无法正确记忆解决方案......!
您无法确定要记住哪个子问题而不是记住哪个子问题。
与自底向上相反,我们确定哪些子问题不会再次使用(这就是我们消除其他行的原因)!