1樓:匿名使用者
初看這類問題,第一個想到的會是貪心,但是貪心法卻無法保證一定能得到最優解,看以下例項:
貪心準則1:從剩餘的物品中,選出可以裝入揹包的價值最大的物品,利用這種規則,價值最大的物品首先被裝入(假設有足夠容量),然後是下一個價值最大的物品,如此繼續下去。這種策略不能保證得到最優解。
例如,考慮n=2, w=[100,10,10], p =[20,15,15], c =105。當利用價值貪婪準則時,獲得的解為x= [1,0,0],這種方案的總價值為20。而最優解為[0,1,1],其總價值為30。
貪心準則2:從剩下的物品中選擇可裝入揹包的重量最小的物品。雖然這種規則對於前面的例子能產生最優解,但在一般情況下則不一定能得到最優解。
考慮n= 2 ,w=[10,20], p=[5,100], c= 2 5。當利用重量貪婪策略時,獲得的解為x =[1,0], 比最優解[ 0 , 1 ]要差。
貪心準則3:價值密度pi /wi 貪婪演算法,這種選擇準則為:從剩餘物品中選擇可 裝入包的pi /wi 值最大的物品,但是這種策略也不能保證得到最優解。
利用此策略解 n=3 ,w=[20,15,15], p=[40,25,25], c=30 時的得到的就不是最優解。
由此我們知道無法使用貪心演算法來解此類問題。我們採用如下思路:
在該問題中需要決定x1 .. xn的值。假設按i = 1,2,...
,n 的次序來確定xi 的值。如果置x1 = 0,則問題轉變為相對於其餘物品(即物品2,3,.,n),揹包容量仍為c 的揹包問題。
若置x1 = 1,問題就變為關於最大揹包容量為c-w1 的問題。現設r= 為剩餘的揹包容量。在第一次決策之後,剩下的問題便是考慮揹包容量為r 時的決策。
不管x1 是0或是1,[x2 ,.,xn ] 必須是第一次決策之後的一個最優方案。也就是說在此問題中,最優決策序列由最優決策子序列組成。
假設f (i,j) 表示剩餘容量為j,剩餘物品為i,i + 1,...,n 時的最優解的值,即:利用最優序列由最優子序列構成的結論,可得到f 的遞迴式為:
當j≥wi時: f(i,j)=max
當0≤j=wi), f[i-1,j]}
這樣,就可以自底向上地得出在前n件物品中取出若干件放進揹包能獲得的最大價值,也就是f[n,c]
演算法框架如下:
for i:=0 to c do
f[0,i]:=0;
for i:=1 to n do
for j:=0 to c do
begin
f[i,j]:=f[i-1,j];
if (j>=w[i]) and (f[i-1,j-w[i]]+p[i]>f[i,j])
then f[i,j]:=f[i-1,j-w[i]]+p[i];
end;
writeln(f[n,c]);
為了進一步說明演算法的執行原理,下面給出一個例項:
【輸入檔案】104
5 1 4 3
40 10 25 30
【輸出結果】下面列出所有的f[i,j]
0 0 0 0 40 40 40 40 40 40
10 10 10 10 40 50 50 50 50 50
10 10 10 25 40 50 50 50 65 75
10 10 30 40 40 50 55 70 80 80
從以上的資料中我們可以清晰地看到每一次的列舉結果,每一行都表示一個階段。
2樓:
網上搜下,很多的,關鍵看你對此的理解!
我是小學生啦為主題的畫怎麼畫, 我是小學生啦 為題寫一篇手抄報
小丁創業 以畫娃娃為例,方法如下 1 首先,娃娃上畫出頭和辮子,如下圖所示,然後進入下一步。2 其次,完成上述步驟後,在頭髮的基礎上繪製娃娃的面部輪廓,如下圖所示,然後進入下一步。3 接著,完成上述步驟後,將娃娃的眼睛,鼻子和嘴巴畫在臉上,如下圖所示,然後進入下一步。4 然後,完成上述步驟後,將娃娃...
小學生的小製作,小學生科技小製作怎麼做呀
吊式花瓶 三隻相同式樣,相似顏色的汽水瓶,洗洗乾淨,用麻繩捆捆,連線起來,再綁上吊環 就成了一隻別有風味的吊式花瓶!雅緻花缽 這隻花缽是用什麼做的,知道嗎?一次性筷子,哈哈 沒想到吧?在裡面插上些花啊草的,擺在書桌上,雅緻極了!精巧小木筒 模仿傳統式木筒的造型,將平常吃完的雪糕棒洗乾淨,並收集來,拼...
我是小學生,求助問題,我是一名小學生,我們老師讓我們做個發明,求生活中的不便!快快快!!!!!!!!
小朋友 愛情這東西不是隨便玩的哈 不要小小的就授打擊 我估計你也就是一時衝動 我以前的同學也喜歡我們班長 但是有一次自習課班長吵了他兩句,他說了句 mb,不喜歡她了 我估計你也差不多 先問自己是不是真的喜歡 五年級才十歲吧小弟弟?我比你大十五歲,你叫我阿姨都可以了,你現在的喜歡是不具有任何意義的,不...