動態規劃之編輯距離 2021 1 29

2021-10-18 07:37:13 字數 1459 閱讀 2731

s1:

family

s2:frame

s1:family

s2:frame

編輯距離:4d

:012

3451

0123

4211

1233

2221

2433

3225

4443

3655

544--------------------------------

process

exited

after

10.78

seconds

with

return

value

0請按任意鍵繼續..

.

//動態規劃-編輯距離

#include

#include

#include

using

namespace std;

intmin

(int a,

int b,

int c)

intedit_distance

(string&s1,string&s2,

int*

*d)//求d[i][j]

d[i]

[j]=

min(d[i-1]

[j]+

1,d[i]

[j-1]+

1,d[i-1]

[j-1

]+diff);}

}return d[s1.

size()

][s2.

size()

];}int

main

(int argc,

char

**ar**)

//初始化d陣列

//第一行

for(

int i=

0;isize()

+1;i++

)//第一列

for(

int i=

0;isize()

+1;i++

)//計算編輯距離

//即將s1編輯為s2

cout<<

"編輯距離: "

<<

edit_distance

(s1,s2,d)

<;//輸出d陣列

cout<<

"d:\n"

;for

(int i=

0;isize()

+1;i++)

cout<<

"\n";}

//釋放d陣列記憶體

for(

int i=

0;isize()

;i++

)free

(d);

return0;

}

動態規劃之編輯距離

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

動態規劃之編輯距離問題

由公式可以看出,i 1,j 對應刪除操作,i,j 1 對應插入操作。可以這樣理解,現在耗費了di 1,j步操作將字串a 1,i 1 轉換成了b 1,j 則在將a 1,i 轉換成b 1,j 時,我們可以直接刪掉字元a i 問題變成a 1,i 1 轉換成b 1,j 從而dij就等於di 1,j 1。同理...

376,動態規劃之編輯距離

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 ...