3-4 編輯距離問題 (25分)
設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 (1)刪除乙個字元; (2)插入乙個字元; (3)將乙個字元改為另乙個字元。 將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d(a,b)。 對於給定的字串a和字串b,計算其編輯距離 d(a,b)。
第一行是字串a,檔案的第二行是字串b。
輸出編輯距離d(a,b)
在這裡給出一組輸入。例如:
fxpimu
xwrs
在這裡給出相應的輸出。例如:
5
1.1 根據最優子結構性質,列出遞迴方程式
首先假設兩個字串都為空,則需要0步就可轉化。所以**最左上角要寫0,然後字串a加入乙個字元『d』,此時需要1步才能做到轉化,同理,若是b為空字串,a字串有幾個字元,就要做幾步刪除操作。若是字串b中有乙個字元,如上圖中的「a」,重複a字串從「 」到「daaqerdwq」不斷加入字元的過程,即可得出如下規律:
d[i][j]=min(min(d[i-1][j]+1,d[i][j-1]+1),(a[j-1]==b[i-1]?d[i-1][j-1]:d[i-1][j-1]+1));
1.2 給出填表法中表的維度、填表範圍和填表順序
二維表,填表範圍:01.3 分析該演算法的時間和空間複雜度
#includeusingnamespace
std;
int d(string a,string
b)
for(int i=1;i<=lenb;i++)
for(int i=1;i<=lenb;i++)
return
s[lenb][lena]; }
intmain()
o(lena*lenb)
動態規劃演算法與分治法類似,基本思想是將待求解問題分解為若干個子問題,先求子問題,再結合子問題的解得到原問題的解,與分治法不同的是,適合用動態規劃演算法的問題往往不是互相獨立的。
一開始接觸動態規劃總是摸不著方向,和隊友糾結爭論了很久關於填表方向的問題,後來在隊友幫助下搞明白思路,通過結對程式設計讓我更加了解動態規劃的演算法,更好從多個角度思考一道題目的多種解題思路。
第三章作業
1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸出各個數...
第三章作業
第三章作業 習題5,求e的近似值 求自然對數e的近似值 includeusing namespace std int n return a int main cout 習題6 求圓周率 求圓周率的近似值 include includeusing namespace std int main cout...
第三章作業
第三章 最簡單的c程式設計 順序程式設計 例3.1 有人用溫度計測量出用華氏法表示的溫度 如64 f 今要求把它轉換為以攝氏法表示的溫度 如17.8 c 例 3.2 計算存款利息。有1000元,想存一年。有3種方法可選 1 活期,年利率為r1 2 一年期定期,年利率為r2 3 存兩次半年定期,年利率...