4

比较“memoize”和“cache”这两个词,并在阅读维基百科的 memoization 条目时,人们是否同意使用“memoize”这个词意味着

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

如果您正在做上述以外的任何事情,那么您只是在缓存一个结果?

4

4 回答 4

7

我不确定,但我的理解是,memoization 需要给定一个 function y = f(u),它f是确定性的(即,对于给定u的 ,y必须始终相同),以便f可以存储 的结果。

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

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

于 2010-09-15T22:46:27.253 回答
4

我相信记忆一个函数可以让你在本地缓存给定参数集的函数结果。这几乎就像:

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”块被自动处理并且效率更高,并且随着使用不同参数调用函数而被添加。

请注意,您只能记住一个确定性且没有副作用的函数。这意味着函数的结果只能取决于其输入,并且在运行时无法更改任何内容。

所以简而言之,记忆化是在非常特殊的情况下的函数本地缓存,因此它是常规缓存的一种特殊化。

于 2010-09-15T22:43:34.957 回答
1

据我了解,是的,memoization 是缓存,用于加速时间必不可少的程序,例如计算数列(例如斐波那契数列)的程序。

于 2010-09-15T22:36:10.220 回答
1

这是有争议的,因为这些术语可以松散地互换使用。

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

于 2010-09-15T22:47:10.027 回答