记忆的局限性是什么?

时间:2014-04-01 04:28:25

标签: performance optimization memoization

考虑到程序性能优化的记忆,似乎在某些情况下它可能是非常有益的,因为它完全消除了重复的计算。在Python,Java,C / C ++等编程语言中有大量现有的语言级支持。其中一个例子是名为IncPy的Python解释器。它可以进行自动记忆,也不需要程序员的额外工作。

但是,我并不认为备忘录在现实世界的项目中被广泛采用。也没有大公司对它有很大的兴趣。那么,它的主要局限是什么?

欢迎并赞赏任何建议或想法。以下是我理解的一些限制:

  1. 初始执行速度减慢
  2. 空间开销
  3. 程序员的额外负担,因为它可能需要程序员修改代码

  4. (我从这里稍微更新了我的问题。)

    感谢您的评论。我想在我列出的三个原因中,第三个原因更为重要。这是对的吗?

    如果你认为记忆确实被广泛使用,你能给我一些例子或一些关键词吗?

    谢谢!

2 个答案:

答案 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)

我猜想警告之一(不一定是限制)是当我们试图记住的函数也可能返回错误时。在这种情况下,必须注意不要记住该错误。