第六单元 回溯
一、定义
回溯算法也叫试探法,一种系统地搜索问题的解的方法。
二、方法
1.针对问题,定义包含问题解的空间。
2.不断的向前搜索。
3.判断是否正确,正确则结束搜索,错误则恢复之前状态,返回上一层,向前搜索。
三、优化方式
1.剪枝:通过条件限制,避免一些不必要的遍历过程。有效的剪枝能够大量减少算法复杂度。
2.减少每次判断所花时间。
四、深度优先搜索(DFS)
1.对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
2.方法:同回溯。
五、广度优先搜索(BFS)
1.沿层次向横向扩展搜索。即从该层开始,搜索生成下一层节点,检查生成的节点中是否存在目标节点,若没有,再用下一层节点搜索生成新的一层节点,直到发现目标节点为止。
2.方法:使用队列
(1)将起点入队。
(2)出队一个元素,作为搜索节点。
(3)将搜索节点的符合条件的子节点入队。
(4)如果队空结束,否则跳到第2步。
3.注意:每个节点只能入队一次,节约时间,防止陷入死循环。
| DFS | BFS |
优点 | 方便记忆化搜索。 | (1) 较快解决“最少步数”、“深度最小”等问题。 (2) 找到答案能立刻停止搜索。 (3) 方便输出路线。 |
缺点 | 不容易输出路线。 | 占的空间一般比DFS大。 |