演算法第三章作業

2022-07-14 09:45:13 字數 1096 閱讀 9525

1. 任選作業題」單調遞增最長子序列「、」挖地雷「、」編輯距離問題「中的一題分析。

3-3 挖地雷 

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

m[i] = max

其中,m[i] 表示從 地窖i  到 地窖n 挖到最多的地雷數,a[j] 表示 地窖j 擁有的地雷數,i < j <= n  , 並且 地窖i 到 地窖j 有通路。

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

①由於用m[i] 表示從 i 到 n 挖到最多的地雷數,因此表的維度是一維的。

②填表範圍,即 i 的取值範圍是 0 到 n。

③填表順序,由於m[i] 取決於 m[j] 的值,並且 i 與 j 的關係為 i < j <= n,即 j 大於 i,所以應該是從右往左填一維數表,即從大到小填。

④填表的邊界,當 i = j = n時,m[n] = a[n]。

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

時間複雜度:計算從 i 到 n 挖到最多的地雷數里,i 的取值是從0到n,而 j 的取值是從 (i+1) 到n。因此時間複雜度為o(n²) 。

空間複雜度:由於需要儲存 「地窖i 到 地窖j 是否存在通路」的情況,在本題中我用了二維陣列在儲存該資訊,因此空間複雜度為o(n²)。

2. 你對動態規劃演算法的理解

動態規劃演算法的兩個基本要素:①最優子結構性質決定了演算法的正確性,②重疊子問題性質影響了演算法的有效性。

動態規劃,其中「如何拆分子問題,分析出最優子結構性質,進而列出遞迴方程式」這一步是最關鍵的。接下來根據遞迴方程式就可以分析出填表法中表的維度、填表範圍和填表順序等。另外,

表的邊界也需要特別考慮,邊界可能要附上初始值。

3. 說明結對程式設計情況

剛開始,我和隊友都不太熟悉動態規劃的分析思路,分析問題結構的邏輯比較混亂、跳躍,常常兩個人都忽略了邊界情況的考慮。在把演算法思想轉化為實際**的過程中,我會犯一些低階錯誤,隊友能夠幫我指出來,最後才把題目寫出來。在和隊友交流動態規劃演算法思想的過程中,能夠進一步地理解它的乙個實現過程。

演算法第三章作業

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

演算法第三章作業

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

演算法第三章作業

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