為什麼貪心策略不能用於解決0 1揹包問題?

2021-10-04 11:36:26 字數 690 閱讀 2903

新人求讚啊!(●'◡'●)
一般會使用的貪婪準則:價值vi,質量wi,每一項計算ri=vi/wi,即價值和質量之比,再按比值的降序來排序,從第一項開始裝揹包,然後是第二項,依次類推,盡可能的多放,直到裝滿揹包。

反例:這種策略並不能保證得到最優解。利用此策略試解n= 3 ,w=[40,35,35], v=[40,30,20], c=70 時的最優解。直覺上它可能是對的,得到的結果是選擇w[0]=40,剩餘30的空間容量不能裝下其他物品,總價值量為40。然而真正可以獲得的最大價值是30+20=50,很顯然,貪心策略的選擇方法是錯誤的。

原因:事實上這一方法只是解決普通揹包問題的最優解,因為按此方法在選擇物品i裝入揹包時,我們是可以選擇物品i的一部分的,不一定要全部裝入揹包。但是實際上0-1揹包問題的特點就是每個個體是不可拆分的,那麼此時再按貪心策略就不能證明結果是正確的,相反我們可以舉出反例證明它是錯誤的。這兩者的關係其實有點類似於概率論中古典概型和幾何概型問題的區分。

反思:對於乙個方法是否正確,有時我們雖然不能直接通過理論證明它是正確的或是不正確,但如果是錯誤的,一定可以通過反例證明。理論不能證明正確的方法一般就不要使用,因為有可能存在反例使它出現錯誤的結果。而對於動態規劃的解法,它的本質是列舉,這個方法無疑是證明正確的。

aspen為什麼不能用 地坪漆為什麼不能用在室內?

在很多的營銷號中,人們常說地坪漆為什麼不能在室內使用。但是這種說法是錯誤的,地坪漆的種類居多,不同的地坪的使用地方也不同。不同材料的地坪漆使用的地方也不同,比如在化工廠用在室內的話,那肯定是不可以的。下面我們來解析一下室內地坪。一 工程部位 室內地坪 二 地面施工工藝 基層處理 找標高 彈線 灑水濕...

為什麼不能用memcached儲存Session

memcached建立者dormando很早就寫過兩篇文章 1 2 告誡開發人員不要用memcached儲存session。他在第一篇文章中給出的理由大致是說,如果用memcached儲存session,那麼當memcached集 生故障 比如記憶體溢位 或者維護 比如公升級 增加或減少伺服器 時,...

oracle 查詢日期型別為什麼不能用

對於新手而言,沒有接觸過oracle經常會問oracle 查詢日期型別為什麼不能用 來查詢資料,對於這個問題要注意在等號的兩邊必須資料型別一致,比如 2010 9 19 這是乙個字串不能直接與日期型別字段比較 必須要進行日期轉換 1 日期轉換成字串 to char date,yyyy mm dd 2...