動態規劃(dynamic programming)與分治方法相似,都是通過組合子問題的解來求解原問題。其中,分治方法將問題劃分為互不相交的子問題,遞迴的求解子問題,再將它們的解組合起來,求出原問題的解。與之相反,動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題(子問題的求解是遞迴進行的,將其劃分為更小的子子問題)。分治方法此時會做許多不必要的工作,它會反覆的求解那些公共子子問題。而動態規劃演算法對每個子子問題只求解一次,將其解儲存在乙個**中,從而無需每次求解乙個子子問題時都要重新計算。
動態規劃方法通常用來求解最優化問題(optimization problem)。這類問題可以有許多可行解,每個解都有乙個值,我們希望尋找具有最優值(最小值或最大值)的解。我們稱這樣的解為問題的乙個最優解,而不是最優解,因為可能有很多個解都達到最優值。
設計乙個動態規劃演算法的步驟:
1. 刻畫乙個最優解的結構特徵。
2. 遞迴地定義最優解的值。
3. 計算最優解的值,通常採用自底向上的方法。
4. 利用計算出的資訊構造乙個最優解。
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...
動態規劃演算法
動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...