动态编程的记忆或制表方法

时间:2012-08-20 17:40:51

标签: algorithm recursion time-complexity dynamic-programming

使用动态编程可以解决许多问题,例如增长最快的子序列。这个问题可以通过使用2种方法来解决

  1. Memoization(Top Down) - 使用递归来解决子问题并将结果存储在某个哈希表中。
  2. 制表(自下而上) - 使用迭代方法首先解决较小的子问题,然后在执行更大的问题时使用它来解决问题。
  3. 我的问题是哪种方法在时间和空间复杂性方面更好?

3 个答案:

答案 0 :(得分:31)

简短回答:取决于问题!

Memoization 通常需要更多的代码并且不那么简单,但在某些问题上具有计算优势,主要是那些 not 需要计算整个值的所有值矩阵得出答案。

制表更直接,但可能会计算不必要的值。如果确实需要计算所有值,则此方法通常更快,因为开销较小。

答案 1 :(得分:1)

渐近地,自上而下的动态编程实现与自下而上相同,假设您使用相同的递归关系。但是,自下而上通常更有效,因为在记忆中使用了递归的开销。

答案 2 :(得分:-4)

如果问题有overlapping sub-problems属性,请使用Memoization,否则取决于问题