最短編輯距離 dp

2022-06-29 17:09:14 字數 904 閱讀 8310

兩個序列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串(刪除、插入、替換),與最長公共子串行有本質區別

s[i]!=t[j]

刪除d[i,j]=d[i-1,j]+1

插入d[i,j]=d[i,j-1]+1

替換d[i,j]=d[i-1,j-1]+1

d[i,j]=min(d[i-1,j]+1, d[i,j-1]+1, d[i-1,j-1]+1)

s[i]=t[j]

不操作d[i,j]=d[i-1,j-1]

自底向上計算

初始化s[i,0]=i;s[0,j]=j

最優解追蹤rec[i,j]=u,l,lu

rec[i,0]=u,rec[0,j]=l

#include#define max 100

int s[max],t[max], dp[max][max], rec[max][max], sl, tl;//

0替換or無操作,1插入,-1刪除

void mineditdist(int sl, int

tl)else}}

return;}

void printr(int i, int

j)else

else

if(rec[i][j]==1

)

else

}return;}

intmain()

線性DP 最短編輯距離

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

DP演算法之最短編輯距離

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

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

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