動態規劃和分治法類似,也是將問題分解為一些列的子問題,通過尋找子問題的最優解來得到問題的解。
區別在於:
1,分治法的子問題相互獨立,相同的子問題被重複計算,而動態規劃方法解決了這一問題。(重複子問題的計算導致很多用遞迴實現的分治法方案的時間複雜度按指數增長,而引入動態規劃方法或者備忘錄方法,複雜度降低到多項式時間)
2,分治法是按自上而下的的方法,通過遞迴將原問題逐步分解為子問題;
動態規劃法是自底向上的,從子問題入手,逐步擴充套件至原問題。
動態規劃求解問題的兩個要素:最優子結構特性和重疊子問題,用這倆要素判定乙個實際問題是否適合用動態規劃方法求解。
1,多段圖問題
2,資源分配問題
3,關鍵路徑問題
4,最短路徑問題(floyd演算法)
5,矩陣兩乘問題
6,最長公共子串行問題
7,0/1揹包問題
8,流水線作業問題
9,最優二叉搜尋樹
動態規劃方法
1 思想 避免重複的計算,先將計算過的值儲存下來,如果發現有相同的步驟,直接將事先儲存好的值拿出來。動態規劃其實質上是通過開闢記錄表,記錄已求解過的結果,當再次需要求解的時候,可以直接到那個記錄表中去查詢,從而避免重複計算子問題來達到降低時間複雜度的效果。實際上是乙個空間換時間的演算法。動態規劃,在...
動態規劃 換錢方法
換錢方法 給定陣列arr,arr中所有的值都是整數且不重複,每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數,aim代表要找的錢數,求換錢有多少種方法。思路 1.建立一張二維表dp,m n 其中m表示貨幣的種類,行n表示 target 1 即是目標錢數 1 即是 下表以目標錢數...
動態規劃優化方法
之前我們學習過動態規劃方法,但是並沒有對dp進行系統細緻的優化。今天來看一下dp的優化方法。做變換 等式就可以看作一條直線,每個j都確定出乙個點 x,y 對於當前要求解的i,其斜率已確定 且隨i單增 要使dp i 最大即要使這條直線過某乙個j形成的點並使得的截距最小。假設之前已處理完前9個點,將他們...