第3章動(dòng)態(tài)規(guī)劃-背包問題_第1頁(yè)
第3章動(dòng)態(tài)規(guī)劃-背包問題_第2頁(yè)
第3章動(dòng)態(tài)規(guī)劃-背包問題_第3頁(yè)
第3章動(dòng)態(tài)規(guī)劃-背包問題_第4頁(yè)
第3章動(dòng)態(tài)規(guī)劃-背包問題_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

給定n種物品和一個(gè)背包,物品i的重量是wi,其價(jià)值為vi,背包的容量為C。背包問題是如何選擇裝入背包的物品,使得裝入背包中物品的總價(jià)值最大?如果在選擇裝入背包的物品時(shí),對(duì)每種物品i只有兩種選擇:裝入背包或不裝入背包,即不能將物品i裝入背包多次,也不能只裝入物品i的一部分,則稱為0-1背包問題。3.100-1背包問題3.100-1背包問題考慮有三種物品,它們的重量為(w1,w2,w3)=(2,3,4),

價(jià)值為(v1,v2,v3)=(1,2,5),當(dāng)背包容量為c=6時(shí),如何裝背包總價(jià)值最大??{x1,x2,x3}={1,0,1}v1*x1+v2*x2+v3*x3=6{x1,x2,x3}={0,0,0}{0,0,1}{0,1,0}{1,0,0}{1,0,1}{1,1,0}常規(guī)方法:枚舉

在0-1背包問題中,物品i或者被裝入背包,或者不被裝入背包,設(shè)xi表示物品i裝入背包的情況,則當(dāng)xi=0時(shí),表示物品i沒有被裝入背包,xi=1時(shí),表示物品i被裝入背包。根據(jù)問題的要求,有如下約束條件和目標(biāo)函數(shù):(式1)(式2)問題歸結(jié)為尋找一個(gè)滿足約束條件式1,并使目標(biāo)函數(shù)式2達(dá)到最大的解向量X=(x1,x2,…,xn)。3.100-1背包問題設(shè)(x1,x2,…,xn)是所給0-1背包問題的一個(gè)最優(yōu)解,則(x2,…,xn)是下面一個(gè)子問題的最優(yōu)解:如若不然,設(shè)(y2,…,yn)是上述子問題的一個(gè)最優(yōu)解,則,且。因此,,這說明(x1,y2,…,yn)是所給0-1背包問題比(x1,x2,…,xn)更優(yōu)的解,從而導(dǎo)致矛盾。背包問題的最優(yōu)子結(jié)構(gòu)性質(zhì)設(shè)背包問題子問題的最優(yōu)值為m(i,j),即m(i,j)是背包容量為j,可選擇物品為i,i+1,…,n時(shí)的最優(yōu)值。當(dāng)選擇第i個(gè)物品時(shí),。

如果不選擇第i個(gè)物品,則。由背包問題的最優(yōu)子結(jié)構(gòu)性質(zhì),我們可以建立計(jì)算m(i,j)的遞歸式如下:m(i,j)=m(i+1,j-wi)+vim(i,j)=m(i+1,j)背包問題的遞歸關(guān)系背包問題算法描述voidKnapsack(Typev,intw,intc,intn,Type**m){intjMax=min(w[n]-1,c)//背包剩余容量//for(intj=0;j<=jMax;j++)//背包不同剩余容量jjMax<c//m[n][j]=0;for(intj=w[n];j<=c;j++)//背包不同剩余容量j>c//m[n][j]=v[n];for(inti=n-1;i>1;i--){jMax=min(w[i]-1,c);for(intj=0;j<=jMax;j++)//背包不同剩余容量j

jMax<c//m[i][j]=m[i+1][j];//沒產(chǎn)生任何效益//for(intj=w[i];j<=c;j++)//背包不同剩余容量j-wi

>c//m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);

}m[1][c]=m[2][c];if(c>=w[1])m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);}voidTraceback(Type**m,intw,intc,intn,intx){for(inti=1;i<n;i++)if(m[i][c]==m[i+1][c])x[i]=0;else{x[i]=1;c=c-w[i];}x[n]=(m[n][c])?1:0;}背包問題算法描述算法復(fù)雜度分析:從m(i,j)的遞歸式容易看出,算法Knapsack需要O(nc)計(jì)算時(shí)間;Traceback需O(n)計(jì)算時(shí)間;算法總體需要O(nc)計(jì)算時(shí)間。當(dāng)背包容量c很大時(shí),算法需要的計(jì)算時(shí)間較多。例如,當(dāng)c>2n時(shí),算法需要Ω(n2n)計(jì)算時(shí)間。例:四個(gè)物品,背包容積為5,w[4]={2,1,3,2},v[4]={12,10,20,15},求最大價(jià)值m[1][c]及選取的物品編號(hào)4321432105000001015151515151520203535302537ijx4X3X2X11m[1][5]>m[2][5]所以物品1被選c–w[1]=3,查看m[2][3]>m[3][3]1j–w[2]=2,查看m[3][2]=m[4][2]0查看m[4][2]>01一個(gè)簡(jiǎn)單的例子m[1][5]<>m[2][5]4321432105000001010151515151520203535302537ij構(gòu)造最優(yōu)解x[1]=1c=5-w[1]=3m[2][3]<>m[3][3]x[2]=1c=3-w[2]=2m[3][2]=m[4][2]x[3]=0c=2m[4][2]<>0x[4]=10-1背包問題可以看作是決策一個(gè)序列(x1,x2,…,xn),對(duì)任一變量xi的決策是決定xi=1還是xi=0。在對(duì)xi-1決策后,已確定了(x1,…,xi-1),在決策xi時(shí),問題處于下列兩種狀態(tài)之一:a.背包容量不足以裝入物品i,則xi=0背包不增加價(jià)值;b.背包容量可以裝入物品i,則xi=1背包的價(jià)值增加了vi。這兩種情況下背包價(jià)值的最大者應(yīng)該是對(duì)xi決策后的背包價(jià)值。背包問題解法二令m(i,j)表示在前i(1≤i≤n)個(gè)物品中能夠裝入容量為j(1≤j≤C)的背包中的物品的最大值,則可以得到如下動(dòng)態(tài)規(guī)劃函數(shù):

m(i,0)=

m(0,j)=0(式3)式3表明:把前面i個(gè)物品裝入容量為0的背包和把0個(gè)物品裝入容量為j的背包,得到的價(jià)值均為0。背包問題解法二式4的第一個(gè)式子表明:如果第i個(gè)物品的重量大于背包的容量,則裝入前i個(gè)物品得到的最大價(jià)值和裝入前i-1個(gè)物品得到的最大價(jià)值是相同的,即物品i不能裝入背包。(式4)背包問題解法二第二個(gè)式子表明:如果第i個(gè)物品的重量小于背包的容量,則會(huì)有以下兩種情況:(1)如果把第i個(gè)物品裝入背包,則背包中物品的價(jià)值等于把前i-1個(gè)物品裝入容量為j-wi的背包中的價(jià)值加上第i個(gè)物品的價(jià)值vi;(2)如果第i個(gè)物品沒有裝入背包,則背包中物品的價(jià)值就等于把前i-1個(gè)物品裝入容量為j的背包中所取得的價(jià)值。顯然,取二者中價(jià)值較大者作為把前i個(gè)物品裝入容量為j的背包中的最優(yōu)解。(式4)背包問題解法二第一階段,只裝入前1個(gè)物品,確定在各種情況下的背包能夠得到的最大價(jià)值;第二階段,只裝入前2個(gè)物品,確定在各種情況下的背包能夠得到的最大價(jià)值;依此類推,直到第n個(gè)階段。最后,m(n,C)便是在容量為C的背包中裝入n個(gè)物品時(shí)取得的最大價(jià)值。為了確定裝入背包的具體物品,從m(n,C)的值向前推,如果m(n,C)>m(n-1,C),表明第n個(gè)物品被裝入背包,前n-1個(gè)物品被裝入容量為C-wn的背包中;否則,第n個(gè)物品沒有被裝入背包,前n-1個(gè)物品被裝入容量

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論