貪心法所不能解決的01揹包問題即不可分割的問題
01揹包問題是 考慮整體最優解
貪心策略適用的前提是:區域性最優策略能導致產生全域性最優解。
例題分析編輯
例題1、
[0-1揹包問題]有乙個揹包,揹包容量是m=150。有7個物品,物品不可以分割成任意大小。
要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。
物品 a b c d e f g
重量 35kg 30kg 6kg 50kg 40kg 10kg 25kg
價值 10 40 30 50 35 40 30
分析:目標函式:∑pi最大
約束條件是裝入的物品總重量不超過揹包容量:∑wi<=m(m=150)
⑴根據貪心的策略,每次挑選價值最大的物品裝入揹包,得到的結果是否最優?
⑵每次挑選所佔重量最小的物品裝入是否能得到最優解?
⑶每次選取單位重量價值最大的物品,成為解本題的策略。
值得注意的是,貪心演算法並不是完全不可以使用,貪心策略一旦經過證明成立後,它就是一種高效的演算法。
貪心演算法還是很常見的演算法之一,這是由於它簡單易行,構造貪心策略不是很困難。
可惜的是,它需要證明後才能真正運用到題目的演算法中。
一般來說,貪心演算法的證明圍繞著:整個問題的最優解一定由在貪心策略中存在的子問題的最優解得來的。
對於例題中的3種貪心策略,都是無法成立(無法被證明)的,解釋如下:
⑴貪心策略:選取價值最大者。
反例:w=30
物品:a b c
重量:28 12 12
價值:30 20 20
根據策略,首先選取物品a,接下來就無法再選取了,可是,選取b、c則更好。
⑵貪心策略:選取重量最小。它的反例與第一種策略的反例差不多。
⑶貪心策略:選取單位重量價值最大的物品。
反例:w=30
物品:a b c
重量:28 20 10
價值:28 20 10
根據策略,三種物品單位重量價值一樣,程式無法依據現有策略作出判斷,如果選擇a,則答案錯誤。
【注意:如果物品可以分割為任意大小,那麼策略3可得最優解】
對於選取單位重量價值最大的物品這個策略,可以再加一條優化的規則:對於單位重量價值一樣的,則優先選擇重量小的!這樣,上面的反例就解決了。
但是,如果題目是如下所示,這個策略就也不行了。
w=40
物品:a b c
重量:25 20 15
價值:25 20 15
附:本題是個dp問題,用貪心法並不一定可以求得最優解,以後了解了動態規劃演算法後本題就有了新的解法。
貪心 01揹包 能量石 01揹包 貪心
相關 調整法證明貪心問題 734.能量石 參考題解 辰風 能量石十分清晰!重點 貪心證明 01 揹包 思維 google kickstart2019 round b problem b 貪心證明 狀態計算 當然,空間優化為 1 維也是完全ok的。引自辰風 能量石十分清晰!利用貪心來對所有的能量石排序...
飯卡 01揹包 貪心
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一次。已知每種菜的 以及卡上的餘額,問最少...
01揹包問題 貪心 DP
在8月18號參加了華為的優招機試,三道程式設計題,前兩道難度不算很大,第一題很簡單,第二題是經典的 揹包問題,小偷偷東西,順著這個機會也總結一下這個01揹包問題,對於題目的描述一開始是憑記憶寫的,後來在牛客網上看到了這個面試的題目,應該是對的,不過有小的區別也不影響題目的分析和程式設計實現。這題目是...