Skip to content

Commit

Permalink
docs: add note
Browse files Browse the repository at this point in the history
  • Loading branch information
Justin3go committed Jul 31, 2024
1 parent d93877f commit a2714ba
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
17 changes: 16 additions & 1 deletion docs/en/notes/算法与数据结构/12动态规划.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@

如果原问题是由交叠的子问题构成(递归调用),动态规划对每个子问题只求解一次,并把结果记录在表中,递推计算得到原始问题的解。

> 主要它是只求一次子问题,所以相比于递归暴力求解就复杂度降低了
> 它是只求一次子问题,所以相比于递归暴力求解就复杂度降低了
但相对于记忆化搜索,时间复杂度是一样的,只是记忆化搜索需要用到递归,是一种“从顶到底”的方法,而动态规划是一种“从底到顶”的方法。

动态规划为什么叫做动态规划,就是因为当前你需要做决策,而当前的决策会需要选择不同的以前的最优决策,这个规划是动态的。

**解题步骤**

Expand Down Expand Up @@ -106,6 +110,12 @@ ChangeMaking2([1,3,4], 6)

<img src="https://oss.justin3go.com/blogs/image-20211105151844839.png" alt="image-20211105151844839" style="zoom:80%;" />

- 记忆化搜索是一种“从顶到底”的方法
- 动态规划是一种“从底到顶”的方法

两者的时间复杂度是一样的,只是记忆化搜索需要用到递归。


### 基本背包问题解法

```python
Expand Down Expand Up @@ -141,6 +151,11 @@ print(value[-1][-1])
37
```

注意,这里代码容易迷惑的地方就是:

- `value[i - 1][j]`代表的就是前一项,dp表默认填充了0;
-`w[i - 1]``v[i - 1]`代表的是当前项,这里的`i`是从 1 开始的,所以要减去 1。

### 回溯找组合

<img src="https://oss.justin3go.com/blogs/image-20211105152058485.png" alt="image-20211105152058485" style="zoom:80%;" />
Expand Down
16 changes: 15 additions & 1 deletion docs/notes/算法与数据结构/12动态规划.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@

如果原问题是由交叠的子问题构成(递归调用),动态规划对每个子问题只求解一次,并把结果记录在表中,递推计算得到原始问题的解。

> 主要它是只求一次子问题,所以相比于递归暴力求解就复杂度降低了
> 它是只求一次子问题,所以相比于递归暴力求解就复杂度降低了
但相对于记忆化搜索,时间复杂度是一样的,只是记忆化搜索需要用到递归,是一种“从顶到底”的方法,而动态规划是一种“从底到顶”的方法。

动态规划为什么叫做动态规划,就是因为当前你需要做决策,而当前的决策会需要选择不同的以前的最优决策,这个规划是动态的。

**解题步骤**

Expand Down Expand Up @@ -106,6 +110,11 @@ ChangeMaking2([1,3,4], 6)

<img src="https://oss.justin3go.com/blogs/image-20211105151844839.png" alt="image-20211105151844839" style="zoom:80%;" />

- 记忆化搜索是一种“从顶到底”的方法
- 动态规划是一种“从底到顶”的方法

两者的时间复杂度是一样的,只是记忆化搜索需要用到递归。

### 基本背包问题解法

```python
Expand Down Expand Up @@ -141,6 +150,11 @@ print(value[-1][-1])
37
```

注意,这里代码容易迷惑的地方就是:

- `value[i - 1][j]`代表的就是前一项,dp表默认填充了0;
-`w[i - 1]``v[i - 1]`代表的是当前项,这里的`i`是从 1 开始的,所以要减去 1。

### 回溯找组合

<img src="https://oss.justin3go.com/blogs/image-20211105152058485.png" alt="image-20211105152058485" style="zoom:80%;" />
Expand Down

0 comments on commit a2714ba

Please sign in to comment.