與分治演算法相似,通過組合子問題的解來求解原問題
分支方法將問題劃分為互不相交的子問題,遞迴地求解子問題,再將他們組合起來,求出原問題的解
動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題,在這種情況下,分治演算法會做許多不必要的工作反覆求解公共子子問題,動態規劃則是對每個子子問題只求解一次,將其解儲存在乙個**中,從而無需每次求解乙個子子問題時都重新計算
動態規劃通常用來求解最優化問題,這類問題有很多可行解,每個解都有乙個值,希望尋找具有最優值的解
4個步驟設計乙個動態規劃演算法:
1.刻畫乙個最優解的特徵結構 ->劃分子問題
2.遞迴地定義最優解的值 ->給出最優解的遞迴式
3.計算最優解的值,通常採用自底向上的方法
4.利用計算出的資訊構造乙個最優解
其中1-3是動態規劃演算法的基本步驟,如只需求出最優值的情形,步驟4可省略
動態規劃求解的兩種方法:
1)帶備忘的自頂向下法
-按照遞迴形式編寫過程,但處理過程中會儲存每個子問題的解
-當需要時,過程首先檢查是否已經儲存過此解: 若是,則直接返回儲存的值,否則按照通常的方式計算該子問題
2)自底向上法
-將子問題按規模排序:最小子問題、較小子問題、…、較大子問題、原問題
-按由小到大的順序依次求解:當求解某個子問題時,它所依賴的更小子問題都已求解完,結果已經儲存,故可以直接引用並組合出它自身的解
【對比簡單遞迴和動態規劃】
遞迴:硬求解。整個過程對存在的重複子問題的重複計算,造成效率低下
動態規劃:遞迴只是處理的一部分,再求解的過程中記錄了重複子問題的解,通過「引用"以前的計算結果,避免重複計算,提高效率
【動態規劃求解最優化問題應具備兩要素】最優子結構和子問題重疊
【動態規劃技術要點】用乙個表來記錄所有已解的子問題的答案;不管該子問題以後是否用到,只要被計算過,就將其結果填入表中,這時動規的基本思路,具有類似的填表模式
動態規劃實質上是一種以空間換時間的技術,它再實現的過程中,需要儲存過程中產生的各種狀態(中間結果),所以它的空間複雜度要大於其他演算法
【最長公共子串行】
最長公共子串行–兩個字串的最長公共非連續子串
動態規劃 dp
威威貓系列故事 打地鼠 威威貓最近不務正業,每天沉迷於遊戲 打地鼠 每當朋友們勸他別太著迷遊戲,應該好好工作的時候,他總是說,我是威威貓,貓打老鼠就是我的工作!無話可說.我們知道,打地鼠是一款經典小遊戲,規則很簡單 每隔乙個時間段就會從地下冒出乙隻或多隻地鼠,玩遊戲的人要做的就是打地鼠。假設 1 每...
動態規劃,dp
線性動規區間動規樹形動規 區間動規 根據題目要求,全域性最優滿足區域性最優 典型題例 加分二叉樹 洛谷1040 題目介紹 題目描述 設乙個n 個節點的二叉樹t 的中序遍歷為 1,2,3,n 其中數字 1,2,3,n 為節點編號。每個節點都有乙個分數 均為正整數 記第j 個節點的分數為dj。二叉樹t ...
DP動態規劃
include include include include include include includeusing namespace std 動態規劃 利用子問題求解整個問題 關鍵 記錄子問題的解 列出狀態轉移方程 寫法 遞推 由邊界向上,最終得到目標問題的解 遞迴 由目標問題出發,向下遞迴...