貪心演算法的設計思想

2021-07-01 20:15:40 字數 2063 閱讀 9964

**: 

貪心演算法在解決問題的策略上目光短淺,只根據當前已有的資訊就做出選擇,而且一旦做出了選擇,不管將來有什麼結果,這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域性最優。貪心演算法對於大部分的優化問題都能產生最優解,但不能總獲得整體最優解,通常可以獲得近似最優解。

引例 [找零錢]

乙個小孩買了價值少於1美元的糖,並將1美元的錢交給售貨員。售貨員希望用數目最少的硬幣找給小孩。

假設提供了數目不限的面值為2 5美分、1 0美分、5美分、及1美分的硬幣。

售貨員分步驟組成要找的零錢數,每次加入乙個硬幣。選擇硬幣時所採用的貪婪準則如下:每一次選擇應使零錢數盡量增大。為保證解法的可行性(即:所給的零錢等於要找的零錢數),所選擇的硬幣不應使零錢總數超過最終所需的數目

引例分析

為使找回的零錢的硬幣數最小,不考慮找零錢的所有各種方案,而是從最大面值的幣種開始,按遞減的順序考慮各幣種,先盡量用大面值的幣種,只當不足大面值幣種的金額才會去考慮下一種較小面值的幣種。這就是在採用貪婪法。

這種方法在這裡之所以總是最優,是因為銀行對其發行的硬幣種類和硬幣面值的巧妙安排。

如果只有面值分別為1,5和11單位的硬幣,而希望找回總額為15單位的硬幣,按貪婪演算法,應找1個11單位面值的硬幣和4個1單位面值的硬幣,共找回5個硬幣。但最優的解答應是3個5單位面值的硬幣。

用貪心法求解問題應該考慮如下幾個方面:

(1)候選集合c:為了構造問題的解決方案,有乙個候選集合c作為問題的可能解,即問題的最終解均取自於候選集合c。例如,在付款問題中,各種            面值的貨幣構成候選集合。

(2)解集合s:隨著貪心選擇的進行,解集合s不斷擴充套件,直到構成乙個滿足問題的完整解。例如,在付款問題中,已付出的貨幣構成解集合。

(3)解決函式solution:檢查解集合s是否構成問題的完整解。例如,在付款問題中,解決函式是已付出的貨幣金額恰好等於應付款。

(4)選擇函式select:即貪心策略,這是貪心法的關鍵,它指出哪個候選物件最有希望構成問題的解,選擇函式通常和目標函式有關。例如,在付款             問題中,貪心策略就是在候選集合中選擇面值最大的貨幣。

(5)可行函式feasible:檢查解集合中加入乙個候選物件是否可行,即解集合擴充套件後是否滿足約束條件。例如,在付款問題中,可行函式是每一步選              擇的貨幣和已付出的貨幣相加不超過應付款。

貪心法的一般流程

greedy(c)  //c是問題的輸入集合即候選集合

;  //初始解集合為空集

while (not solution(s))  //集合s沒有構成問題的乙個解

;

c=c-;

}

return s;

對於乙個具體的問題,怎麼知道是否可用貪心演算法解此問題,以及能否得到問題的最優解呢?這個問題很難給予肯定的回答。

但是,從許多可以用貪心演算法求解的問題中看到這類問題一般具有2個重要的性質:貪心選擇性質最優子結構性質

子問題:假設為了解決某一優化問題,需要依次作出n個決策d1,d2,…,dn,對於任何乙個整數k,1 < k < n,以dk作為問題的初始狀態,來進行以後的決策,這樣的問題就成為是原問題的乙個子問題。

1.貪心選擇性質

所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,換句話說,當考慮做何種選擇的時候,我們只考慮對當前問題最佳的選擇而不考慮子問題的結果。這是貪心演算法可行的第乙個基本要素。

貪心演算法以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為規模更小的子問題。

對於乙個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解。

2.最優子結構性質

當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。問題的最優子結構性質是該問題可用貪心演算法求解的關鍵特徵。

演算法設計思想之「貪心演算法」

輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 輸入 coins 1,3,4 amount 6 輸出 3 解釋 6 4 1 1 1.1 題目描述 1.2 解題思路輸入 g 1,2,3 s 1,1 輸出 1 解釋 你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是 1...

貪心演算法思想

貪心演算法思想 顧名思義,貪心演算法總是作出在當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇。當然,希望貪心演算法得到的最終結果也是整體最優的。雖然貪心演算法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。如單源最短路經問題,...

四 貪心演算法基本思想

貪心演算法基本思想 性質 貪心選擇性質和最優子結構性質。如果乙個問題同時具備這兩個性質,那麼這個問題可以用貪心演算法求得整體最優解。1 貪心選擇性質 指所求問題的最優解可以通過一系列區域性最優解來達到。2 最優子結構性質 當乙個問題的最優解包含其子結構的最優解,稱此問題具有最優子結構性質。基本思想 ...