mirror of
https://github.com/krahets/hello-algo.git
synced 2026-02-12 15:15:48 +08:00
Add subtitles to docs
This commit is contained in:
@@ -49,7 +49,7 @@ $$
|
||||
|
||||
完成以上三步后,我们可以直接实现从底至顶的动态规划解法。而为了展示本题包含的重叠子问题,本文也同时给出从顶至底的暴力搜索和记忆化搜索解法。
|
||||
|
||||
## 方法一:暴力搜索
|
||||
### 方法一:暴力搜索
|
||||
|
||||
搜索代码包含以下要素:
|
||||
|
||||
@@ -129,7 +129,7 @@ $$
|
||||
|
||||

|
||||
|
||||
## 方法二:记忆化搜索
|
||||
### 方法二:记忆化搜索
|
||||
|
||||
为了防止重复求解重叠子问题,我们借助一个记忆列表 `mem` 来记录子问题的解,其中 `mem[i][c]` 对应解 $dp[i, c]$ 。
|
||||
|
||||
@@ -203,7 +203,7 @@ $$
|
||||
|
||||

|
||||
|
||||
## 方法三:动态规划
|
||||
### 方法三:动态规划
|
||||
|
||||
动态规划解法本质上就是在状态转移中填充 $dp$ 表的过程,代码如下所示。
|
||||
|
||||
@@ -317,7 +317,9 @@ $$
|
||||
=== "<14>"
|
||||

|
||||
|
||||
**最后考虑状态压缩**。以上代码中的数组 `dp` 占用 $O(n \times cap)$ 空间。由于每个状态都只与其上一行的状态有关,因此我们可以使用两个数组滚动前进,将空间复杂度从 $O(n^2)$ 将低至 $O(n)$ 。代码省略,有兴趣的同学可以自行实现。
|
||||
### 状态压缩
|
||||
|
||||
最后考虑状态压缩。以上代码中的数组 `dp` 占用 $O(n \times cap)$ 空间。由于每个状态都只与其上一行的状态有关,因此我们可以使用两个数组滚动前进,将空间复杂度从 $O(n^2)$ 将低至 $O(n)$ 。代码省略,有兴趣的同学可以自行实现。
|
||||
|
||||
那么,我们是否可以仅用一个数组实现状态压缩呢?观察可知,每个状态都是由正上方或左上方的格子转移过来的。假设只有一个数组,当遍历到第 $i$ 行时,该数组存储的仍然是第 $i-1$ 行的状态,**为了避免左方区域的格子在状态转移中被覆盖,应该采取倒序遍历**。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user