《演算法導論》中第15章這樣介紹動態規劃:
動態規劃(dynamic programming)與分治法相似,都是通過組合子問題的解來求解原問題(在這裡,programming指的是一種**法,並非編寫電腦程式)。如前述,分治法將問題劃分為互不相交的子問題,遞迴地求解子問題,再將它們的解組合起來,求出原問題的解。與之相反,動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題(子問題的求解是遞迴進行的,將其劃分為更小的子子問題)。在這種情況下,分治演算法會做出許多不必要的工作,它會反覆地求解那些公共子子問題。而動態規劃演算法對每個子子問題只求解一次,從而無需求解乙個子子問題時都重新計算,避免了這種不必要的計算工作。
動態規劃方法通常用來求解最優化問題。這類問題可以有很多可行的解,每個解都有乙個值,我們希望尋找具有最優值的解。我們稱這樣的解為問題的乙個最優解,而不是最優解,因為可能有多個解都達到最優值。
我們通常按照如下4個步驟來設計乙個動態規劃演算法:、
1、刻畫乙個最優解的結構特徵。(找到「狀態」和「邊界」,也就是構造最優解的形式,一般有兩種,中間狀態和累積狀態)
2、遞迴地定義最優解的值。(找出遞推方程)
3、計算最優解的值,通常採用自底向上的方法。
4、利用計算資訊構造乙個最優解。
步驟1~3是動態規劃演算法求解問題的基礎。如果我們僅僅需要乙個最優解的值,而非最優解本身,可以忽略步驟4,。如果確實要做到步驟4,又是就需要執行步驟3的過程中維護一些額外的資訊,以便來構造乙個最優解。
快速入門演算法 動態規劃
動態規劃問題的一般形式是 最值問題 如 最長遞增子串行 最小距離等等 那麼計算機如何求解動態規劃問題,其實就只有一種方法 窮舉法 沒錯,就是暴力的窮舉出所有情況,然後在所有答案中找到乙個最優的解,這就是動態規劃最基本的思想。但是窮舉是基本思想,動態規劃還有其獨特之處,首先動態規劃這類問題存在 重疊子...
演算法之動態規劃
一 思想 首先要了解 動態規劃 必須先知道什麼叫做 多階段決策 百科裡面對這個問題解釋的很全,我就load一段出來,大家得要好好品味,好好分析。上面圖中最後一句話就定義了動態規劃是要幹什麼的問題。二 使用規則 現在我們知道動態規劃要解決啥問題了,那麼什麼情況下我們該使用動態規劃呢?最優化原理 最優子...
演算法之動態規劃
鋼條切割問題 鋼條切割問題出現在 演算法導論 一書第204頁,作為動態規劃的例題出現,該題內容如下 serling公司購買長鋼條,將其切割為短鋼條 切割工序本身沒有成本支出。公司管理層希望知道最佳的切割方案。假定我們知道serling公司 一段長為i英吋的鋼條的 為pi i 1,2,單位為美元 鋼條...