【问题标题】: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) 现在,如果您删除了这个存储值,它将无法正确记忆解决方案......!

    您无法确定要记住哪个子问题而不是记住哪个子问题。 与自底向上相反,我们确定哪些子问题不会再次使用(这就是我们消除其他行的原因)!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2014-02-11
      • 1970-01-01
      相关资源
      最近更新 更多