最短路径算法--双向Dijkstra算法Python实现

最短路径算法--双向Dijkstra算法Python实现

    • 定义
    • 算法介绍
    • 算法实现
    • 实验对比

定义

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

去看原文

算法介绍

Dijkstra算法是单点源的形式往外搜索,它的搜索空间长这样:
最短路径算法--双向Dijkstra算法Python实现_第1张图片
双向Dijkstra算法顾名思义,就是从两个方向同时开始搜索,它的搜索空间长这样:
最短路径算法--双向Dijkstra算法Python实现_第2张图片
Dijkstra算法一个方向搜索需要一个优先队列,那双向Dijkstra算法也就需要两个优先队列了。两个优先队列交替取出最小的元素来扩展,扩展的时候需要检测是否包含环,其扩展过程与Dijkstra算法一样。其原理是从起点和终点依次执行单向的Dijkstra算法,即前向和后向Dijkstra扩展搜索。当两个方向到一个节点相遇时,那么最短路径也就找到了。

算法实现

伪代码
最短路径算法--双向Dijkstra算法Python实现_第3张图片

实验对比

测试部分比较了单向Dijkstra算法和双向Dijkstra算法的效率。随机取了100对OD,分别记录每对OD最短路径计算的运行时间以及扩展节点数量。
最短路径算法--双向Dijkstra算法Python实现_第4张图片
最短路径算法--双向Dijkstra算法Python实现_第5张图片
更多精彩内容,请关注“探索GIS的小蜗牛”。如需源码,请后台留言。

你可能感兴趣的:(Python,算法)