貪心算法

轉載自http://blog.csdn.net/xywlpo/article/details/6439048

貪心算法的設計思想

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

引例 [找零錢]

一個小孩買了價值少於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是問題的輸入集合即候選集合
{
    S={ };  //初始解集合爲空集
    while (not solution(S))  //集合S沒有構成問題的一個解
    {
       x=select(C);    //在候選集合C中做貪心選擇
       if feasible(S, x)  //判斷集合S中加入x後的解是否可行
          S=S+{x};
          C=C-{x};
    }
   return S;

貪心法的基本要素

      對於一個具體的問題,怎麼知道是否可用貪心算法解此問題,以及能否得到問題的最優解呢?這個問題很難給予肯定的回答。
      但是,從許多可以用貪心算法求解的問題中看到這類問題一般具有2個重要的性質:貪心選擇性質最優子結構性質
子問題:假設爲了解決某一優化問題,需要依次作出n個決策D1,D2,…,Dn,對於任何一個整數k,1 < k < n,以Dk作爲問題的初始狀態,來進行以後的決策,這樣的問題就成爲是原問題的一個子問題。

1.貪心選擇性質

      所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列局部最優的選擇,換句話說,當考慮做何種選擇的時候,我們只考慮對當前問題最佳的選擇而不考慮子問題的結果。這是貪心算法可行的第一個基本要素。
貪心算法以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化爲規模更小的子問題。
      對於一個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解。

2.最優子結構性質

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

貪心法的應用

  • 哈夫曼編碼
  • 0-1揹包問題
  • 磁盤文件的存儲
  • 生產調度問題
  • 信息查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章