最短編輯距離

2022-09-22 02:57:10 字數 1603 閱讀 9295

這兩天玩瘋了....之前學過了忘了不少,又撿起來重新複習...

廢話不說了,上題

給定兩個字串 a

'>a

a 和 b

'>b

b,現在要將 a

'>a

a 經過若干操作變為 b

'>b

b,可進行的操作有:

刪除–將字串 a

'>a

a 中的某個字元刪除。

插入–在字串 a

'>a

a 的某個位置插入某個字元。

替換–將字串 a

'>a

a 中的某個字元替換為另乙個字元。

現在請你求出,將 a

'>a

a 變為 b

'>b

b 至少需要進行多少次操作。

輸入格式

第一行包含整數 n

'>n

n,表示字串 a

'>a

a 的長度。

第二行包含乙個長度為 n

'>n

n 的字串 a

'>a

a。第三行包含整數 m

'>m

m,表示字串 b

'>b

b 的長度。

第四行包含乙個長度為 m

'>m

m 的字串 b

'>b

b。字串中均只包含大寫字母。

輸出格式

輸出乙個整數,表示最少操作次數。

資料範圍1≤

n,m≤

1000

'>1≤n,m≤1000

1≤n,m≤1000

輸入樣例:

10 

agtctgacgc

11 agtaagtaggc

輸出樣例:
4

令f[i][j]為a序列1~i變為b序列1~j的最小的操作次數

這個為狀態轉移式

然後一共有三類操作

a序列的刪,增,改

刪:代表了a序列1~i再刪乙個就可以與b序列匹配,(意味著a序列此時必b序列多乙個(不要管後面的先))

這麼想吧,假定刪除這部操作已經結束了,那i-1與j已經匹配了,那這個的最小操作次數就是f[i-1][j]啊,再加上這步刪除的操作,就是f[i-1][j]+1

增:代表了j比i多了1,此時的序列a的1~i與b的1~j-1相匹配,最後加上現在的這個增的操作:f[i][j]=f[i][j-1]+1;

改:此時的a序列1~i-1與b序列的1~j-1已經匹配,再改一下現在的操作:f[i-1][j-1]+1(但這個是需要在a[i]!=b[j]的情況下,需要特判)

(增和改同理刪)

#includeusing

namespace

std;

const

int n=1010

;char

a[n],b[n];

intn,m;

intf[n][n];

intmain()

} cout

return0;

}/*f[i][j]表示a的前1個字母變到b的前j個字母的最小操作次數

*/

最短編輯距離 python 最短編輯距離演算法實現

一,演算法介紹 在cs124課程的第一周提到 求解兩個字串相似度的演算法 minimum edit distance 最短編輯距離 演算法。該演算法在nlp 自然語言處理 中也會用到。如何定義相似度呢?任給兩個字串x 和y,使用以下三種操作將 字串x 變到 字串y 插入 insert 操作 刪除操作...

最短編輯距離

給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式 第一行包含整數n,表示字串a的長度。第二行包含乙個長度為n的字...

最短編輯距離

題目鏈結 給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式 第一行包含整數n,表示字串a的長度。第二行包含乙個長...