问题1:什么时候用BFS,什么时候用DFS?
1.BFS
是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。这个时候不适宜使用DFS
,因为DFS
搜索到的解不一定是离根最近的,只有全局搜索完毕,才能从所有解中找出离根的最近的解。(当然这个DFS
的不足,可以使用迭代加深搜索ID-DFS
去弥补)
2.空间优劣上,DFS
是有优势的,DFS
不需要保存搜索过程中的状态,而BFS
在搜索过程中需要保存搜索过的状态,而且一般情况需要一个队列来记录。
3.DFS
适合搜索全部的解,因为要搜索全部的解,那么BFS
搜索过程中,遇到离根最近的解,并没有什么用,也必须遍历完整棵搜索树,DFS
搜索也会搜索全部,但是相比DFS
不用记录过多信息,所以搜素全部解的问题,DFS
显然更加合适。
更新中……