广度优先搜索BFS优化,双向BFS

双向BFS通过从起点和终点同时搜索来优化传统单向BFS。

优化原理

1. 搜索空间减少

        单向BFS从起点开始逐层向外扩展,假设每层的平均分支因子为b,目标与起点之间的最短路径长度是d,那么单向BFS的时间复杂度为O(b^{d})。因此,随着层数增加,时间消耗会大大增加。

        双向BFS从起点和终点同时出发,每次各扩展一层。由于两个搜索分别进行,搜索深度变为\frac{d}{2},那么时间复杂度变为b^{\frac{d}{2}},大大减少。

2. 搜索路径相遇

        双向BFS的核心思想是尽早使两个搜索相遇,两端搜索都只需要遍历路径的一半。

具体优化的细节

1. 两端同时搜索

使用两个队列,分别用于从起点搜索和从终点搜索。

2. 减少冗余搜索

使用两个哈希表,分别用于存储起点搜索已经访问过的节点和终点搜索已经访问过的节点。

3. 每次扩展一层 

每次从两个队列中分别取出一层节点遍历,并将新的为访问过的节点加入队列中。

如果在扩展过程中两个哈希表元素重合,即代表两个搜索相遇,返

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值