缓存和Memoization有什么区别?

Joh*_*ohn 100 caching terminology memoization

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

这两者有什么区别?

SLa*_*aks 98

Memoization是一种特定的缓存形式,它涉及根据函数的参数缓存函数的返回值.

缓存是一个更通用的术语; 例如,HTTP缓存是缓存而不是memoization.

维基百科:

虽然与缓存有关,但是memoization指的是这种优化的特定情况,将其与缓存形式(例如缓冲或页面替换)区分开来.

  • 但是你可以随时使用函数来缓存使用缓存的部分并将其命名为"memoization".虽然区别在于你控制了你的函数中的缓存策略,但是memoization是更高阶的,并且发生在我猜想的函数之外. (2认同)
  • 为什么HTTP缓存不记忆?这也基于参数(所请求资源的 URL)。 (2认同)

har*_*rpo 45

正如我所看到的那样,"memoization"是"缓存确定性函数的结果",可以在给定相同功能和输入的情况下随时再现.

"缓存"基本上包括任何输出缓冲策略,无论源值是否在给定时间是可再现的.实际上,缓存还用于指代输入缓冲策略,例如磁盘或内存上的写缓存.所以这是一个更通用的术语.

  • @德语,是的,记忆取决于确定性。经典示例是递归算法,例如斐波那契数列或阶乘。记住的功能不是重新计算基本情况,而是通过将较早的结果重新用于已计算的值来使其短路。显然,这取决于始终产生相同输出的相同输入,这就是确定性的定义。另一方面,在理解结果可能与“刷新”值不匹配的情况下,缓存经常用于不确定性(例如随机或加时间戳)的过程。 (3认同)

MK.*_*MK. 6

我认为术语缓存通常在存储IO操作的结果时使用,或者基本上是从外部发送给您的任何数据(文件,网络,数据库查询).术语记忆通常适用于存储您自己计算的结果,例如在动态编程的上下文中.