浅浅认识DFS与BFS

DFS(Depth First Search)和BFS(Breadth First Search)都是图遍历算法,但其实现方式不同,因此其区别如下:

  1. 遍历顺序不同:
  • DFS:从起点出发,沿着一条路径一直遍历到底,直到无法继续为止,然后回溯到上一个节点,再遍历其他路径。因此,DFS遍历的顺序是深度优先,即尽可能深地遍历每一个节点。
  • BFS:从起点出发,先访问起点的所有邻居节点,再遍历邻居节点的所有邻居节点,依此类推,直到遍历完整张图。因此,BFS遍历的顺序是广度优先,即先访问离起点近的节点,再访问离起点远的节点。
  1. 数据结构不同:
  • DFS:一般使用栈(Stack)实现,因为需要回溯。
  • BFS:一般使用队列(Queue)实现,因为需要把邻居节点存储在队列中。
  1. 时间与空间复杂度不同:
  • DFS:时间复杂度取决于递归深度,最坏情况下是O(V+E),其中V为节点数,E为边数。空间复杂度取决于栈的深度,最坏情况下是O(V)。
  • BFS:时间复杂度取决于节点数和边数,最坏情况下是O(V+E),其中V为节点数,E为边数。空间复杂度取决于队列中存储的节点数,最坏情况下是O(V)。

 

它们分别在什么场景下使用呢

DFS和BFS在不同场景下有不同的使用方式:

  • DFS适用于以下场景:
    • 搜索深度优先的问题,如迷宫问题、数独问题等。
    • 需要查找所有解的问题,如八皇后问题、数独问题等。
    • 图中的连通性问题,如判断两个节点是否连通、求图的连通分量等。
    • 拓扑排序,如课程表问题。
    • 生成所有可能的排列或组合,如全排列问题。
  • BFS适用于以下场景:
    • 搜索广度优先的问题,如单词接龙、迷宫问题等。
    • 需要查找最短路径的问题,如迷宫问题、网络问题等。
    • 图中的连通性问题,如判断两个节点是否连通、求图的最短路径等。
    • 拓扑排序,如课程表问题。
    • 生成状态空间图,如迷宫问题等。 因此,选择DFS或BFS取决于具体问题的需求和特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值