比较术语“memoize”和“cache”以及阅读Wikipedia's memoization entry,人们是否同意使用“memoize”一词意味着
如果你正在做除上述之外的其他事情,那么只是缓存一个结果?
答案 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是一个记住自己的返回值的函数的过程。