考虑到程序性能优化的记忆,似乎在某些情况下它可能是非常有益的,因为它完全消除了重复的计算。在Python,Java,C / C ++等编程语言中有大量现有的语言级支持。其中一个例子是名为IncPy的Python解释器。它可以进行自动记忆,也不需要程序员的额外工作。
但是,我并不认为备忘录在现实世界的项目中被广泛采用。也没有大公司对它有很大的兴趣。那么,它的主要局限是什么?
欢迎并赞赏任何建议或想法。以下是我理解的一些限制:
(我从这里稍微更新了我的问题。)
感谢您的评论。我想在我列出的三个原因中,第三个原因更为重要。这是对的吗?
如果你认为记忆确实被广泛使用,你能给我一些例子或一些关键词吗?
谢谢!
答案 0 :(得分:0)
在使用递归获取febonacci系列的程序中可以看到一个简单的例子
function memoize(fn)
{
const cache = {};
return function(...args)
{
if (cache[args])
{
return cache[args];
}
const result = fn.apply(this, args);
cache[args] = result;
return result;
};
}
function slowfib(n) {
if(n < 2)
{
return n;
}
return fib(n-1) + fib(n-2);
}
const fib = memoize(slowfib);
== - =======结果与memoize ============= ✓定义Fib功能(3ms) ✓计算1(1ms)的正确fib值 ✓计算2的正确fib值 ✓计算3的正确fib值 ✓计算4的正确fib值 ✓计算15
的正确fib值测试套房:1次通过,共1次 测试:6次通过,共计6次 快照:总共0 时间:1.118秒 选择匹配/fib/test.js/i的所有测试套件。
=========没有Memoize的结果======= 通过fib / test.js ✓定义Fib功能(3ms) ✓计算1(1ms)的正确fib值 ✓计算2的正确fib值 ✓计算3的正确fib值 ✓计算4的正确fib值 ✓计算15(747ms)
的正确fib值测试套房:1次通过,共1次 测试:6次通过,共计6次 快照:总共0 时间:1.496s
查看上次测试的时间和总时间
答案 1 :(得分:0)
我猜想警告之一(不一定是限制)是当我们试图记住的函数也可能返回错误时。在这种情况下,必须注意不要记住该错误。