双向Dijkstra算法、Dijkstra算法对比

本文探讨了双向Dijkstra算法与传统Dijkstra算法的差异。双向算法从起点和终点同时搜索,通常能提高效率。实验结果显示,双向Dijkstra在多数情况下优于单向,但在某些特定情况可能较慢。A*算法仍然是速度最快的选择。
摘要由CSDN通过智能技术生成

去看【原文】

Dijkstra算法是一种单向的最短路径算法,有研究者就提出了一种优化方法,即双向Dijkstra算法。其主要思想就是从起点和终点同时开始搜索,这样应该能够提升算法效率。事实证明,在大部分情况下,双向Dijkstra算法还是要优于单向的Dijkstra算法。

算法介绍

前面介绍过Dijkstra算法,一些相关的定义可以参考前文。

图的定义以及优先队列的有关定义可以参考前面推送的文章:
去看【最短路径算法–Dijkstra】

Dijkstra算法是单点源的形式往外搜索,它的搜索空间长这样:
在这里插入图片描述双向Dijkstra算法顾名思义,就是从两个方向同时开始搜索,它的搜索空间长这样:
在这里插入图片描述

算法原理

Dijkstra算法一个方向搜索需要一个优先队列,那双向Dijkstra算法也就需要两个优先队列了。两个优先队列交替取出最小的元素来扩展,扩展的时候需要检测是否包含环,其扩展过程与Dijkstra算法一样。其原理是从起点和终点依次执行单向的Dijkstra算法,即前向和后向Dijkstra扩展搜索。当两个方向第一次相遇时,会得到一条候选最短路径,第一次相遇后,后续节点扩展时,只需访问已经出过队列的那些节点即可。在这个过程中,全局最优路径就是所有相遇节点的正向代价和方向代价之和的最小值。

实验对比

测试部分比较了单向Dijkstra算法、双向Dijkstra算法、A*算法的计算效率。随机取了100对OD,分别记录每对OD最短路径计算的运行时间以及扩展节点数量。

使用路网1时的计算结果:

Construct network adjacent list ...
Construct network adjacent finished! It consumes 0.931 seconds.
Start to calculate 1th shortest path from 1129 to 167 ...
   Dijkstra Algo: The shortest path cost is 17289.119, It consumes 0.048 seconds and selects 832 nodes
      AStar Algo: The shortest path cost is 17289.119, It consumes 0.003 seconds and selects 48 nodes
Bi-Dijkstra Algo: The shortest path cost is 17289.119, It consumes 0.016 seconds and selects 366 nodes
Start to calculate 2th shortest path from 769 to 3498 ...
   Dijkstra Algo: The shortest path cost is 5522.333, It consumes 0.016 seconds and selects 301 nodes
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值