動態規劃 編輯距離

2021-10-02 06:24:24 字數 797 閱讀 8177

求解編輯距離問題

一.演算法設計

這是一道經典的動態規劃問題,兩個字串的對齊方式很多,如果要將所有的對齊方式都考慮一遍,演算法的效率將十分低下。分解子問題的辦法是看兩個字串的字首,現令e[i,j]表示字串x與字串y的相應字首的編輯距離,則e[n,m]就是所求的答案。

對於三種編輯操作的變化,對於e[i-1,j-1]即前乙個進行操作

插入:e[i,j-1]+1

刪除:e[i-1,j]+1

替換:e[i-1,j-1] + diff(i,j), 其中diff(i,j)為下一字元是否相同,若相同返回0,若不相同表示需要操作返回1.

二.演算法實現

演算法的實現很簡單,不過要注意陣列下標的變化。由於string的下標是從0開始,故在判斷diff(i,j)的時候是對i-1,j-1進行判斷。注意e[i,j]是從1開始進行計算。

int

mindistance

(string word1, string word2)

for(

int j=

0;j<=n;j++

)for

(int i=

1;i<=m;i++

) dp[i]

[j]=

min(

min(dp[i-1]

[j],dp[i]

[j-1])

, dp[i-1]

[j-1

]+cost);}

}int result = dp[m]

[n];

}

動態規劃 編輯距離

1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...

動態規劃 編輯距離

給定兩個序列x和y,求從乙個序列到另乙個序列所需變換的最小次數,這裡的變換包括刪除,新增和替換,每次只對乙個元素進行操作。演算法序言 這個題目有點像之前寫的最長公共子串行問題,也是用動態規劃的演算法。能夠應用動態規劃的題目有乙個特點就是具有最優子結構,就是整個問題的最優解會包含子問題的最優解,那麼我...

動態規劃 編輯距離

將乙個字串變為另乙個字串最小操作次數,您對單詞允許以下3種操作 a 插入字元 b 刪除字元 c 替換字元 例如 a horse 變成 b ros 想法 coding utf 8 def char array replace array1,array2 row len array1 col len a...