一.距離編輯問題
1.問題描述:s和t是2個字串,需要把s編輯成t,求s編輯成t的最小操作次數,即為編輯距離其中對s的操作只能有三種:
輸入格式:第一行是字串s,檔案的第二行是字串t。
2.問題分析:
設字串s長度為m;字串t長度為n; i,j為字元下標;
d[i,j]表示s[1,i]編輯成t[1,j]的最小距離,原始問題為d[m,n]
對於三種操作:
考察末尾元素
①刪除:
s[1,i]刪除末尾元素s[i]趨向t[1,j];
即d[i,j]=d[i-1,j]+1
②插入:
s[1,i]末尾插入元素t[j]趨向t[1,j]; 即d[i,j]=d[i,j-1]+1
③替換:
3.遞迴方程式:
對於以上三種操作的分析可以得出遞迴方程式為:
(其中d[i,j-1],d[i-1,j],d[i-1,j-1]均符合動態規劃的最優子結構性質)
4.填表
①表的維度:由d[i,j]格式可知,顯然是二維陣列
②填表範圍:由i∈[0,m],j∈[0,n]可知,表的大小為m*n
③填表順序:由遞迴方程式可知,**自上而下,從左到右填寫
④表的初始化:i=0時,所取s字串為空,所以做j次插入; 即d[0,j]=j
j=0時,所取t字串為空,所以做i次刪除; 即d[i,0]=i
5.複雜度分析:
6.偽**和具體**:
}cout 二.動態規劃相關理解
1.解題思路:求解f(n)問題時當做f(n-1)的答案已經得知,在此基礎上思考子問題和原問題的聯絡,從而得出遞迴關係式。
對動態規劃的理解此處借用知乎上的回答:
問題的答案依賴於問題的規模,也就是問題的所有答案構成了乙個數列。
2.遞迴關係式是動態規劃最重要的內容!
建立了正確的遞迴關係式後,我們可以在運用填表法時,可以通過遞迴關係式得到表的大小,表的範圍,填表順序
在編寫程式時,也是通過正確的遞迴關係式的各個部分來編寫動態規劃的核心演算法
三.結對程式設計情況概述:
主要流程是一起看題交流思路,然後各自編寫**,中間有什麼問題和不懂再****,最後debug。
我主要負責編寫**,有時候只顧自己的思路,沒有考慮隊友有沒有理解,我的問題,以後一定注意。
第三章作業
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 存兩次半年定期,年利率...