動態規劃總結

2021-08-21 18:12:00 字數 2000 閱讀 2286

動態規劃演算法是用來解決一類最優化問題的演算法思想,比如說你運用了乙個演算法解決了乙個問題,但是呢,這個演算法時間複雜度比較高,那麼我們如何進行優化降低它的時間複雜度呢?當然優化演算法有很多種,這裡運用動態規劃演算法來進行優化,使用動態規劃可以讓時間複雜度降到最低,因為它是用來解決一類最優化問題的演算法思想。

那麼我們如何判斷某一類問題的求解可以運用動態規劃呢???

首先,我們需要了解下面兩組概念:重疊子問題 和 最優子結構

重疊子問題:如果乙個問題的求解可以被分為若干個子問題的求解,且這些子問題會不斷的重複出現,那麼就稱這個問題擁有重疊子問題【一般我們解決重疊子問題的時候,會利用dp陣列將這些子問題的解存放起來,當下次用到,就直接呼叫dp陣列,而不用又去重新求解,浪費時間---->這種解法我們稱之為記憶化搜尋,記憶化搜尋常用遞迴去實現:比如斐波那契數列遞迴記憶化搜尋、01揹包問題運用遞迴記憶化搜尋等等,,,我們也稱之為動態規劃的遞迴寫法】

最優子結構:如果乙個問題的最優解可以由其子問題的最優解有效構造/遞推出來,那麼稱這個問題擁有最優子結構【對於這種擁有最優子結構的問題解法,我們往往可以利用遞推去解決,即利用dp陣列進行遞推,比如揹包問題,數塔問題,最長公共子串行問題,dag最長路的求解,最長回文字串問題等等,,我們稱之為動態規劃的遞推寫法】

我們一般可以使用遞迴或者遞推的寫法來實現動態規劃,其中遞迴寫法在此處又稱作記憶化搜尋

動態規劃用遞迴去實現的計算方式是自頂向下,即從目標問題開始,將它分解成子問題的組合,直到分解至邊界為止(利用dp陣列記錄子問題的解,以便下次呼叫的時候直接返回dp記錄的結果)

動態規劃用遞推去實現的計算方式是自底向上,即從邊界開始(利用dp陣列進行初始化,即考慮邊界情況,在邊界,dp陣列是可以確定的)不斷向上解決問題,直到解決了目標問題

綜上:乙個問題需要擁有重疊子問題或最優子結構的性質,方可運用到動態規劃演算法去進行優化。

下面請自行思考以下兩個問題:

1、分治與動態規劃有什麼區別?

相同點:它們都是將原問題劃分成規模較小的子問題,最後合併子問題的解得到元問題的解

不同點:動態規劃解決的問題擁有重疊子問題,而分治沒要求(比如歸併排序,快速排序等,求解過程中是不出現重疊子問題的,因此它們那種求解方法叫分治法,而不是動態規劃解法),不擁有重疊子問題的動態規劃解法那就叫分治了,而不叫動態規劃。另外,分治法解決的問題不一定是最優的,但是動態規劃解決的問題一定是最優化問題

2、貪心與動態規劃又什麼區別?

首先,貪心和動態規劃都要求原問題擁有最優子結構,貪心演算法採用計算方式是自頂向下,貪心是一種壯士斷腕的決策,只要進行了選擇,就不會後悔,顯然這種演算法"最優選擇"的正確性需要一定的數學歸納法證明。以數塔問題為例,數塔問題雖然具有最優子結構,但是如果採用貪心演算法去解決,這種所謂的"最優選擇"是錯誤的,最後並不能得到正確的解法。

下面我們**如何利用動態規劃???

對於動態規劃可以解決的問題,總會有很多設計狀態的方式,因此我們必須設計乙個具有無後效性的狀態以及狀態轉移方程 

多階段動態規劃問題

以揹包問題為例:

我們的常規解法是利用遞迴去求解,其時間複雜度達到了2的n次方,但我們仔細發現,此問題擁有重疊子問題呀!!!(可自行畫出遞迴圖)那麼我們肯定就可以利用動態規劃去解決了,就是利用dp陣列記錄子問題解,當遇到此子問題,直接return dp[i]就行了 ,這叫做動態規劃的遞迴實現(也叫記憶化搜尋)我們再仔細研究研究,我們可以從記憶化搜尋出發推導出遞推式(對動態規劃熟練的話,可以直接判斷出此類揹包問題存在最優子結構,可自行寫出遞推式),這樣就可以採用動態規劃的遞推寫法(只需要兩個for迴圈即可搞定)。

比如:01揹包問題中,如果dp陣列只是一維,那麼無法設計出遞推式,我們可以考慮:(既然題目上是說將n件物品放入容量為v的揹包中,是否能考慮將n作為乙個維度,v又作為乙個維度呢?)將dp上公升到二維dp[i][j]。

動態規劃總結

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 12 7 近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。目前所見動態規劃可以劃分為兩類 鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。一 鏈式動態規劃 鏈式動態規劃的題...

動態規劃 總結

動態規劃是解決多階段決策問題的一種方法。如果一類問題的求解過程可以分為若干個互相聯絡的階段,在每乙個階段都需作出決策,並影響到下乙個階段的決策,從而確定了乙個過程的活動路線,則稱它為多階段決策問題。思想 在做每一步決策時,列出各種可能的區域性,解依據某種判定條件,捨棄那些肯定不能得到最優解的區域性解...

動態規劃總結

一 知識點整理 一 動態規劃是解決多階段策略問題的一種方法,運用最優性原理,排除重複計算,用空間換時間的演算法。二 動態規劃適用的題目型別有以下幾個特點 1.問題具有多階段的決策 2.每個階段對應乙個狀態 狀態變數 3.每個階段有乙個決策 不同的決策導致下乙個階段不同的狀態 4.每個階段的最優解可以...