貪心算法和回溯算法


上一章:分治法和動態規划http://www.cnblogs.com/suxi-blog/articles/6238831.html

下一章:分支限界法http://www.cnblogs.com/suxi-blog/articles/6240060.html

一.貪心算法

  1.貪心算法是把一個復雜的問題分解為一個較為簡單的局部最優選擇,每一步選擇都是對當前解的一個擴展,直到獲取問題的完整。貪心算法的典型運用是求解最優化問題,而且對許多問題都能得到整體最優解。(這里得到的結不一定是最優解,但一定是最優解的十分接近的解)

  2.可以使用貪心算法的要具有兩個重要的性質:最優子結構和貪心選擇性質

  (1)最優子結構:在這里就不再說了,要看的請到上一章的動態規划里看。

  (2)貪心選擇性質:指問題的整體最優解可以通過一系列的局部最優的選擇得到。

  3.貪心算法和動態規划的主要區別:

  (1)動態規划:只要求出相關的子問題的解后才能做出選擇

  (2)貪心算法:僅當前的狀態下做出最好的選擇,即局部最優選,產生再去作出這樣選擇后產生的相關子問題的解。

  4.貪心算法通常被使用來求解最優的問題,從某初始化的狀態出發,根據但前的局部最優策略以滿足約束方程為條件,以是目標函數增長最快(最慢)為准則,在候選集合進行一系列的選擇,以便盡快的構成問題的可行解。

  5.貪心算法的一般步驟:

  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};       //不管可不可行,都要從候選集中C刪除x

    }

    return S;

  }

 

二.回溯算法

  1.回溯算法就是一種有組織的系統最優化搜索技術,可以看作蠻力法窮舉搜索的改進。回溯法常常可以避免搜索所有可能的解,所以它是用求解組織數量較大的問題。(為什么?后面會解釋)

  2.首先我們先了解一下一個基本概念“解空間樹”:問題的解空間一般使用解空間樹的方式來組織,樹的根節點位於第1層,表示搜索的初始狀態,依次向下排列。

  3.解空間樹的動態搜索:在搜索至樹中任一節點時,先判斷該節點對應的部分是否是滿足約束條件,或者是否超出目標函數的界,也就是判斷該節點是否包含問題的最優解。如果肯定不包含,則跳過對該節點為根的子樹的搜索,即所謂的剪枝;否則,進入該節點為根的子樹,繼續按照深度優先策略搜索。(這也是為什么回溯可以避免搜索所有的解)

  4.在搜索過程中,通常采用兩種策略避免無效搜索:(1)用約束條件剪除得不到的可行解的子樹

                        (2)用目標函數剪取得不到的最優解的子樹

  (這兩種方式統稱為:剪枝函數)

  5.在用回溯法求解問題時,常常遇到兩種典型的解空間樹:

  (1)子集樹:但所有的問題是從n個元素的集合中找出滿足某種性質的子集時,相應的解空間樹成為子集樹

  (2)排列樹:當所給出問題是確定n個元素滿足某種性質的排列時,相應的解空間稱為排列樹。                                                                                   

  6.回溯法的一般步驟:

  (1)設置初始化的方案(給變量賦初始值,讀入已知數據等)

  (2)變換方式去試探,若全部試完側轉(7)

  (3)判斷此法是否成功(通過約束函數),不成功則轉(2)

  (4)試探成功則前進一步再試探

  (5)正確方案還是未找到則轉(2)

  (6)以找到一種方案則記錄並打印

  (7)退回一步(回溯),若未退到頭則轉(2)

  (8)已退到頭則結束或打印無解

7.回溯法的優點在於其結構明確,可讀性強,易於理解,而且通過對問題的分析可以大大提高運行效率。

--------------------------------------------------------------------------------------------------------------------

今天就到這里,下一次:分支限界法

http://www.cnblogs.com/suxi-blog/articles/6240060.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM