值得注意,回溯法以深度優先搜索的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索。那為何 回溯算法 = 深度優先搜索 + 剪枝函數這一說法沒有錯?
因為樹是特殊的圖。簡單來說,樹是廣義的圖。再簡單來說,樹是圖。
因此,回溯算法與深度優先搜索的關系也昭然若揭。因為,實施算法的對象(數據結構)都是圖,所以,兩者可以相提并論,存在一些共性,回溯算法也得以在搜索時使用深度優先算法。
也顯而易見,回溯算法 也并不簡單的可以說回溯算法 = 深度優先搜索 + 剪枝函數。
因為并不是所有圖都是樹。
深度優先搜索適用于所有圖。而回溯算法只適用于樹結構。
任何解空間可以映射成樹結構的問題,都可以使用回溯法。任何解空間不能映射成樹結構的問題,都不可以使用回溯法。
說到這里,大概也弄明白了兩者的關系。
陳述一個比較正確的結論:
回溯算法 = 樹的深度優先搜索 + 剪枝函數
回溯:方法論。
剪枝:一種方法。
dfs:一種算法。