回溯法有「通用的解題法」之稱。可以用來系統地搜尋乙個問題的所有解或任一解。回溯法在問題的解空間樹中,按照深度優先策略,從根結點出發搜尋解空間樹。演算法搜尋至解空間樹的任一結點時,先判斷該結點是否
包含問題的解。如果肯定不包含,則跳過對以該結點為根的子樹的搜尋,逐層向其祖先結點回溯。否則,進入該
子樹,繼續按照深度優先策略搜尋。回溯法求問題的所有解時,要回溯到根,且根結點的所有子樹都已被搜尋完
才結束。回溯法求問題的乙個解時,只要搜尋到問題的乙個解就可以結束。回溯法適合組合數較大的問題。
回溯法解題時常遇到兩類解空間樹。子集樹和排列樹。當所給的問題是從n個元素的集合s中找出滿足某種性質的子集時,相應的解空間樹稱為子集樹。例如,n個
物品的0-1揹包問題所相應的解空間樹就是一棵子集樹。遍歷子集樹的任何演算法均需ω(2^n)的計算時間。
當所給的問題是確定n個元素滿足某種性質的排列時,相應的解空間樹稱為排列樹。例如,旅行售貨員問題
的解空間樹就是一棵排列樹。遍歷排列樹需要ω(n!)的計算時間。
回溯法搜尋解空間樹時, 通常採用兩種策略避免無效搜尋,提高回溯法的搜尋效率。其一是用約束函式在擴展結點處剪去不滿足約束的子樹;其二是用限界函式剪去得不到最優解的子樹。這兩類函式統稱為剪枝函式。
用回溯法解題通常包含以下三個步驟:(1)針對所給問題,定義問題的解空間;
(2)確定易於搜尋的解空間結構;
(3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。
回溯法思想
回溯法是一種試探求解的方法,通過對問題的歸納分析,找出求解問題的乙個線索,沿著這一線索往前試 探,若試探成功,即得到解 若試探失敗,就逐步往回退,換其他路線再往前試探。因此,回溯法可以形象地概 況為 向前走,碰壁就回頭 回溯法從開始結點 根結點 出發,以深度優先的方式搜尋整個解空間 一般為樹結構空間...
演算法思想 回溯法
很多經典的數學問題都可以用回溯演算法解決,比如數獨 八皇后 0 1 揹包 圖的著色 旅行商問題 全排列等等。籠統地講,回溯演算法很多時候都應用在 搜尋 這類問題上。不過這裡說的搜尋,並不是狹義的指我們前面講過的圖的搜尋演算法,而是在一組可能的解中,搜尋滿足期望的解。回溯演算法的理論知識很容易弄懂。不...
回溯法基本思想
回溯法又稱試探法。回溯法的基本做法是深度優先搜尋,是一種組織得井井有條的 能避免不必要重複搜尋的窮舉式搜尋演算法。回溯演算法的基本思想是 從一條路往前走,能進則進,不能進則退回來,換一條路再試。當我們遇到某一類問題時,它的問題可以分解,但是又不能得出明確的動態規劃或是遞迴解法,此時可以考慮用回溯法解...