我想知道 caching和 memoization之间的实际差别是什么。 在我看来,两者都涉及避免通过存储数据来获取数据的重复函数调用。
caching
memoization
这两者之间的核心区别是什么?
记忆是一种特定形式的缓存,涉及到 根据函数的参数缓存函数的返回值。
缓存是一个更普遍的术语; 例如,HTTP 缓存是缓存,而不是制表。
维基百科 说:
虽然与缓存相关,但制表是指这种优化的特定情况,它与缓冲或页替换等缓存形式不同。
我认为术语缓存通常用于存储 IO 操作的结果,或者基本上任何从外部传入的数据(文件、网络、数据库查询)。术语制表通常适用于存储您自己的计算结果,例如在动态编程的上下文中。
正如我所看到的,“制表”是“缓存确定性函数的结果”,它可以在任何时候给定相同的函数和输入。
“缓存”基本上包括任何输出缓冲策略,不管源值在给定时间是否可重现。事实上,缓存还用于引用 输入缓冲策略,例如磁盘或内存上的写缓存。因此,这是一个更为普遍的术语。
记忆是对确定性函数的结果进行缓存的一种特殊形式。这意味着在函数之外缓存结果不是制表,因为在计算新结果时(不在缓存中) ,函数必须对缓存进行变异,这样它就不再是(纯)函数。内存化通常意味着将缓存作为附加参数传递(在 helper 函数中)。记忆化将优化那些需要为单次访问计算多次值的函数。缓存将优化使用相同参数多次调用的函数。换句话说,Memoization 将优化第一个访问,而缓存是否只优化重复访问。
我想补充的其他伟大的答案,备忘录也被称为 搁置。我认为了解这个术语对于那些学习记忆和缓存是什么的人来说也很重要。