動態規劃(算法導論學習筆記)

動態規劃是通過組合子問題的解而解決整個問題的。和分治法的區別在於:分治法算法是指將問題劃分成一些獨立的子問題,遞歸地求解各子問題,然後合併子問題的解而得到原問題的解。與此不同,動態規劃適用於子問題不是獨立的情況,也就是各子問題包含公共的子子問題,動態規劃算法是對每個子子問題只求解一次,將其結果保存在一張表中,從而避免每次遇到各個子問題時重新計算答案。

動態規劃常用於最優化問題。此類問題可能有很多種可行解。每個解有一個值,而我們希望找出一個具有最優(最大或最小)值的解。

動態規劃算法的設計可以分爲如下4個步驟:

1、描述最優解的結構。

2、遞歸定義最優解的值。

3、按自底向上的方式計算最優解的值。

4、由計算出的結果構造一個最優解。

動態規劃的最優子結構:一個問題的最優解包含了子問題的一個最優解。

是否可以採用動態規劃的兩個標誌:1、最優子結構   2、子問題重疊


在找尋最優子結構時,可以遵循一種共同的模式:

1、問題的一個解可以是做一個選擇。例如,選擇一個前一個裝配線裝配站;或者選擇一個下標以在該位置分裂矩陣鏈。做這種選擇會得到一個或多個有待解決的子問題。

2、假設對一個給定的問題,已知的是一個可以導致最優解的選擇。

3、在已知這個選擇後,要確定哪些子問題會隨之發生,以及如何最好地描述所得到的的子問題空間。

4、利用一種“剪貼”技術,來證明在問題的一個最優解中,使用的子問題的解本身也必須是最優的。通過假設每一個子問題的解都不是最優解,然後導出矛盾。


未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章