比较“memoize”和“cache”这两个词,并在阅读维基百科的 memoization 条目时,人们是否同意使用“memoize”这个词意味着
- 记忆的结果保存在进程的内存中;换句话说,它不存储在memcached中。
- 一个只有“记忆”函数,如在数学函数中,例如斐波那契,而不是可能随时间变化的值,例如网站上注册用户的数量?
如果您正在做上述以外的任何事情,那么您只是在缓存一个结果?
比较“memoize”和“cache”这两个词,并在阅读维基百科的 memoization 条目时,人们是否同意使用“memoize”这个词意味着
如果您正在做上述以外的任何事情,那么您只是在缓存一个结果?
我不确定,但我的理解是,memoization 需要给定一个 function y = f(u)
,它f
是确定性的(即,对于给定u
的 ,y
必须始终相同),以便f
可以存储 的结果。
对我来说,缓存似乎更多的是确定哪些数据被频繁访问,并将这些数据保存在快速存储中。
前者是确定性的,而后者是随机的。
我相信记忆一个函数可以让你在本地缓存给定参数集的函数结果。这几乎就像:
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 是缓存,用于加速时间必不可少的程序,例如计算数列(例如斐波那契数列)的程序。
这是有争议的,因为这些术语可以松散地互换使用。
对我来说,“memoize”的唯一含义是——“缓存”是以前的输入而不是预先计算的表。也就是说 - 记忆是一个函数记住自己的返回值的过程。