浅谈动态规划dp
動態規劃(英語:Dynamic programming,簡稱 DP)是一種在數學、管理科學、計算機科學、經濟學和生物信息學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。
動態規劃常常適用于有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少于樸素解法。
動態規劃背后的基本思想非常簡單。大致上,若要解一個給定問題,我們需要解其不同部分(即子問題),再根據子問題的解以得出原問題的解。動態規劃往往用于優化遞歸問題,例如斐波那契數列,如果運用遞歸的方式來求解會重復計算很多相同的子問題,利用動態規劃的思想可以減少計算量。
通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,具有天然剪枝的功能,從而減少計算量:一旦某個給定子問題的解已經算出,則將其記憶化存儲,以便下次需要同一個子問題解之時直接查表。這種做法在重復子問題的數目關于輸入的規模呈指數增長時特別有用。
某種程度上,貪心算法和動態規劃有一定的相似性都是先分解子問題。但動態規劃實質上是窮舉法,只是會省去重復計算,更像是一種途徑和方法而不是一種特殊算法。而貪心算法每次都選擇局部的最優解,并不考慮這個局部最優選擇對全局的影響,最后產生整體最優解或其近似解。
總結
- 上一篇: foreach形式的for语句
- 下一篇: 需求、需求工程与需求工程师 — 4. 咨