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 替換為 ...