夢幻西游挖礦賺錢(挖礦賺錢) 剖腹產(chǎn)的好處(剖腹產(chǎn)的好處有哪些) 如圖已知ab為圓o的直徑弦cd⊥ab垂足為h(如圖 已知AB是圓O的直徑 弦CD垂直AB 垂足為H) 深圳上下沙租房攻略(深圳下沙哪里租房便宜) 被2345和hao123主頁篡改修復(fù)方法 2015(2345是怎樣篡改主頁的以及如何徹底刪除) nba歷史得分榜百度一下(nba歷史得分榜百度百科) 如何防霧霾 什么口罩防霧霾效果好(什么口罩可以防霾) 制作手工的材料有哪些(制作手工的材料有哪些簡單) 天使等級 北京商標(biāo)注冊流程圖(北京商標(biāo)注冊流程圖解析) Galaxy S4 發(fā)布 全面解析新旗艦 圖(galaxy s4 上市時間) 土大黃根主要治什么病(土大黃與大黃的區(qū)別) vivo手機(jī)怎么定位(vivo手機(jī)怎么定位查找) dnf更新失敗怎么辦 安裝文件寫入失敗怎么辦(為什么dnf更新寫入失敗) 隔玻璃曬太陽能起作用(隔著玻璃曬太陽能補(bǔ)鈣) steam國服怎么玩apex(steam國服怎么玩最終幻想14) 納雍縣是哪個市 蜂蜜可以放冰箱嗎(蜂蜜可以放冰箱嗎可以放多久) 電腦怎么連熱點(diǎn)(聯(lián)想電腦怎么連熱點(diǎn)) 石器時代寵物攻略(石器時代寵物大全) 經(jīng)濟(jì)管理出版社地址(經(jīng)濟(jì)管理出版社) 芒果tv怎么看湖南衛(wèi)視(芒果tv怎么看湖南衛(wèi)視回放) iPhone13如何在微店購物?(iphone13直營店可以直接買到嗎) 淘寶海外版叫什么(淘寶海外版) 幽門螺桿菌抗體(幽門螺桿菌抗體偏高是怎么回事) iOS7.1.1固件下載(ios7.0.4固件下載) 紙的來源視頻(紙的來源) QQ農(nóng)場怎么出售種子精華(QQ農(nóng)場種子精華) 玉兔出宮怎么畫(玉兔出宮怎么畫簡單) 光電信息科學(xué)與工程是干什么工作(光電信息科學(xué)與工程是干什么的) 卡通簽名頭像怎么制作(卡通簽名頭像怎么制作軟件) 比賽規(guī)則有哪些(比賽規(guī)則) 黑夾子的小妙用(黑夾子的小妙用有哪些) dear sir or madam要大寫嗎(dear sir or madam) 保衛(wèi)蘿卜——天際2攻略(保衛(wèi)蘿卜天際2關(guān)攻略) XP輸入法狀態(tài)條不見了怎么辦(xp輸入法不顯示) 語言能力描述范文100字(語言能力描述) 電腦顯示器總是黑屏怎么辦(電腦顯示器總是黑屏怎么辦恢復(fù)) 銀屑病怎么治療最好呢(治療銀屑病有什么好辦法) 東非高原動物大遷徙(東非高原) 茶葉怎樣利用微波進(jìn)行了快速殺青處理(茶葉怎樣利用微波進(jìn)行了快速殺青處理工藝) Java:將數(shù)組排序并使用二分法判斷數(shù)組元素(java對二維數(shù)組排序) 密不可分的英語短語(密不可分的英語) 購買筆記本電腦時要注意什么(購買筆記本電腦時要注意什么事項(xiàng)) 工行如何設(shè)置信用卡分期付款 手續(xù)費(fèi)計(jì)算(工行如何設(shè)置信用卡分期付款,手續(xù)費(fèi)計(jì)算方式) 國粹苑物業(yè)電話(國粹苑) 冬季安全手抄報(bào)(冬季安全手抄報(bào)圖片簡單又漂亮) 研究表明大腦的不同區(qū)域的激活取決于音樂和語言的結(jié)構(gòu)復(fù)雜性 FDA 批準(zhǔn)首次血液檢測來預(yù)測孕婦先兆子癇 盆底疾病的早期診斷對健康至關(guān)重要
您的位置:首頁 >要聞 >

01背包問題可以用哪些方法(0 1背包問題)

導(dǎo)讀 關(guān)于01背包問題可以用哪些方法,0 1背包問題這個問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!1、"P0

關(guān)于01背包問題可以用哪些方法,0 1背包問題這個問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!

1、"P01: 01背包問題題目有N件物品和1個容量為V的背包。

2、第i件物品的費(fèi)用是c[i],價值是w[i]。

3、求解將哪些物品裝入背包可使價值總和最大。

4、基本思路這是最基礎(chǔ)的背包問題,特點(diǎn)是:每種物品僅有一件,可以選取放或不放。

5、用子問題定義狀態(tài):即f[i][v]表示前i件物品恰放入1個容量為v的背包可以獲得的最大價值。

6、則其狀態(tài)轉(zhuǎn)移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}這個方程非常重要,基本上全部跟背包相關(guān)的問題的方程都是由它衍生出來的。

7、因此有必要將它清楚解釋一下:“將前i件物品放入容量為v的背包中”這個子問題,若只考慮第i件物品的策略(放或不放),那么就可以轉(zhuǎn)化為1個只牽扯前i-1件物品的問題。

8、假如不放第i件物品,那么問題就轉(zhuǎn)化為“前i-1件物品放入容量為v的背包中”,價值為f[i-1][v];假如放第i件物品,那么問題就轉(zhuǎn)化為“前i-1件物品放入剩下的容量為v-c[i]的背包中”,此時能獲得的最大價值就是f[i-1][v-c[i]]再加上通過放入第i件物品獲得的價值w[i]。

9、優(yōu)化空間復(fù)雜度以上方法的時間和空間復(fù)雜度均為O(N*V),其中時間復(fù)雜度基本已經(jīng)不能再優(yōu)化了,但空間復(fù)雜度卻可以優(yōu)化到O(V)。

10、先考慮上邊講的基本思路怎么實(shí)現(xiàn),肯定是有1個主循環(huán)i=1..N,每回算出來二維數(shù)組f[i][0..V]的全部值。

11、那么,假如只用1個數(shù)組f[0..V],能不能保證第i次循環(huán)結(jié)束后f[v]中表示的就是我們定義的狀態(tài)f[i][v]呢?f[i][v]是由f[i-1][v]和f[i-1][v-c[i]]2個子問題遞推而來,能否保證在推f[i][v]時(也即在第i次主循環(huán)中推f[v]時)能夠得到f[i-1][v]和f[i-1][v-c[i]]的值呢?事實(shí)上,這要求在每回主循環(huán)中我們以v=V..0的順序推f[v],這樣才可以保證推f[v]時f[v-c[i]]保存的是狀態(tài)f[i-1][v-c[i]]的值。

12、偽代碼如下:for i=1..N for v=V..0 f[v]=max{f[v],f[v-c[i]]+w[i]};其中的f[v]=max{f[v],f[v-c[i]]}一句恰就相當(dāng)于我們的轉(zhuǎn)移方程f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]},由于目前的f[v-c[i]]就相當(dāng)于原來的f[i-1][v-c[i]]。

13、假如將v的循環(huán)順序從上邊的逆序改成順序的話,那么則成了f[i][v]由f[i][v-c[i]]推知,與本題意不符,但它卻是另1個重要的背包問題P02最簡捷的處理方案,故學(xué)習(xí)只用一維數(shù)組解01背包問題是十分必要的。

14、事實(shí)上,用一維數(shù)組解01背包的程序在后面會被多次用到,因此這里抽象出1個處理一件01背包中的物品過程,以后的代碼中直接調(diào)出使用不加說明。

15、過程ZeroOnePack,表示處理一件01背包中的物品,2個參數(shù)cost、weight分別表明這件物品的費(fèi)用和價值。

16、procedure ZeroOnePack(cost,weight) for v=V..cost f[v]=max{f[v],f[v-cost]+weight}注意這個過程里的處理與前面給出的偽代碼有所不一樣。

17、前面的示例程序?qū)懗蓈=V..0是為了在程序中體現(xiàn)每一個狀態(tài)都按照方程求解了,避免不必要的思維復(fù)雜度。

18、而這里既然已經(jīng)抽象成看作黑箱的過程了,就可以加入優(yōu)化。

19、費(fèi)用為cost的物品不會影響狀態(tài)f[0..cost-1],這是顯然的。

20、有了這個過程以后,01背包問題的偽代碼就可以這樣寫:for i=1..N ZeroOnePack(c[i],w[i]);初始化的細(xì)節(jié)問題我們看見的求最優(yōu)解的背包問題題目中,事實(shí)上有兩種不太相同的問法。

21、有的題目要求“恰好裝滿背包”時的最優(yōu)解,有的題目則并木有要求必須把背包裝滿。

22、一種區(qū)別這兩種問法的實(shí)現(xiàn)方法是在初始化的時候有所不一樣。

23、假如是第一種問法,要求恰好裝滿背包,那么在初始化時除了f[0]為0其它f[1..V]均設(shè)為-∞,這樣就可以保證最終得到的f[N]是一種恰好裝滿背包的最優(yōu)解。

24、假如并木有要求必須把背包裝滿,而是只期望價錢盡量大,初始化時應(yīng)當(dāng)將f[0..V]全部設(shè)為0。

25、為啥呢?可以這樣理解:初始化的f數(shù)組事實(shí)上就是在木有任何物品可以放入背包時的合法狀態(tài)。

26、假如要求背包恰好裝滿,那么此時僅有容量為0的背包可能被價值為0的nothing“恰好裝滿”,其它容量的背包均木有合法的解,屬于未定義的狀態(tài),它們的值就都應(yīng)當(dāng)是-∞了。

27、假如背包并非必須被裝滿,那么任何容量的背包都有1個合法解“啥都不裝”,這個解的價值為0,因此初始時狀態(tài)的值也就全部為0了。

28、這個小技巧完全可以推廣到其它類型的背包問題,后面也就不再對進(jìn)行狀態(tài)轉(zhuǎn)移之前的初始化進(jìn)行講解。

29、小結(jié)01背包問題是最基本的背包問題,它包含了背包問題中設(shè)計(jì)狀態(tài)、方程的最基本思想,另外,別的類型的背包問題往往也可以轉(zhuǎn)換成01背包問題求解。

30、故一定要仔細(xì)體會上邊基本思路的得出方法,狀態(tài)轉(zhuǎn)移方程的意義,以及最后怎樣優(yōu)化的空間復(fù)雜度。

31、"。

本文分享完畢,希望對大家有所幫助。

標(biāo)簽:

免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請聯(lián)系刪除!

最新文章