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

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

    • 定义
    • 图的定义
    • 算法原理
    • 算法实现
    • 实验对比

定义

最短路径问题是指在有权图中的两点之间找到一条权重最小的路径。今天来讲讲比较经典的Dijkstra算法。在开始将算法之前,先对图(网络)做一个基本定义。

去看原文

图的定义

最短路径算法--Dijkstra算法Python实现_第1张图片

算法原理

我们的目标是求节点到节点的单源最短路径,简单用图1描述一下。我们的目标是要计算从O(O=1)到D(D=4)的最短路径,假设存在这样一条最短路径P(1,4),那这条最短路径一定是节点4的前继节点(3、2、5)中的一条最短路径加上相应边中最小的一条,即符合:
在这里插入图片描述
显然从图1中可以得知是P(1,5),即从节点5到4是最短的路径。那么P(1,5)要如何求了,同样的道理,那也是从节点5的前继节点中找到一条最短的。

这就类似于动态规划,那么把这个过程正向过来,即我们每次都要找到这样的一个节点,即从起点到该节点的权重之和是所有最短路未被确定的节点中最小的那个,然后从该节点向它的后继节点进行扩展。所以需要一个优先队列来保存每个节点当前最优路径的label。

优先队列可以采用斐波那契堆(简称F堆)。以下是一个搜索过程:
最短路径算法--Dijkstra算法Python实现_第2张图片

算法实现

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

实验对比

最短路径算法--Dijkstra算法Python实现_第4张图片
更多精彩内容,请关注“探索GIS的小蜗牛”。Python源码,请后台留言。

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