知识卡片

记忆化缓存计算

普通读书笔记卡 · 1492.g

内容

记忆化把函数已算过的结果存进闭包数组/对象,相同输入再调用直接返回缓存值;朴素递归 fibonacci(10) 触发453次调用,加 memo 缓存后仅29次。可抽象出通用 memoizer 函数,提供初始缓存和递推公式即可复用到阶乘等问题。发散:缓存换速度,但须确认结果只由输入决定(纯函数),否则会把旧状态伪装成正确答案。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第4章《函数 Functions》"记忆"一节 - 结论依据:原文用 fibonacci 递归的调用次数对比(无缓存 453 次 vs 有 memo 缓存 29 次)证明记忆化能显著减少重复运算,并进一步抽出通用的 memoizer 高阶函数,据此推出记忆化是用闭包缓存纯函数结果换取性能的技术。 - 原始内容:这样是可以工作的,但它做了很多无谓的工作。fibonacci函数被调用了453次……如果我们让该函数具备记忆功能,就可以显著地减少运算量……这个函数返回同样的结果,但它只被调用了29次。