【发布时间】:2014-05-11 16:35:29
【问题描述】:
考虑到程序性能优化的记忆,似乎在某些情况下它可能非常有益,因为它完全消除了重复计算。并且在 Python、Java、C/C++ 等编程语言中有大量现有的语言级支持。其中一个示例是名为 IncPy 的 Python 解释器。它可以自动记忆,程序员不需要额外的工作。
但是,我不认为 memoization 在现实世界的项目中被广泛采用。也没有大公司对此感兴趣。那么,它的主要限制是什么?
欢迎和赞赏任何建议或想法。以下是我理解的一些限制:
- 初始执行速度变慢
- 空间开销
- 程序员的额外负担,因为它可能需要程序员修改代码
(我从这里稍微更新了我的问题。)
感谢您的 cmets。我想在我在这里列出的三个原因中,第三个更重要。这是正确的吗?
如果你认为memoization确实被广泛使用,你能给我一些例子,或者一些关键词吗?
谢谢!
【问题讨论】:
-
我认为记忆化 被广泛采用,各种类似的缓存技术也是如此。
-
Java、C++ 和当然 C 缺乏语言级别的支持。我认为 Python 也没有,但我可能已经过时了。
-
你不会在任何地方都使用 memoization - 只有在纯函数上,只有当你希望函数被相同的参数重复调用,并且只有当缓存空间和代码复杂性成本时与运行时节省相比,结果很低 - 但在适当的时候,我们当然会使用它。
-
特别是对于动态规划算法,memoization 是极其重要的。但大多数时候,它并不适用。
-
记忆化作为一种优化技术很好,并且不受您所说的限制。我用它来加速过去运行在 10 秒内的代码,由于这种技术,现在运行在 0.03 秒内。有限的是接受它、理解它并知道如何应用它的程序员的数量;)。
标签: performance optimization memoization