貪心演算法原理

2021-06-30 16:53:59 字數 835 閱讀 3432

設計貪心演算法的三個步驟

將最優化問題轉化為這樣的形式:對其做出一次選擇後,只剩下乙個子問題需要求解(比較重要的一步)

證明作出貪心選擇後,原問題總是存在最優解,即貪心選擇總是安全的

證明作出貪心選擇後,剩餘的子問題滿足性質:其最優解與貪心選擇組合即可得到原問題的最優解,這樣就得到了最優子結構

兩個關鍵因素

1.  貪心選擇性質

:可以通過做出區域性最優(貪心)選擇來構造全域性最優解;即每個步驟做出貪心選擇能生成全域性最優解【視不同具體問題進行證明,沒有普遍適用的方法】

2.  最優子結構

:乙個問題的最優解包含其子問題的最優解

經典最優化問題的

兩個變形

0-1揹包問題:乙個正在搶劫的小偷發現了n個商品,第i個商品價值vi美元,重wi磅,vi和wi都是整數;小偷想盡可能拿走價值更多的商品,但是他的揹包最多能容納w磅的商品,w是乙個整數【對每個商品,不能拿走一部分,要麼完整拿走,要麼留下)

分數揹包問題:條件和0-1揹包問題一樣,但對每個商品,小偷可以拿走一部分

兩個問題都有最優子結構,很相似,但是

貪心演算法可以求解分數揹包問題,而不能求解0-1揹包問題

分數揹包問題:計算每個商品的每磅價值vi/wi,每次選擇每磅價值最高的商品即可

0-1揹包問題:因為小偷無法裝滿揹包,空閒空間降低了方案的有效每磅價值;當我們考慮乙個商品食肉裝入揹包,需要比較包含此商品的子問題的解和不包含它的子問題的解,然後才能做出選擇

當然,由於兩個問題都有最優子結構,所以能用動態規劃演算法進行求解。

貪心演算法原理

使用貪心演算法需要具備兩個性質 貪心選擇性和最優子結構。貪心選擇性是指所求問題的整體最優解可以通過一系列可以通過一系列區域性最優的選擇來達到。他總是作出當前最好的選擇,該選擇可以依賴於之前的選擇,但絕不依賴於將來的選擇和子問題的選擇,這是他與動態規劃的重要區別。最優子結構是指乙個問題的最優解包含其子...

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...