BFS DFS 分析

525 阅读1分钟

BFS

优点

  • 因为有队列或set, 易控制。

缺点

  • 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