广度优先搜索(BFS)与深度优先搜索(DFS)

一般来说,能用DFS解决的问题,都能用BFS。

DFS由于其易于编写(递归),易于理解的特点被广泛使用,而且像比如floodfill这种算法来说,DFS的常数时间开销会较少。所以对于一些能用DFS就能轻松解决的,为何要用BFS?
杀鸡焉用牛刀?

多数情况下运行BFS所需的内存会大于DFS需要的内存(DFS一次访问一条路,BFS一次访问多条路),DFS容易爆栈(栈不易"控制"),BFS通过控制队列可以很好解决"爆队列"风险。
至于具体取舍,要看具体应用环境,由于搜索顺序不同,即使用相同的剪枝也会导致在不同时间上搜索到目标结果,一般考虑解的稀疏程度以及搜索树上的位置。

最后,BFS加上评估函数可以变为A*,DFS加上评估函数可以变为IDA*,可参考相关人工智能书籍。

深度优先搜索,堆栈实现;

广度优先搜索,队列实现;

 

 

你可能感兴趣的:(算法)