G 編輯距離

2022-09-19 00:51:08 字數 1671 閱讀 1931

@author 夜楓

編輯距離,又稱levenshtein距離(也叫做edit distance),是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。

例如將kitten一字轉成sitting:

sitten (k->s)

sittin (e->i)

sitting (->g)

所以kitten和sitting的編輯距離是3。俄羅斯科學家vladimir levenshtein在2023年提出這個概念。

給出兩個字串a,b,求a和b的編輯距離。

input

第1行:字串a(a的長度 <= 1000)。 第2行:字串b(b的長度 <= 1000)。

output

輸出a和b的編輯距離

根據圖可知,我們只需要不斷的判斷最後一對,取得最小距離,則可取得全部字串的最小距離,

假設d[i][j]為s1的前 i 個字元 到s2的前j個字元的距離

則d[i][j]的情況有以下幾種情況:

1.s1[i]==s2[j] -> d[i][j]=d[i-1][j-1]

2.s1[i]!=s2[j] 且 s1.lens2.len 則d[i][j]=d[i-1][j]+1;

4.s1[i]!=s2[j] 且s1.len == s2.len 則d[i][j]=d[i-1][j-1]+1

綜合上述,d[i][j]=min(d[i][j-1]+1,d[i-1][j]+1,d[i-1][j-1]+(s1[i]==s2[j] ? 0 : 1));

思路到這裡就可以開始做題了,

我們需要計算d[i][j] 1<=i=s1.len && 1<=j<=s2.len

則需要知道d[0][i],d[j][0]的距離

d數值初始化如下

;//初始化dp0為0

for(

int i=

0;i<=l2;

++i)

for(

int j=

0;j<=l1;

++j)

for(

int i=

1;i<=l1;

++i)

dp[i]

[j]=

min(l,

min(d,r));

}}return dp[l1]

[l2];}

intmain()

編輯距離及編輯距離演算法

編輯距離概念描述 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 俄...

編輯距離及編輯距離演算法

include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...

編輯距離及編輯距離演算法

include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...