初识双向BFS

本文介绍了一种在特定条件下能够有效优化BFS算法的方法——双向BFS。通过同时从起点和终点扩展状态,并检查是否有交集来寻找最短路径,这种方法可以显著减少搜索的时间和空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BFS是一种使用十分广的算法,很多地方都会用到它。

可是。。。由于是一种暴搜,其时间以及空间的复杂度都极大,很小的数据量就会超时或爆内存

于是,我们需要将其进行优化~

双向BFS就是对于其中一种情况的十分有效的优化方法。

使用双向的首要条件是:每一种状态的扩展,从开始到目标或者倒过来都是相同的;如果符合这样的情况,就可以用到双向~

 

主要思想:

从开始状态扩展,形成一层新的状态节点;

与目标状态的最新一层比较,判断有无相同的状态

从目标状态以相同的方式扩展,形成一层新的状态节点;与开始的最新状态比较,判断有无相同的状态;

只要有相同的状态存在,则说明:可以从开始节点以最短的路径:开始节点的扩展数+目标节点的扩展数到达目标节点。

其中,需要注意的是同一个状态的判重。

 

 

这样一来,时间以及空间就节省不少;

因为每向外扩展一层,状态节点就要增加一个数量级;

如果用的双向,那么就将这个数量级的增加减慢了,但是效果并不减少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值