缓存和Memoization有什么区别?

问题描述 投票:93回答:5

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

这两者之间的核心区别是什么?

caching terminology memoization
5个回答
92
投票

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

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

维基百科says

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


39
投票

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

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


6
投票

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


1
投票

记忆是缓存确定性函数结果的一种特殊形式。这意味着在函数外部缓存结果不是memoization,因为函数在计算新结果(不在缓存中)时必须改变缓存,因此它不再是(纯)函数。 Memoization通常意味着将缓存作为附加参数传递(在辅助函数中)。 Memoization将优化需要为单次访问多次计算值的函数。缓存将优化使用相同参数多次调用的函数。换句话说,Memoization将优化第一次访问,缓存是否只会优化循环访问。


0
投票

我想补充其他很好的答案,即memoization也称为tabling。我认为了解那些学习记忆和缓存的人的术语也很重要。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.