DP演算法之最短編輯距離

2021-10-03 02:32:35 字數 1117 閱讀 4734

給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有:

刪除–將字串a中的某個字元刪除。

插入–在字串a的某個位置插入某個字元。

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

現在請你求出,將a變為b至少需要進行多少次操作。

輸入格式

第一行包含整數n,表示字串a的長度。

第二行包含乙個長度為n的字串a。

第三行包含整數m,表示字串b的長度。

第四行包含乙個長度為m的字串b。

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

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

資料範圍

1≤n,m≤1000

樣例輸出樣例:

4核心演算法:考慮string a,b匹配的最後一步,分為三種操作分別考慮

(1)最後一步為刪除操作,那麼a的前i-1個字母和b的j個字母匹配(用j代表字串b的所有字母)那麼該情形的最小狀態轉移計算式f[i-1,j]+1.

(2)最後一步為增添操作,那麼a的i個字母和b的j-1個字母匹配(用j代表字串b的所有字母),那麼該情形的最小狀態轉移計算式為f[i,j-1]+1.

(3)最後一步為替換操作,考慮倆種情形,替換當前位置的字母不同,那麼a的前i-1個字母和b的前j-1個字母匹配(用j代表字串b的所有字母)

那麼該情形的最小狀態轉移計算式為f[i-1,j-1]+1,若當前位置的字母相同則不用替換;那麼狀態轉移計算式為f[i-1,j-1].

(4)最後將三種操作的取min操作,即為最短編輯距離的狀態轉移計算式:f[i,j]=min(f[i-1][j]+1,f[i][j-1]+1,f[i-1][j-1]+1/0);

#includeusing namespace std;

const int n=1010;

int n,m;

char a[n],b[n];

int f[n][n];

int main()

printf("%d\n",f[n][m]);

//表示把字串a的前n個字母變為字串b的前m個字母

return 0;

}

個人理解:dp問題大多都是考慮最後一步,然後利用此分類,歸納出狀態轉移方程進而寫出**。

最短編輯距離 dp

兩個序列s和t,求 由s變成t所需得最小編輯次數 字串a 編輯操作 字串b 只討論刪除 插入 替換3種編輯操作 1 問題結構分析 問題表示 d i,j 字串s 1.i 變為t 1.j 的最小編輯距離 明確原始問題 d n,m 字串s 1.n 變為t 1.m 的最小編輯距離 由於我們只操作s串 刪除 ...

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

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

線性DP 最短編輯距離

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