BFS & DFS总结

BFS与DFS异同

  1. 查找空间与查找目的一致,做题时一定要尽量考虑全剪枝的情况,不然容易出现超时的情况
  2. 查找方式不一致

BFS总结

        BFS中,获得一个状态后,立即扩展这个状态,并保证早得到的状态优先得到扩展。因此使用队列的先进先出特性来实现BFS“先得到的状态先扩展”这一特性

  1. 状态。需要确定所求解问题中的状态,通过扩展状态,遍历所有的状态,从中寻找需要的答案。
  2. 状态扩展方式。在BFS中,需要尽可能地扩展状态,并对先扩展得到的状态先进行下一次状态扩展。
  3. 有效状态。对有些状态,并不需要再次扩展它,而是直接舍弃它。因为根据问题的分析可知,目标状态不可能由这些状态经过若干次扩展得到,所以直接舍弃。
  4. 队列。为了使先得出的状态能够先扩展,于是使用队列,将得到的状态依次放入队尾,每次取队头元素进行扩展。
  5. 标记。为了判断哪些状态是有效的,哪些是无效的,往往使用标记。
  6. 有效状态数。问题中的有效状态数与算法的时间复杂度同数量级,所以在进行搜索前,必须估算其是否在能够接受的范围内。
  7. 最优。宽度优先搜索常被用来求解最优值问题,因为其搜索到的状态总是按照某个关键字递增,这个特性非常适合求解最优值问题。因此,一旦问题中出现最少、最短、最优等关键字,就要考虑是否是宽度优先搜索问题。

DFS总结

        在搜索过程中,首先访问起点,之后访问起点的一个邻居,先不访问除该点之外的其他起点的邻居结点,而是访问该点的邻居结点,如此往复,直到找到解,或者当前访问结点已经没有尚未访问过的邻居结点为止,之后回溯到上一个结点并访问它的另一个邻居结点。

        对搜索状态而言,获得一个状态后,同样立即扩展这个状态,但需保证“早得到的状态较后得到扩展”。这种先入后出的特点让人想到了栈这种数据结构,不过递归策略也能保证这一特性(要注意递归的层数;具体可以使用的栈大小,会因评判系统的不同而有所差异,需联系实际机试考题做出解题选择)。

        没有先入先出的特点,因而适用于求问题是否有解,而一般不使用DFS求解最优问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BFSDFS都是常用的图搜索算法。它们的区别在于搜索的策略和复杂度。引用中提到,对于给定的问题,BFS是较佳的算法。 BFS(广度优先搜索)是一种逐层扩展搜索的算法。它从起始节点开始,逐层遍历邻接节点,直到找到目标节点或遍历完整个图。BFS使用队列来存储待访问的节点,确保按照层级的顺序进行搜索。BFS算法的时间复杂度为O(V + E),其中V是节点的数量,E是边的数量。 DFS(深度优先搜索)是一种递归实现的搜索算法。它从起始节点开始,不断沿着路径深入直到无法继续或找到目标节点,然后回溯到上一个节点,继续探索其他路径。DFS使用栈来存储待访问的节点,它的搜索路径是深度优先的。DFS算法的时间复杂度为O(V + E),其中V是节点的数量,E是边的数量。 在实际应用中,BFSDFS都有各自的优缺点。BFS通常用于解决最短路径和最小生成树等问题,而DFS更适合用于寻找所有可能的解,如图的连通性和拓扑排序等问题。选择使用哪种算法取决于具体的问题和需求。引用中提到,我们在学习数据结构时通常会接触到BFSDFS算法,尤其是在图的遍历和二叉树的遍历中经常用到。 总结起来,BFSDFS是常用的图搜索算法,它们在搜索策略和复杂度上有不同。BFS逐层扩展搜索,适用于最短路径和最小生成树等问题。DFS深度优先搜索,适用于寻找所有可能解的问题。具体选择哪种算法取决于问题的特点和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [熬夜怒肝,图解算法!BFSDFS的直观解释](https://blog.csdn.net/c406495762/article/details/117307841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值