算法设计与分析第5章 回溯法(一)【回溯法】
第5章 回溯法
5.1 回溯法
1.回溯法的提出
?有許多問題,當需要找出它的解集或者要求回答什么解是滿足某些約束條件的最佳解時,往往要使用回溯法。
2. 問題的解空間
(1)問題的解向量:回溯法希望一個問題的解能夠表示成一個n元式(x1,x2,…,xn)的形式。
(2)顯約束:對分量xi的取值限定。
(3)隱約束:為滿足問題的解而對不同分量之間施加的約束。
(4)解空間:對于問題的一個實例,解向量滿足顯式約束條件的所有多元組,構成了該實例的一個解空間。
3. 回溯法的基本思想
(1)針對所給問題,定義問題的解空間;
(2)確定易于搜索的解空間結構;
(3)以深度優先方式搜索解空間,并在搜索過程中用剪枝函數避免無效搜索。
4. 生成問題狀態的基本方法
(1)相關概念:
??擴展結點:一個正在產生兒子的結點稱為擴展結點
??活結點:一個自身已生成但其兒子還沒有全部生成的節點稱做活結點
??死結點:一個所有兒子已經產生的結點稱做死結點
(2)深度優先的問題狀態生成法:
??如果對一個擴展結點R,一旦產生了它的一個兒子C,就把C當做新的擴展結點。在完成對子樹C(以C為根的子樹)的窮盡搜索之后,將R重新變成擴展結點,繼續生成R的下一個兒子(如果存在)
(3)廣度優先的問題狀態生成法:
??在一個擴展結點變成死結點之前,它一直是擴展結點
(4)回溯法:
??為了避免生成那些不可能產生最佳解的問題狀態,要不斷地利用限界函數(bounding function)來處死那些實際上不可能產生所需解的活結點,以減少問題的計算量。具有限界函數的深度優先生成法稱為回溯法
5. 常用剪枝函數
(1)用約束函數在擴展結點處剪去不滿足約束的子樹(01背包問題)
(2)用限界函數剪去得不到最優解的子樹(旅行商問題)
6.計算空間
??用回溯法解題的一個顯著特征是在搜索過程中動態產生問題的解空間。在任何時刻,算法只保存從根結點到當前擴展結點的路徑。如果解空間樹中從根結點到葉結點的最長路徑的長度為h(n),則回溯法所需的計算空間通常為O(h(n))。而顯式地存儲整個解空間則需要O(2h(n))或O(h(n)!)內存空間。
7.算法框架
(1)遞歸回溯
??回溯法對解空間作深度優先搜索,因此,在一般情況下用遞歸方法實現回溯法。
(2)迭代回溯
??采用樹的非遞歸深度優先遍歷算法,可將回溯法表示為一個非遞歸迭代過程。
(3)子集樹算法框架
??遍歷子集樹需O(2n)計算時間
(4)排列樹算法框架
??遍歷排列樹需要O(n!)計算時間
8.回溯法效率分析
回溯算法的效率在很大程度上依賴于以下因素:
(1)產生x[k]的時間;
(2)滿足顯約束的x[k]值的個數;
(3)計算約束函數constraint的時間;
(4)計算上界函數bound的時間;
(5)滿足約束函數和上界函數約束的所有x[k]的個數。
好的約束函數能顯著地減少所生成的結點數。但這樣的約束函數往往計算量較大。因此,在選擇約束函數時通常存在生成結點數與約束函數計算量之間的折衷。
總結
以上是生活随笔為你收集整理的算法设计与分析第5章 回溯法(一)【回溯法】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做一次四轮定位多少钱?
- 下一篇: 算法设计与分析第5章 回溯法(二)【回溯