演算法第三章作業

2022-08-21 09:09:10 字數 910 閱讀 8779

1.1 根據最優子結構性質,列出遞迴方程式:

陣列a[ n ],從a[ 0 ]到a[ i ](0 <= i < n)的最長遞增子串行長度為l( i ),

則l( i )=, 1 <= j < i

1.2 給出填表法中表的維度、填表範圍和填表順序:

表的維度:一維

填表範圍:[1, n]

填表順序:從左到右

1.3 該演算法的時間和空間複雜度:

時間複雜度:從左到右填表遍歷陣列,填表後又要遍歷比較,所以時間複雜度為 o(n^2)

空間複雜度:填表法,一維陣列的輔助空間為表長n,所以空間複雜度為o(n)

動態規劃演算法的基本思想與分治法類似,也是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。在求解任一子問題時,列出各種可能的區域性解,通過決策保留那些有可能達到最優的區域性解,丟棄其他區域性解。依次解決各子問題,最後乙個子問題就是初始問題的解。

動規解題的一般思路:

將原問題分解為子問題(注意:①子問題與原問題形式相同或類似,只是問題規模變小了,從而變簡單了; ②子問題一旦求出就要儲存下來,保證每個子問題只求解一遍);

確定狀態(將和子問題相關的各個變數的一組取值,稱之為乙個"狀態",乙個狀態對應乙個或多個子問題所謂的在某個狀態的值,這個就是狀態所對應的子問題的解,所有狀態的集合稱為"狀態空間"。我的理解就是狀態就是某個問題某組變數,狀態空間就是該問題的所有組變數);

確定一些初始狀態(邊界條件)的值;

確定狀態轉移方程 (關鍵,由已知推未知)。

適合使用動規求解的問題:

1. 問題具有最優子結構;

2. 無後效性(一般遇到求最優解問題都適用動態規劃)。

上週的結對程式設計我們倆先是自己看題思考,再嘗試程式設計,出現疑問後再互相討論,分享各自的看法和解題思路,過程還算順利。

演算法第三章作業

1.動態規劃是一種能夠減少重複運算的一種演算法,比較適合原問題能依賴於子問題解得,而子問題也能夠依賴於子子問題解得而出的問題。其次,動態規劃更適合於資料量較多的時候的一種演算法,當資料量沒有到達一定規模的時候,動態規劃演算法不能夠體現出足夠的優勢。如對於揹包問題的貪心演算法和動態規劃法 2.1 單調...

演算法第三章作業

我覺得動態規劃是一種分治法的偽高階型,它將乙個大問題可以分成若干個小問題後,解決子問題,然後將子問題的解插入到乙個表中,用乙個表來記錄所有的已經得到答案的子問題的解,後面就可以發現,無論子問題的解是否被用到,其都在表中,接著求問題便可以節省大量的時間。3 1m i 1 n 1 m i max 1 1...

演算法第三章作業

組員 高珞洋,何汶珊 之前在學習分治法的時候也有將其和動態規劃進行比較,動態規劃能夠解題的根本要求是原問題可以細分成子問題,且原問題的最優解必包含子問題的最優解。為了更明確上述條件,從而保證題目能夠運用動態規劃求解,通常需要兩步操作 明確問題具有最優子結構,並分解問題 找出遞推關係式 狀態轉移方程 ...