C 程序設計 - 動態規劃
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】C 程序設計課程
[
11 瀏覽
0 評論
2 贊
2 踩
]
概要
筆記
正文
動態規劃的使用條件
1. 我自己的理解
這個問題可以用分治法解決
用分治法有很多地方會出現重複計算
(*貌似滿足 1 則必然滿足此條,有待證明)這個問題是無後效性的
無後效性是指如果在某個階段上過程的狀態已知,則從此階段以後過程的發展變化僅與此階段的狀態有關,而與過程在此階段以前的階段所經歷過的狀態無關。
2. 老師的說法
這個問題具有遞推關係(存在 Fn = 1 + min(Fn-1 + Fn-5 + Fn-11) 這樣的遞推式)
有大量重複計算
無後效性
那麼,我們就可以從後往前算。本來要算 Fn,但是在往下遞推的過程中免不了要算 Fn-1, Fn-2, ... , F1,那麼就從 F1 開始算,把中間算出來的值都保留下來,這樣計算後面的值其實就只需要往前查找已經存在的值就可以了。
動態規劃的最關鍵三點
你如何存儲中間計算數據(也就是你的那個存儲 Fn 的數組是如何工作的)
遞推式是什麼
初始數據(不符合通項公式的那部分)是多少