1. 程式人生 > >動態規劃--計算字元距離

動態規劃--計算字元距離

Levenshtein 距離,又稱編輯距離,指的是兩個字串之間,由一個轉換成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。編輯距離的演算法是首先由俄國科學家Levenshtein提出的,故又叫Levenshtein Distance。

Ex:

字串A:abcdefg

字串B: abcdef

通過增加或是刪掉字元”g”的方式達到目的。這兩種方案都需要一次操作。把這個操作所需要的次數定義為兩個字串的距離。

要求:

給定任意兩個字串,寫出一個演算法計算它們的編輯距離。 求解過程:

生成大小為(N+1)(M+1)的矩陣dp. dp[x][y]表示A前x個字串編輯成 B前y個字元所花費的代價. 對於第一行來說,dp[0][y]表示將一個空串變為B的前y個字元組成的子串,花費的代價為ic

y; 同理,對於第一列dp[x][0] = x*dc;

對於其他的位置,dp[x][y]可能有以下幾種取值: dp[x-1][y-1]+rc;//A[x-1]!=B[y-1] 將前x-1個字元變為B前y-1個字元,再將最後一個字元替換. dp[x-1][y-1];//A[x-1]==B[y-1] 將前x-1個字元變為B前y-1個字元,最後一個不用修改. dp[x-1][y]+dc;//刪除一個字元,將前x-1個字元變為B的前y個字元 dp[x][y-1]+ic;//將A前x-1個字元變為B的前y個字元,再插入一個字元 dp[x][y]的值就為以上四者最小的一個. 求解完畢,dp[n][m]即為所求.