Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9e19844

Browse files
committed
Update 01.Memoization.md
1 parent f509d0c commit 9e19844

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

‎Contents/10.Dynamic-Programming/02.Memoization/01.Memoization.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
55
记忆化搜索是动态规划的一种实现方式。在记忆化搜索中,当算法需要计算某个子问题的结果时,它首先检查是否已经计算过该问题。如果已经计算过,则直接返回已经存储的结果;否则,计算该问题,并将结果存储下来以备将来使用。
66

7-
举个例子,比如说求解「斐波那契数列」,定义是:`f(1) = 1, f(2) = 2, f(n) = f(n - 1) + f(n - 2)`对应的递推过程如下:
7+
举个例子,比如「斐波那契数列」的定义是:`f(1) = 1, f(2) = 2, f(n) = f(n - 1) + f(n - 2)`如果我们使用递归算法求解第 $n$ 个斐波那契数,则对应的递推过程如下:
88

99
![](http://qcdn.itcharge.cn/images/20230306140939.png)
1010

11-
如果使用普通递归算法,则:想要计算 `f(5)`,需要先计算 `f(4)``f(3)`,而在计算 `f(4)` 时还需要计算 `f(3)`。这样 `f(3)` 就进行了多次计算。
11+
从图中可以看出:如果使用普通递归算法,想要计算 `f(5)`,需要先计算 `f(4)``f(3)`,而在计算 `f(4)` 时还需要计算 `f(3)`。这样 `f(3)` 就进行了多次计算。
1212

13-
为了避免重复计算,我们可以使用数组或哈希表结构来保存已经求解过的 `f(k)` 的结果。如上图所示,当递归调用用到 `f(k)` 时,先查看一下之前是否已经计算过结果,如果已经计算过,则直接从对应结构中取值返回,而不用再递推下去,这样就避免了重复计算问题。
13+
为了避免重复计算,我们可以使用一个缓存(数组或哈希表)来保存已经求解过的 `f(k)` 的结果。如上图所示,当递归调用用到 `f(k)` 时,先查看一下之前是否已经计算过结果,如果已经计算过,则直接从缓存中取值返回,而不用再递推下去,这样就避免了重复计算问题。
1414

1515
使用「记忆化搜索」方法解决斐波那契数列的代码如下:
1616

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /