双向BFS通过从起点和终点同时搜索来优化传统单向BFS。
优化原理
1. 搜索空间减少
单向BFS从起点开始逐层向外扩展,假设每层的平均分支因子为b,目标与起点之间的最短路径长度是d,那么单向BFS的时间复杂度为O()。因此,随着层数增加,时间消耗会大大增加。
双向BFS从起点和终点同时出发,每次各扩展一层。由于两个搜索分别进行,搜索深度变为,那么时间复杂度变为
,大大减少。
2. 搜索路径相遇
双向BFS的核心思想是尽早使两个搜索相遇,两端搜索都只需要遍历路径的一半。
具体优化的细节
1. 两端同时搜索
使用两个队列,分别用于从起点搜索和从终点搜索。
2. 减少冗余搜索
使用两个哈希表,分别用于存储起点搜索已经访问过的节点和终点搜索已经访问过的节点。
3. 每次扩展一层
每次从两个队列中分别取出一层节点遍历,并将新的为访问过的节点加入队列中。
如果在扩展过程中两个哈希表元素重合,即代表两个搜索相遇,返

最低0.47元/天 解锁文章
281

被折叠的 条评论
为什么被折叠?



