This commit is contained in:
krahets
2023-11-09 05:13:54 +08:00
parent 9a09f9407e
commit 3f666fa676
85 changed files with 619 additions and 610 deletions

View File

@ -3373,13 +3373,13 @@
<p>你可以在一个字符串中进行三种编辑操作:插入一个字符、删除一个字符、替换字符为任意一个字符。</p>
</div>
<p>如图 14-27 所示,将 <code>kitten</code> 转换为 <code>sitting</code> 需要编辑 3 步,包括 2 次替换操作与 1 次添加操作;将 <code>hello</code> 转换为 <code>algo</code> 需要 3 步,包括 2 次替换操作和 1 次删除操作。</p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的示例数据" src="../edit_distance_problem.assets/edit_distance_example.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的示例数据" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_example.png" /></a></p>
<p align="center"> 图 14-27 &nbsp; 编辑距离的示例数据 </p>
<p><strong>编辑距离问题可以很自然地用决策树模型来解释</strong>。字符串对应树节点,一轮决策(一次编辑操作)对应树的一条边。</p>
<p>如图 14-28 所示,在不限制操作的情况下,每个节点都可以派生出许多条边,每条边对应一种操作,这意味着从 <code>hello</code> 转换到 <code>algo</code> 有许多种可能的路径。</p>
<p>从决策树的角度看,本题的目标是求解节点 <code>hello</code> 和节点 <code>algo</code> 之间的最短路径。</p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_decision_tree.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="基于决策树模型表示编辑距离问题" src="../edit_distance_problem.assets/edit_distance_decision_tree.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_decision_tree.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="基于决策树模型表示编辑距离问题" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_decision_tree.png" /></a></p>
<p align="center"> 图 14-28 &nbsp; 基于决策树模型表示编辑距离问题 </p>
<h3 id="1">1. &nbsp; 动态规划思路<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
@ -3400,7 +3400,7 @@
<li>删除 <span class="arithmatex">\(s[i-1]\)</span> ,则剩余子问题 <span class="arithmatex">\(dp[i-1, j]\)</span></li>
<li><span class="arithmatex">\(s[i-1]\)</span> 替换为 <span class="arithmatex">\(t[j-1]\)</span> ,则剩余子问题 <span class="arithmatex">\(dp[i-1, j-1]\)</span></li>
</ol>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_state_transfer.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的状态转移" src="../edit_distance_problem.assets/edit_distance_state_transfer.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_state_transfer.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的状态转移" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_state_transfer.png" /></a></p>
<p align="center"> 图 14-29 &nbsp; 编辑距离的状态转移 </p>
<p>根据以上分析,可得最优子结构:<span class="arithmatex">\(dp[i, j]\)</span> 的最少编辑步数等于 <span class="arithmatex">\(dp[i, j-1]\)</span><span class="arithmatex">\(dp[i-1, j]\)</span><span class="arithmatex">\(dp[i-1, j-1]\)</span> 三者中的最少编辑步数,再加上本次的编辑步数 <span class="arithmatex">\(1\)</span> 。对应的状态转移方程为:</p>
@ -3765,49 +3765,49 @@ dp[i, j] = dp[i-1, j-1]
<div class="tabbed-set tabbed-alternate" data-tabs="2:15"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><input id="__tabbed_2_13" name="__tabbed_2" type="radio" /><input id="__tabbed_2_14" name="__tabbed_2" type="radio" /><input id="__tabbed_2_15" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">&lt;1&gt;</label><label for="__tabbed_2_2">&lt;2&gt;</label><label for="__tabbed_2_3">&lt;3&gt;</label><label for="__tabbed_2_4">&lt;4&gt;</label><label for="__tabbed_2_5">&lt;5&gt;</label><label for="__tabbed_2_6">&lt;6&gt;</label><label for="__tabbed_2_7">&lt;7&gt;</label><label for="__tabbed_2_8">&lt;8&gt;</label><label for="__tabbed_2_9">&lt;9&gt;</label><label for="__tabbed_2_10">&lt;10&gt;</label><label for="__tabbed_2_11">&lt;11&gt;</label><label for="__tabbed_2_12">&lt;12&gt;</label><label for="__tabbed_2_13">&lt;13&gt;</label><label for="__tabbed_2_14">&lt;14&gt;</label><label for="__tabbed_2_15">&lt;15&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的动态规划过程" src="../edit_distance_problem.assets/edit_distance_dp_step1.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="编辑距离的动态规划过程" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step2" src="../edit_distance_problem.assets/edit_distance_dp_step2.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step2" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step3" src="../edit_distance_problem.assets/edit_distance_dp_step3.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step3" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step4" src="../edit_distance_problem.assets/edit_distance_dp_step4.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step4" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step5" src="../edit_distance_problem.assets/edit_distance_dp_step5.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step5" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step6" src="../edit_distance_problem.assets/edit_distance_dp_step6.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step6" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step7" src="../edit_distance_problem.assets/edit_distance_dp_step7.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step7" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step7.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step8" src="../edit_distance_problem.assets/edit_distance_dp_step8.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step8" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step8.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step9" src="../edit_distance_problem.assets/edit_distance_dp_step9.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step9.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step9" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step9.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step10" src="../edit_distance_problem.assets/edit_distance_dp_step10.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step10.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step10" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step10.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step11" src="../edit_distance_problem.assets/edit_distance_dp_step11.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step11.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step11" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step11.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step12.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step12" src="../edit_distance_problem.assets/edit_distance_dp_step12.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step12.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step12" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step12.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step13.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step13" src="../edit_distance_problem.assets/edit_distance_dp_step13.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step13.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step13" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step13.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step14.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step14" src="../edit_distance_problem.assets/edit_distance_dp_step14.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step14.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step14" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step14.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step15.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step15" src="../edit_distance_problem.assets/edit_distance_dp_step15.png" /></a></p>
<p><a class="glightbox" href="../edit_distance_problem.assets/edit_distance_dp_step15.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="edit_distance_dp_step15" class="animation-figure" src="../edit_distance_problem.assets/edit_distance_dp_step15.png" /></a></p>
</div>
</div>
</div>