“memoize”一词意味着什么?

时间:2010-09-15 22:30:39

标签: memoization

比较术语“memoize”和“cache”以及阅读Wikipedia's memoization entry,人们是否同意使用“memoize”一词意味着

  • 记忆结果保存在过程的记忆中;换句话说,它不存储在memcached
  • 只有一个“memoizes”函数,如数学函数,例如Fibonacci,不是可能随时间变化的值,例如网站上注册用户的数量?

如果你正在做除上述之外的其他事情,那么只是缓存一个结果?

4 个答案:

答案 0 :(得分:6)

我不确定,但我的理解是,记忆要求给定一个函数y = f(u)f是确定性的(即,对于给定的u,{{ 1}}必须始终相同),以便可以存储y的结果。

缓存给我似乎更多的是确定频繁访问哪些数据,并将这些数据保存在快速存储中的问题。

前者是确定性的,而后者是随机的。

答案 1 :(得分:4)

我相信memoizing一个函数允许你在本地缓存一组给定参数的函数结果。这几乎就像:

function f(a, b, c) {
  if (a==1 && b==2 && !c) {
    return 5;
  } else if (a==1 && b==3 && !c) {
    return 17.2;
  } /* ... etc ... */

  // some horribly long/complex/expensive calculation
  return result;
}

但是初始巨大的“if”块被自动处理并且效率更高,并且被添加到函数中时使用不同的参数调用。

请注意,您只能记住一个确定性并且没有副作用的函数。这意味着函数的结果只能依赖于它的输入,并且在运行时不能改变任何东西。

简而言之,memoization是在特定情况下的函数本地缓存,因此它是常规缓存的专业化。

答案 2 :(得分:1)

根据我的理解,是的,memoization是缓存,用于加速时间必需的程序,例如计算数字序列的程序(例如Fibonacci序列)。

答案 3 :(得分:1)

由于这些术语可以互换使用,因此值得商榷。

对我来说,'memoize'的唯一含义是 - '缓存'是先前的输入而不是预先计算的表。也就是说 - memoization是一个记住自己的返回值的函数的过程。