回溯法是一種試探求解的方法,通過對問題的歸納分析,找出求解問題的乙個線索,沿著這一線索往前試探,若試探成功,即得到解;若試探失敗,就逐步往回退,換其他路線再往前試探。因此,回溯法可以形象地概
況為「向前走,碰壁就回頭」。
回溯法從開始結點(根結點)出發,以深度優先的方式搜尋整個解空間(一般為樹結構空間)。這個開始結
點就成為乙個活節點,同時也成為當前的擴充套件結點。在當前的擴充套件結點處,搜尋向縱深方向移至乙個新結點。這個
新結點就成為乙個新的活結點,並成為當前的擴充套件結點。如果在當前的擴充套件結點處不能再向縱向方向移動,則當前
擴充套件結點就成為乙個死結點。換句話說,這個結點不再是乙個活結點。此時,應往回移動(回溯)至最近的乙個活
結點處,並使這個活結點成為當前的擴充套件結點。回溯法即以這種工作方式遞迴地在解空間中進行搜尋,直至找到所
要求的解或解空間中已經沒有活結點時為止。
運用回溯法解題通常包含以下三步:
(1)針對所給問題,定義問題的解空間
(2)確定易於搜尋的解空間結構
(3)以深度優先的方式搜尋解空間,並且在搜尋過程中用剪枝函式避免無效搜尋;若回溯法對解空間做深度
優先搜尋則用遞迴方法實現回溯法。
回溯法思想
回溯法有 通用的解題法 之稱。可以用來系統地搜尋乙個問題的所有解或任一解。回溯法在問題的解空間 樹中,按照深度優先策略,從根結點出發搜尋解空間樹。演算法搜尋至解空間樹的任一結點時,先判斷該結點是否 包含問題的解。如果肯定不包含,則跳過對以該結點為根的子樹的搜尋,逐層向其祖先結點回溯。否則,進入該 子...
演算法思想 回溯法
很多經典的數學問題都可以用回溯演算法解決,比如數獨 八皇后 0 1 揹包 圖的著色 旅行商問題 全排列等等。籠統地講,回溯演算法很多時候都應用在 搜尋 這類問題上。不過這裡說的搜尋,並不是狹義的指我們前面講過的圖的搜尋演算法,而是在一組可能的解中,搜尋滿足期望的解。回溯演算法的理論知識很容易弄懂。不...
回溯法基本思想
回溯法又稱試探法。回溯法的基本做法是深度優先搜尋,是一種組織得井井有條的 能避免不必要重複搜尋的窮舉式搜尋演算法。回溯演算法的基本思想是 從一條路往前走,能進則進,不能進則退回來,換一條路再試。當我們遇到某一類問題時,它的問題可以分解,但是又不能得出明確的動態規劃或是遞迴解法,此時可以考慮用回溯法解...