caching和Memoization有什么区别?

我想知道caching和memoization之间的实际区别是什么。 正如我所看到的,两者都涉及到避免重复的函数调用通过存储来获取数据。

两者有什么区别?

记忆是一种特定forms的caching,它涉及到基于参数caching函数的返回值。

caching是一个更通用的术语; 例如,HTTPcaching是caching而不是记忆。

维基百科说 :

虽然与caching相关,但是memoization指的是这种优化的一个特定情况,区别于诸如缓冲或页面replace之类的cachingforms。

正如我所看到的那样,“记忆”就是“caching一个确定性函数的结果”,在相同的function和input的情况下,可以在任何时候再现。

“caching”基本上包括任何输出缓冲策略,无论源值在给定时间是否可重现。 事实上,caching也被用来指input缓冲策略,比如磁盘或内存上的写caching。 所以这是一个更通用的术语。

我认为术语caching通常用于存储IO操作的结果,或者基本上来自外部的任何数据(文件,networking,数据库查询)。 术语记忆通常适用于存储自己的计算结果,例如在dynamic编程的情况下。

记忆是一种caching确定性函数结果的特殊forms。 这意味着将结果caching到函数之外不是记忆,因为函数在计算新结果(不在caching中)时不得不改变caching,所以它不再是(纯)函数。 记忆通常意味着将caching作为附加parameter passing(在助手函数中)。 Memoization将优化需要为单次访问多次计算值的函数。 caching将优化使用相同参数多次调用的函数。 换句话说,Memoization将优化第一次访问是否caching只会优化经常访问。