跳至主要内容

6. 深入淺出的動態規劃

第 6 章 深入淺出的動態規劃

📄️ 6.1 算法解釋

這裡我們引用一下維基百科的描述:「動態規劃(Dynamic Programming, DP)在尋找有許多重疊子問題情況的最優解時非常有效。它將問題重新分解成子問題。為了避免多次解決這些子問題,它們的結果會逐步被計算並保存,從簡單的問題開始,直到整個問題被解決。因此,動態規劃保存遞迴中的結果,從而避免在解決相同問題時浪費時間⋯⋯ 動態規劃只能應用於有最優子結構的問題。最優子結構的意思是,局部最優解能夠決定全局最優解(對某些問題來說這個要求不完全滿足,因此有時需要引入一定的近似)。簡單來說,問題能夠分解成子問題來解決。」

📄️ 6.6 背包問題

背包問題(knapsack problem) 是一種組合優化的 NP 完全問題:有 n 個物品和載重為 w 的背包,每個物品都有自己的重量 weight 和價值 value,求拿哪些物品可以使得背包所裝下物品的總價值最大。如果限定每種物品只能選擇 0 個或 1 個,則問題稱為 0-1 背包問題(0-1 knapsack);如果不限定每種物品的數量,則問題稱為 無界背包問題或完全背包問題(unbounded knapsack)。