1. lower-case nouns

2. fix 2 figures
3. Replace some 「」 by “”
This commit is contained in:
krahets
2023-08-20 23:28:30 +08:00
parent 2626de8d0b
commit 981144e42d
48 changed files with 174 additions and 162 deletions

View File

@ -1,6 +1,6 @@
# 初探动态规划
「动态规划 Dynamic Programming」是一个重要的算法范式它将一个问题分解为一系列更小的子问题并通过存储子问题的解来避免重复计算从而大幅提升时间效率。
「动态规划 dynamic programming」是一个重要的算法范式它将一个问题分解为一系列更小的子问题并通过存储子问题的解来避免重复计算从而大幅提升时间效率。
在本节中,我们从一个经典例题入手,先给出它的暴力回溯解法,观察其中包含的重叠子问题,再逐步导出更高效的动态规划解法。
@ -239,7 +239,7 @@ $$
![爬楼梯对应递归树](intro_to_dynamic_programming.assets/climbing_stairs_dfs_tree.png)
观察上图发现,**指数阶的时间复杂度是由于重叠子问题导致的**。例如:$dp[9]$ 被分解为 $dp[8]$ 和 $dp[7]$ $dp[8]$ 被分解为 $dp[7]$ 和 $dp[6]$ ,两者都包含子问题 $dp[7]$ 。
观察上图发现,**指数阶的时间复杂度是由于重叠子问题导致的**。例如:$dp[9]$ 被分解为 $dp[8]$ 和 $dp[7]$ $dp[8]$ 被分解为 $dp[7]$ 和 $dp[6]$ ,两者都包含子问题 $dp[7]$ 。
以此类推,子问题中包含更小的重叠子问题,子子孙孙无穷尽也。绝大部分计算资源都浪费在这些重叠的问题上。