演算法設計與分析 動態規劃

2022-08-10 03:09:11 字數 1310 閱讀 7050

分治技術的問題:

子問題是相互獨立的

如果子問題不是相互獨立的,分治演算法將重複計算公共子空間,效率很低

提高效率的方法:

從規模最小的子問題開始計算

用恰當資料結構儲存子問題的解,供以後查詢

確保每個子問題只求解一次

優化問題:

給定一組約束條件和乙個代價函式,在解空間中搜尋具有最小或最大代價的優化解

很多優化問題可分為多個子問題,子問題相互關聯,子問題的解被重複使用

動態規劃演算法特點

把原始問題劃分成一系列子問題

求解每個子問題僅一次,並將其結果儲存在乙個表中,以後用到時直接訪問,不重複計算,節省計算時間

自底向上地計算

適用範圍:

使用dynamic programming的條件

optimal substructure(優化子結構)

當乙個問題的優化解包含了子問題的優化解時,我們說這個問題具有優化子結構

縮小子問題集合,只需那些優化問題中包含的子問題,減低實現複雜性

優化子結構使我們能自下而上地完成求解過程

subteties(重複子問題)

在問題的求解過程中,很多子問題的解將被多次使用

動態規劃演算法的設計步驟

分析優化解的結構

遞迴的定義最優解的代價

自底向上的計算優化解的代價儲存之,並獲取構造最優解的資訊

根據構造最優解的資訊構造優化解

子串行:x=(a,b,c,b,d,b),z=(b,c,d,b)是x的子串行,w=(b,d,a)不是x的子串行。

公共子串行:z是序列x與序列y的公共子串行如果z是x的子串行也是y的子串行。

最長公共子串行(lcs)問題:

輸入:x=(x1,x2,...,xn),y=(y1,y2,...,ym)

輸出:z=x與y的最長公共子串行

有優化子結構,子問題有重疊性,採用動態規劃。

演算法設計與分析 動態規劃

最大子段和問題 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。i.當所有整數均為負值時定義其最大子段和為0。所求的最優值為 i.例如,當 a1,a2,a7,a8 1,3,7,8,4,12,10,6 時,最大子段和為 bj是1到j位置的最大子段和 由bj的定義易知,當...

演算法設計與分析之動態規劃

include void main system pause 用陣列實現斐波那契函式 include include intmain int i 0 for i 2 i 20 i for i 0 i 20 i system pause return0 遞迴實現斐波那契函式 include intfi...

C C 演算法分析與設計 動態規劃(採藥)

辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採...