主要观点:Memoization 是实现动态规划使递归算法高效的技术,无需对原始递归算法做重大改变就能获得与常规动态规划相同的好处。
关键信息:
- 基本思想:先设计自然递归算法,若有重复的相同参数递归调用,可通过在表中保存子问题解来避免重复计算。
- 实现步骤:维护一个表存储子问题解,初始表项为特殊值表示未填充,首次遇到子问题时计算并存储,后续直接查找而不是重新计算。
- 示例:计算第 n 个斐波那契数,未使用 memoization 时运行时间约为 O(2n),使用 memoization 后可在 O(n)时间内完成。
重要细节: - 示例代码中未使用 memoization 的斐波那契数计算函数
fib
,在计算fib(5)
时可看到相同值重复计算。 - 使用 memoization 的斐波那契数计算函数
fibonacciMemo
,通过维护一个数组fibs
来缓存计算结果,避免重复计算。 - 对比了未使用 memoization 和使用 memoization 计算第 45 个斐波那契数的时间,未使用时花费 5136ms,使用时为 0ms。
- 这种方法有时也称为自上而下动态规划,相关源代码可在GitHub获取。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。