動態規劃--計算字元距離
阿新 • • 發佈:2018-12-11
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
對於其他的位置,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]即為所求.