This commit is contained in:
krahets
2026-08-18 03:09:26 +08:00
parent 0375f25b66
commit fde23f369e
158 changed files with 312 additions and 282 deletions
@@ -4651,7 +4651,7 @@
<p><strong>編輯距離問題</strong></p>
<ul>
<li>編輯距離(Levenshtein 距離)用於衡量兩個字串之間的相似度,其定義為從一個字串到另一個字串的最少編輯步數,編輯操作包括新增、刪除、替換。</li>
<li>編輯距離問題的狀態定義為將 <span class="arithmatex">\(s\)</span> 的前 <span class="arithmatex">\(i\)</span> 個字元更改為 <span class="arithmatex">\(t\)</span> 的前 <span class="arithmatex">\(j\)</span> 個字元所需的最少編輯步數。當 <span class="arithmatex">\(s[i] \ne t[j]\)</span> 時,具有三種決策:新增、刪除、替換,它們都有相應的剩餘子問題。據此便可以找出最優子結構與構建狀態轉移方程。而當 <span class="arithmatex">\(s[i] = t[j]\)</span> 時,無須編輯當前字元。</li>
<li>編輯距離問題的狀態定義為將 <span class="arithmatex">\(s\)</span> 的前 <span class="arithmatex">\(i\)</span> 個字元更改為 <span class="arithmatex">\(t\)</span> 的前 <span class="arithmatex">\(j\)</span> 個字元所需的最少編輯步數。當 <span class="arithmatex">\(s[i-1] \ne t[j-1]\)</span> 時,具有三種決策:新增、刪除、替換,它們都有相應的剩餘子問題。據此便可以找出最優子結構與構建狀態轉移方程。而當 <span class="arithmatex">\(s[i-1] = t[j-1]\)</span> 時,無須編輯當前字元。</li>
<li>在編輯距離中,狀態依賴其正上方、正左方、左上方的狀態,因此空間最佳化後正序或倒序走訪都無法正確地進行狀態轉移。為此,我們利用一個變數暫存左上方狀態,從而轉化到與完全背包問題等價的情況,可以在空間最佳化後進行正序走訪。</li>
</ul>