BFS & DFS总结

本文探讨了BFS(广度优先搜索)和DFS(深度优先搜索)两种图遍历算法的异同。BFS适用于寻找最优解,确保早发现的状态优先扩展,而DFS则常用于判断问题是否存在解。在实际应用中,BFS利用队列保持先进先出,DFS则通常采用栈或递归实现后进先出。了解这两种算法的特点对于解决搜索和最优化问题至关重要。
摘要由CSDN通过智能技术生成

BFS与DFS异同

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

BFS总结

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

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

DFS总结

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值