日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法之动态规划——编辑距离问题

發布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法之动态规划——编辑距离问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編輯距離問題

時間限制(普通/Java):1000MS/3000MS 運行內存限制:65536KByte
總提交:60 測試通過:19

描述

設A和B是2個字符串。要用最少的字符操作將字符串A轉換為字符串B。這里所說的字符操作包括

(1)刪除一個字符;(2)插入一個字符;(3)將一個字符改為另一個字符。

將字符串A變換為字符串B所用的最少字符操作數稱為字符串A到B的編輯距離,記為d(A,B)。試設計一個有效算法,對任給的2個字符串A和B,計算出它們的編輯距離d(A,B)。

對于給定的字符串A和字符串B,編程計算其編輯距離d(A,B)。

輸入

輸入數的第一行是字符串A,文件的第二行是字符串B。

輸出

輸出編輯距離d(A,B)的第1行中。

樣例輸入

fxpimu
xwrs

樣例輸出

5

題目來源

算法設計與實驗題解

題目來源(http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1224)

?

對于此題,使用動態規劃算法是很容易得出最優值的,首先使用二維數組m[i][j]儲存由字符串s[1, i]與t[1, j]編輯的最短距離,這樣的話,很容易得出遞歸式:

具體代碼如下:

1 int edictlen(char *s, char *t) 2 { 3 int len1=strlen(s); 4 int len2=strlen(t); 5 int i,j; 6 int **m=new int *[len1+2]; 7 for(i=0; i<=len1; i++) 8 m[i]=new int [len2]; 9 m[0][0]=0; 10 for(i=1; i<len1; i++) m[i][0]=i; 11 for(i=1; i<len2; i++) m[0][i]=i; 12 for(i=1; i<len1; i++) 13 { 14 for(j=1; j<len2; j++) 15 { 16 if(s[i]==t[j]) m[i][j]=m[i-1][j-1]; 17 else m[i][j]=min(m[i-1][j-1],m[i-1][j],m[i][j-1])+1; 18 } 19 } 20 int temp=m[len1-1][len2-1]; 21 22 for (i=0;i<=len1;i++) 23 { 24 delete[] m[i]; 25 } 26 delete[] m; 27 return temp; 28 }

注意,字符串是從1開始算起,使用數組輸入時也需要從1開始。還有min函數就是三個數中取最小值。

本代碼經測試已經AC。

轉載于:https://www.cnblogs.com/zhuorongtan/archive/2012/10/26/2741529.html

總結

以上是生活随笔為你收集整理的算法之动态规划——编辑距离问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。