BFS DFS 分析
BFS
优点
缺点
- BFS在搜索过程中需要保存搜索过的状态,而且一般情况需要一个队列来记录。占用空间。
场景
- BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。
- 用set类型来保存中间搜索过的点, 便于查找。
- 占用较多内存
DFS
优点
- 空间优劣上,DFS是有优势的,DFS不需要保存搜索过程中的状态,而BFS在搜索过程中需要保存搜索过的状态,而且一般情况需要一个队列来记录。
缺点
- 要限制递归深度才行。递归深度过深,也会超时, 爆栈。
场景
- DFS适合搜索全部的解,因为要搜索全部的解,那么BFS搜索过程中,遇到离根最近的解,并没有什么用,所以搜素全部解的问题,DFS显然更加合适。
Reference:
7/24/20
观https://yhvh009.github.io/posts/BFS%E8%B7%9FDFS%E7%9A%84%E7%90%86%E8%A7%A3/ 后一些新的理解
- DFS
- 主要使用递归,每次把问题规模减小,但问题本身不变,一直递归到 base case 之后return。
- 关键要素:
- 确定base case(就是搜索到底端返回什么);
- 确定sub question(例如左子树, 右子树);
- 确定共同参数(递归时传递什么)
7/25/20