回溯法
阿新 • • 發佈:2017-05-25
深度 問題 思想 最優 產生 剪枝 bound 過程 空間
一、回溯法的基本思想
在問題的解空間樹中,按深度優先策略,從根節點出發搜素解空間樹。算法搜素至解空間樹的任一結點時,先判斷該結點是否包含問題的解,如果肯定不包含,則跳過對以該結點為根的子樹的搜索,逐層向其祖先結點回溯。否則,進入該子樹,繼續按深度優先策略搜索。回溯法求解問題時,要回溯到根,且根結點的所有子樹都已被搜索遍才結束。回溯法求解的一個解時,只要搜索到問題的一個解就可結束。
(1)解空間:對於問題的一個實例,解向量滿足顯式約束條件的所有多元組,構成了該實例的一個解空間。
(2)深度優先的問題狀態生成法:如果對一個擴展結點 R ,一旦產生了它的一個兒子 C,就把 C 當做新的擴展結點。在完成對子樹 C(以 C 為根的子樹)的窮盡搜索之後,將 R 重新變成擴展結點,繼續生成 R 的下一個兒子(如果存在)。
(3)回溯法:為了避免生成那些不可能產生最佳解的問題狀態,要不斷地利用限界函數 (bounding function) 來處死那些實際上不可能產生所需解的活結點,以減少問題的計算量。具有限界函數的深度優先生成法稱為回溯法。
二、用回溯法求解問題時的主要步驟
(1)針對所給問題,定義問題的解空間;
(2)確定易於搜索的解空間結構;
(3)以深度優先方式搜索解空間,並在搜索過程中用剪枝函數避免無效搜索。
常用剪枝函數:a. 用約束函數在擴展結點處剪去不滿足約束的子樹;
b. 用限界函數剪去得不到最優解的子樹。
用回溯法解題的一個顯著特征是在搜索過程中動態產生問題的解空間。在任何時刻,算法只保存從根結點到當前擴展結點的路徑。
回溯法