回溯法、子集樹、排列樹、滿m叉樹


顯示圖:

明確給出了圖中的各頂點及邊

隱式圖:

僅給出初始節點、目標節點及產生子節點的條件(一般有問題提議隱含給出)的情況下,構造一個圖。

回溯法:

從初始狀態出發,在隱式圖中以深度優先的方式搜索問題的解。當發現不滿足求解條件時,就回溯,嘗試其他路徑。通俗的說,回溯法就是一種能進則進,進不了就換,換不了就退的基本搜索方法。

 

回溯法的算法框架和思想:

1、回溯法的算法框架及思想
回溯法是一種搜索算法,解決問題時,首先應明確搜索范圍,即問題所有可能解的組成范圍、這個范圍越小越好,且至少包含問題的一個(最優)解。 為了定義搜索范圍,需要明確以下幾個方面:
(1)問題解的形式:回溯法看重問題的解能夠表示成一個n元組(x1,x2...xn)的形式。
(2)顯約束:對分量xi(i=1,2...n)的取值范圍限定。
(3)隱約束:為滿足問題的解而對不同分量之間施加的約束。
(4)解空間:對於問題的一個實例,解向量滿足顯約束的所有n元組構成了該實例的一個解空間。
注意:同一個問題的顯約束可能有多種,相應解空間的大小就會不同,通常情況下,解空間越小,算法效率越高。
 

子集樹:

子集樹是使用回溯法解題時經常遇到的一種典型的解空間樹。

子集樹中所有非葉子節點均有左右兩個分支,我們一般設定左分支為1,右分支為0。樹的根結點表示初始狀態,中間節點表示某種情況下的中間狀態,葉子節點表示結束狀態。分支表示從一個狀態過度到另一個狀態的行為。從根節點到葉結點的路徑表示一個可能解。

示例:

從n個元素中選取一些元素

  • 這類子集樹通常有2n個葉結點,其結點總個數為2n+1-1。
  • 遍歷子集樹的任何算法均需O(2n)的計算時間。

子集樹形式:(下面以n==3為例)

對於根節點0號元素,它有兩個分支,左邊是1,右邊是0。左邊就代表我們會選擇第0號元素,右邊就代表我們不選取第0號元素。之后的類似。

對於葉節點P1表示:3個元素都選

對於葉節點P2表示:選取元素編號為:0,1

對於葉節點P3表示:選取元素編號為:0,2

......

 

 

排列樹:

排列樹是用回溯法解題時經常遇到的第二種典型的解空間樹。

當所給的問題是從n個元素的排列中找到滿足某種性質的一個排列時,相應的解空間樹就是排列樹。

 

  • 排列樹通常有n!個葉結點。
  • 因此遍歷排列樹需要O(n!)的計算時間

 

示例:

給你3個元素(1,2,3),它的排列樹如下:

從根節點A,到它的子節點B、C、D這個路徑是來選擇第一個元素,走到B節點代表第一個元素選取的是1,走到C節點代表第一個元素選取的是2,后面的類似

 

 

滿m叉樹:

滿m叉樹是用回溯法解題時經常遇到的第三種典型的解空間樹,也稱為組合樹。

當所給問題的n個元素中每一個元素均有m種選擇,要求確定其中的一種選擇,使得對這n個向量的選擇結果組成的向量滿足某種性質。

n==3的m叉樹

 

 

 

除了葉節點之外,每一個節點都有3個子節點,這就代表的3種選擇

 


免責聲明!

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



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