動態規劃的詳細解析(01揹包問題)

2022-09-17 12:30:11 字數 1825 閱讀 9567

演算法分析之動態規劃詳解

先舉個例子01揹包問題具體例子:假設現有容量15kg的揹包,另外有4個物品,分別為a1,a2,a3, a4。物品a1重量為3kg,價值為4;物品a2重量為4kg,價值為5;物品a3重量為5kg,價值為6, a4重6千克,價值為7。將哪些物品放入揹包可使得揹包中的總價值最大?

對於這樣的問題,如果如上述所涉及的資料比較少的時候,我們通過列舉就能算出來,例如,上邊的例子的答案是:將a4和a3與a2放入揹包中,這樣總重量為6+5+4=15,總價值為5+6+7=18,這樣總價值最大。但是如果上述給出的條件很多,此時我們光靠用眼睛看是絕對不行的,所以我們要用上動態規劃的思想。

點選開啟鏈結  

動態規劃的基本思想與分治法類似,也是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。在求解任一子問題時,列出各種可能的區域性解,通過決策保留那些有可能達到最優的區域性解,丟棄其他區域性解。依次解決各子問題,最後乙個子問題就是初始問題的解。

由於動態規劃解決的問題多數有重疊子問題這個特點,為減少重複計算,對每乙個子問題只解一次,將其不同階段的不同狀態儲存在乙個二維陣列中。

與分治法最大的差別是:適合於用動態規劃法求解的問題,經分解後得到的子問題往往不是互相獨立的(即下乙個子階段的求解是建立在上乙個子階段的解的基礎上,進行進一步的求解)。

我們以01揹包為例子:

思路:先將原始問題一般化,欲求揹包能夠獲得的總價值,即欲求前i個物體放入容量為m(kg)揹包的最大價值c[i][m]——使用乙個陣列來儲存最大價值。而前i個物體放入容量為m(kg)的揹包,又可以轉化成前(i-1)個物體放入揹包的問題。下面使用數學表示式描述它們兩者之間的具體關係。

表示式中各個符號的具體含義。

w[i] : 第i個物體的重量;

p[i] : 第i個物體的價值;

c[i][m] :前i個物體放入容量為m的揹包的最大價值;

c[i-1][m] :前i-1個物體放入容量為m的揹包的最大價值;

c[i-1][m-w[i]] : 前i-1個物體放入容量為m-w[i]的揹包的最大價值;

由此可得:

c[i][m]=max(此時用到遞迴)

引用網上的乙個圖更能說明情況:

問題分析:令v(i,j)表示在前i(1<=i<=n)個物品中能夠裝入容量為就j(1<=j<=c)的揹包中的物品的最大價值,則可以得到如下的動態規劃函式:

(1)   v(i,0)=v(0,j)=0

(2)   v(i,j)=v(i-1,j)  j

v(i,j)=maxj>wi

(1)式表明:如果第i個物品的重量大於揹包的容量,則裝人前i個物品得到的最大價值和裝入前i-1個物品得到的最大價是相同的,即物品i不能裝入揹包;第(2)個式子表明:如果第i個物品的重量小於揹包的容量,則會有一下兩種情況:(a)如果把第i個物品裝入揹包,則揹包物品的價值等於第i-1個物品裝入容量位j-wi 的揹包中的價值加上第i個物品的價值vi; (b)如果第i個物品沒有裝入揹包,則揹包中物品價值就等於把前i-1個物品裝入容量為j的揹包中所取得的價值。顯然,取二者中價值最大的作為把前i個物品裝入容量為j的揹包中的最優解。

#include#includeint v[200][200];//前i個物品裝入容量為j的揹包中獲得的最大價值

int max(int a,int b) //乙個大小比較函式,用於當總重大於第i行時

int knap(int n,int w,int v,int x,int c)

else

x[i]=0;

}printf("選中的物品是:\n");

for(i=0;i

暫時就理解這麼多,還在不斷學習中。

動態規劃揹包問題 01揹包(超詳細)

問題背景 設有容量為v的揹包,有n種物品,每件物品的體積是c i 對應的價值是v i 每種物品只有乙個,要使揹包中所裝物品的價值總和最大,問該如何選擇。用乙個二維陣列f i j 來表示i件物品,在用j的容量時的最大的價值。因為對於每一件物品,你選擇就只能是裝或者不裝這件物品。例如 物品 a b c ...

動態規劃揹包問題 01揹包

問題描述 n種物品,每種乙個。第i種物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包,使得揹包內物品不超過c的前提下,重量最大。問題分析 宣告乙個f n c 的陣列。f i j 表示把前i件物品都裝到容量為j的揹包所獲得的最大重量。當 j v i 時,揹包容量不足以放下第 i 件物品,f ...

動態規劃 揹包問題 01揹包

有n種物品和乙個容量為v的揹包,每種物品僅用一次。第i件物品的費用是w i 價值是v i 求解將哪些物品裝入揹包可使價值總和最大。例如 n 5,v 10 重量 價值 第乙個物品 10 5 第二個物品 1 4 第三個物品 2 3 第四個物品 3 2 第五個物品 4 1 首先我們考慮貪心策略,選取最大價...