顯示圖:
明確給出了圖中的各頂點及邊
隱式圖:
僅給出初始節點、目標節點及產生子節點的條件(一般有問題提議隱含給出)的情況下,構造一個圖。
回溯法:
從初始狀態出發,在隱式圖中以深度優先的方式搜索問題的解。當發現不滿足求解條件時,就回溯,嘗試其他路徑。通俗的說,回溯法就是一種能進則進,進不了就換,換不了就退的基本搜索方法。
回溯法的算法框架和思想:
子集樹:
子集樹是使用回溯法解題時經常遇到的一種典型的解空間樹。
子集樹中所有非葉子節點均有左右兩個分支,我們一般設定左分支為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種選擇