【发布时间】:2012-08-16 01:27:03
【问题描述】:
有很多问题可以使用动态编程来解决,例如最长的递增子序列。这个问题可以通过两种方法解决
- Memoization (Top Down) - 使用递归解决子问题并将结果存储在某个哈希表中。
- 制表法(自下而上) - 使用迭代方法解决问题,首先解决较小的子问题,然后在执行较大的问题时使用它。
我的问题是在时间和空间复杂度方面哪种方法更好?
【问题讨论】:
-
您的第二个选项并不是真正的动态编程,它更多的是减少和征服。这取决于问题的规模以及问题在分析方面试图解决的问题。
-
当然取决于问题。
-
如果有一个千篇一律的通用答案,生活会更简单,所有的教科书都会教你“正确”的方法。但没有一个普遍的答案。此外,这个词是“记忆”。没有“R”。
-
为什么叫memoization?当我们记住较小的子问题的结果时,记忆似乎是一个恰当的词。
标签: algorithm recursion time-complexity dynamic-programming