DFS,深度优先搜索,从一个起始节点开始,沿着一条路径尽可能远地访问节点,直到到达不能继续前进的节点,然后返回上一层继续探索其他路径。这个过程是递归的,通过不断地深入进入节点的子节点,直到遍历完整个图。
而DFS中的剪枝,是非常重要的一个部分,可以优化DFS中多余无效的查找,其中有五种比较常见且重要的剪枝方法。
一、可行性剪枝
如其名,指的是DFS的过程中对于不可行或已经达成目标的递归的剔除。通常是递归超出了搜索边界或者满足了递归结束的条件,要进行可行性剪枝,回溯。
二、最优性剪枝
如其名,指的是进行最值查找DFS的过程中,当前递归的值超过/小于最值,继续搜索下去对求最值没有作用时,要进行最优性剪枝,停止此次递归。
三、优化搜索顺序
这种方法要贴合题意判断,主要来确定递归的方向与涉及方面,以更快捷便利地递归。
四、记忆化搜索
其通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历。需要DFS的过程中检查是否已经计算过该子问题。如果已经计算过,则直接返回已经存储的结果;否则,计算该问题,并将结果存储下来以备将来使用。可以减少“走回头路”的次数。
五、排除等效冗余
当DFS搜索时遇见两个及以上等价的搜索方向,就只用执行其中的一条搜索路线,效果相当。