編輯距離問題 解題分析
阿新 • • 發佈:2019-02-10
編輯距離問題:設A和B是2個字串。要用最少的字元操作將字串A轉換為字串B。這裡所說的字元操作包括(1)刪除一個字元;(2)插入一個字元;(3)將一個字元改為另一個字元。將字串A變換為字串B所用的最少字元運算元稱為字串A到B的編輯距離,記為d(A,B)。
這一題很多人想到最長公共子串了,Good!但是做出來還要再多一點DP的感覺。
準備:a[0]~a[i-1]的子串記為ai,a[0]~a[i-2]的子串記為a(i-1),
b[0]~b[j-1]的子串記為bj,b[0]~b[j-2]的子串記為b(j-1)
狀態:c[i][j]記錄ai與bj的最優編輯距離
結果:c[m][n],其中m、n分別是a、b的串長
初值:b串空,要刪a串長個字元;a串空,要插b串長個字元
轉移方程:當a[i-1]=b[j-1]時,c[i][j]=c[i-1][j-1],否則,
c[i][j]=min(c[i-1][j-1]+1,c[i][j-1]+1,c[i-1][j]+1)
說明:c[i-1][j-1]+1:改a[i-1]為b[j-1];
c[i][j-1]+1:a[i-1]後插入b[j-1];
c[i-1][j]+1:刪a[i-1]。
學無止境!大家努力!