1. 程式人生 > >編輯距離問題 解題分析

編輯距離問題 解題分析

編輯距離問題:設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]。

學無止境!大家努力!