值得注意,回溯法以深度优先搜索的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。那为何 回溯算法 = 深度优先搜索 + 剪枝函数这一说法没有错?
因为树是特殊的图。简单来说,树是广义的图。再简单来说,树是图。
因此,回溯算法与深度优先搜索的关系也昭然若揭。因为,实施算法的对象(数据结构)都是图,所以,两者可以相提并论,存在一些共性,回溯算法也得以在搜索时使用深度优先算法。
也显而易见,回溯算法 也并不简单的可以说回溯算法 = 深度优先搜索 + 剪枝函数。
因为并不是所有图都是树。
深度优先搜索适用于所有图。而回溯算法只适用于树结构。
任何解空间可以映射成树结构的问题,都可以使用回溯法。任何解空间不能映射成树结构的问题,都不可以使用回溯法。
说到这里,大概也弄明白了两者的关系。
陈述一个比较正确的结论:
回溯算法 = 树的深度优先搜索 + 剪枝函数
回溯:方法论。
剪枝:一种方法。
dfs:一种算法。