This commit is contained in:
krahets
2023-08-22 13:50:12 +08:00
parent 0c9bf14e20
commit 92a0853ab8
64 changed files with 478 additions and 479 deletions
@@ -13,21 +13,21 @@ status: new
你可以在一个字符串中进行三种编辑操作:插入一个字符、删除一个字符、替换字符为任意一个字符。
图所示,将 `kitten` 转换为 `sitting` 需要编辑 3 步,包括 2 次替换操作与 1 次添加操作;将 `hello` 转换为 `algo` 需要 3 步,包括 2 次替换操作和 1 次删除操作。
如图 14-27 所示,将 `kitten` 转换为 `sitting` 需要编辑 3 步,包括 2 次替换操作与 1 次添加操作;将 `hello` 转换为 `algo` 需要 3 步,包括 2 次替换操作和 1 次删除操作。
![编辑距离的示例数据](edit_distance_problem.assets/edit_distance_example.png)
<p align="center"> 图编辑距离的示例数据 </p>
<p align="center"> 图 14-27 &nbsp; 编辑距离的示例数据 </p>
**编辑距离问题可以很自然地用决策树模型来解释**。字符串对应树节点,一轮决策(一次编辑操作)对应树的一条边。
图所示,在不限制操作的情况下,每个节点都可以派生出许多条边,每条边对应一种操作,这意味着从 `hello` 转换到 `algo` 有许多种可能的路径。
如图 14-28 所示,在不限制操作的情况下,每个节点都可以派生出许多条边,每条边对应一种操作,这意味着从 `hello` 转换到 `algo` 有许多种可能的路径。
从决策树的角度看,本题的目标是求解节点 `hello` 和节点 `algo` 之间的最短路径。
![基于决策树模型表示编辑距离问题](edit_distance_problem.assets/edit_distance_decision_tree.png)
<p align="center"> 图基于决策树模型表示编辑距离问题 </p>
<p align="center"> 图 14-28 &nbsp; 基于决策树模型表示编辑距离问题 </p>
### 1. &nbsp; 动态规划思路
@@ -48,7 +48,7 @@ status: new
**第二步:找出最优子结构,进而推导出状态转移方程**
考虑子问题 $dp[i, j]$ ,其对应的两个字符串的尾部字符为 $s[i-1]$ 和 $t[j-1]$ ,可根据不同编辑操作分为图所示的三种情况:
考虑子问题 $dp[i, j]$ ,其对应的两个字符串的尾部字符为 $s[i-1]$ 和 $t[j-1]$ ,可根据不同编辑操作分为图 14-29 所示的三种情况:
1. 在 $s[i-1]$ 之后添加 $t[j-1]$ ,则剩余子问题 $dp[i, j-1]$ 。
2. 删除 $s[i-1]$ ,则剩余子问题 $dp[i-1, j]$ 。
@@ -56,7 +56,7 @@ status: new
![编辑距离的状态转移](edit_distance_problem.assets/edit_distance_state_transfer.png)
<p align="center"> 图编辑距离的状态转移 </p>
<p align="center"> 图 14-29 &nbsp; 编辑距离的状态转移 </p>
根据以上分析,可得最优子结构:$dp[i, j]$ 的最少编辑步数等于 $dp[i, j-1]$ , $dp[i-1, j]$ , $dp[i-1, j-1]$ 三者中的最少编辑步数,再加上本次的编辑步数 $1$ 。对应的状态转移方程为:
@@ -366,7 +366,7 @@ $$
}
```
图所示,编辑距离问题的状态转移过程与背包问题非常类似,都可以看作是填写一个二维网格的过程。
如图 14-30 所示,编辑距离问题的状态转移过程与背包问题非常类似,都可以看作是填写一个二维网格的过程。
=== "<1>"
![编辑距离的动态规划过程](edit_distance_problem.assets/edit_distance_dp_step1.png)
@@ -413,7 +413,7 @@ $$
=== "<15>"
![edit_distance_dp_step15](edit_distance_problem.assets/edit_distance_dp_step15.png)
<p align="center"> 图编辑距离的动态规划过程 </p>
<p align="center"> 图 14-30 &nbsp; 编辑距离的动态规划过程 </p>
### 3. &nbsp; 状态压缩