動態規劃入門

2021-07-25 14:48:48 字數 628 閱讀 5941

(1)用 dp 做的題大多數返回值是int/boolean, 求max/min,不能打亂原來輸入順序。

(2)動態規劃有兩個重要定義,乙個叫 "optimal substructure",另乙個叫 "overlap subproblem".

各種排序 / tree 類問題中,都會用到 divide & conquer 的思想,去把問題分成若干個 

"disjoint"

subproblems,然後遞迴解決。

"disjoint" subproblem 在 tree 類問題上體現的最為明顯,左子樹是左子樹的問題,右子樹是右子樹的問題。因此 tree 類問題上,更多的是解決「disjoint subproblem 的整合」 還有 「非連續 subproblem 的處理」。

而動態規劃的中心思想是,面對 search tree 裡都是 "overlap subproblem",如何根據問題結構制定快取策略,避免重疊問題重複計算。

(3) 根據clrs,動態規劃分為兩種:

bottom-up (自底向上迴圈迭代)

兩種解法 big-o 時間複雜度一致,bottom-up 的 constant factor 小一些。

(4) 動態規劃的另乙個要素是 "optimal substructure":

動態規劃入門

大家可以看看這篇文章dp,哪個更容易理解就看哪個!一 動態規劃的定義 動態規劃程式設計是一種針對於解決最優化問題的一種途徑 一種方法,而不是一種特殊演算法,也就是說它沒有固定的模板。在動態規劃中,每走一步都要看看能不能最優,而且動態規劃最擅長的就是多階段問題!二 動態規劃的基本概和基本模型構成 1....

動態規劃入門

學動態規劃自然要從數字三角形開始起步,那麼我們就先從數字三角形開始。數字三角形題目 有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行之外的每個數的左下方和右下方各有乙個數,如下圖所示 3 24 10 1 4 3 2 20 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...

動態規劃入門

最長公共子串行 lcs lcs 遞迴 int findlcs string a,int n,string b,int m 採用動態規劃的策略o n m 將計算的方向顛倒,將遞迴改為迭代 0 將所有子問題 假想地 列成一張表 1 顛倒計算方向,從lcs a 0 b 0 出發依次計算出所有項。遞迴公式1...