【发布时间】:2014-02-25 08:39:50
【问题描述】:
记忆化绝对是一种强大的技术。
但是动态编程在 IMO 中稍微好一点,因为它不涉及内存紧张(在递归程序中,参数占用内存,并且随着我们深入递归,内存会增加)。但在速度方面,两者相当。
但绝对记忆化比动态编程更直接。
我的问题:有没有可能在没有内存限制的情况下使用记忆?
【问题讨论】:
-
(in a recursive program, the parameters occupy memory and this memory increases as we go deeper into the recursion)这是一个常数因子。递归不可能大于 |Table| (其中 Table 是等效 DP 解决方案中使用的表),因此仅通过常数可能会更糟,并且就大 O 而言 - 它们是相同的。此外,记忆对稀疏矩阵更有用,因为你只创建“你需要的东西”,不像自下而上的 DP,你创建所有东西。 -
所以,DP“稍微好一点”的说法基本上是错误的。每个都有其优点和缺点,每个解决方案(自下而上或自上而下)都在其他地方大放异彩。
-
Memoization 还有一个(缺点)优点是计算后的值会留在内存中。这是你的意思吗?另外,我认为这个问题更适合Programmers。
-
是的,但是DP的优势在哪里呢?\
-
@hypothesist 每次访问内存都快得多(记忆通常使用基于哈希的映射,平均为 O(1),但比数组访问慢)。这一事实使得自下而上的 DP 比自上而下的密集数据更好 - 一个常数,但常数很高。
标签: algorithm dynamic-programming memoization