我想知道caching
和memoization
之间的实际区别是什么
正如我所看到的,两者都涉及通过存储来避免重复的函数调用来获取数据。
两者之间的核心区别是什么?
答案 0 :(得分:89)
Memoization是一种特定的缓存形式,它涉及根据函数的参数缓存函数的返回值。
缓存是一个更通用的术语;例如,HTTP缓存是缓存而不是memoization。
维基百科says:
虽然与缓存有关,但memoization指的是此优化的特定情况,将其与缓存形式(如缓冲或页面替换)区分开来。
答案 1 :(得分:38)
正如我所看到的那样,“memoization”是“缓存确定性函数的结果”,可以在给定相同功能和输入的情况下随时再现。
“缓存”基本上包括任何输出缓冲策略,无论源值是否在给定时间都是可再现的。实际上,缓存还用于指代输入缓冲策略,例如磁盘或内存上的写缓存。所以这是一个更通用的术语。
答案 2 :(得分:6)
我认为术语缓存通常在存储IO操作的结果时使用,或者基本上是从外部发送给您的任何数据(文件,网络,数据库查询)。术语记忆通常适用于存储您自己计算的结果,例如在动态编程的上下文中。
答案 3 :(得分:1)
记忆是缓存确定性函数结果的一种特殊形式。这意味着在函数外部缓存结果不是memoization,因为函数在计算新结果(不在缓存中)时必须改变缓存,因此它不再是(纯)函数。 Memoization通常意味着将缓存作为附加参数传递(在辅助函数中)。 Memoization将优化需要为单次访问多次计算值的函数。缓存将优化使用相同参数多次调用的函数。换句话说,Memoization将优化第一次访问,缓存是否只会优化循环访问。
答案 4 :(得分:0)
我想在记忆化也被称为 tabling 的其他很好的答案中添加一些内容。我认为,对于那些了解记忆和缓存的人来说,知道该术语也很重要。