動態規劃小結

2021-08-19 17:23:30 字數 1041 閱讀 2717

近期覺得動態規劃的題目一直不能夠很好的理解,自己也不能很好的掌握,因此就做了一定量的練習,使得自己能夠掌握這一類題目的思路。

動態規劃在維基百科的定義為:一種在數學、管理科學、電腦科學、經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。

動態規劃的思想為:若要解決乙個問題,我們需要將問題分解成相似但是不同的子問題,通過保留相同的子問題的解來節省運算的時間,步驟間轉換時通過合併子問題的解來得到原問題的解,通過合併區域性最優解的解來得到全域性最優解。

三個性質:最優子結構性質,決定了全域性最優解可以通過區域性最優解來獲取。無後效性和子問題重疊性質,決定了通過儲存相同子問題的解,節省運算的時間,這也是拿空間換時間的例子。

經典問題:最長增長子串行,矩陣的最大路徑和,維特比解碼,斐波那契數列,揹包問題。

因為經典的問題大家已經分析的比較多了,我就分析幾個最近做過的leetcode上面的動態規劃的問題,拋磚引玉。

leetcode139. word break

題意:給乙個非空字串s,乙個不存在重複元素的字串的鍊錶dict,判斷s是否能夠被分割成dict裡面的部分序列。

例如:s

= "leetcode"

, dict =

["leet", "code"]

.return true because

"leetcode"

can be segmented as

"leet code"

.分析:首先需要確定狀態的個數,因為我們需要判斷dict中的某些單詞是否能夠組成完整的字串s,因此狀態的數量應該為s.length()個,加入乙個初始狀態,因此共有s.length()+1個狀態。其次是,狀態轉換的方式,遍歷dict中的單詞,如果dict中的單詞和之前的單詞一起能夠組成s那麼返回true,而之前的單詞是否能夠組成s,通過儲存狀態的陣列可以看出來。

public class solution }}

}}

return f[s.length()];

}}

動態規劃小結

現在做一下動態規劃的小結 1.揹包問題 這是一類超級經典很基礎的動態規劃,好多動態規劃題目都能用揹包的方法寫出或者是揹包的變形.這些在揹包九講中說的很清楚 鏈結 這是網上我隨便找的乙個講的比較全的部落格 這些揹包問題給我的乙個啟發就是 轉換,通過一系列的操作,轉換為01揹包 揹包給我的感受 很大一部...

動態規劃小結

1.最長上公升子串行問題 給出乙個由n個數組成的序列x 1.n 找出它的最長單調上公升子串行。即求最大的m和a1,a2 am,使得a12.動態規劃求解思路分析 o n 2 經典的o n 2 的動態規劃演算法,設a i 表示序列中的第i個數,f i 表示從1到i這一段中以i結尾的最長上公升子串行的長度...

動態規劃 小結

關鍵字 動態規劃 動態規劃其實質上是通過開闢記錄表,記錄已求解過的結果,當再次需要求解的時候,可以直接到 那個記錄表中去查詢,從而避免重複計算子問題來達到降低時間複雜度的效果。實際上是乙個空間 換時間的演算法。動態規劃,通常可以把指數級的複雜度降低到多項式級別。一般演算法書都會講能不能用動態規劃來求...