Dijkstra算法--斐波那契堆,Python实现

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

定义

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

去看原文

图的定义

在这里插入图片描述

算法原理

我们的目标是求节点到节点的单源最短路径,简单用图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堆)。以下是一个搜索过程:
在这里插入图片描述

算法实现

伪码
在这里插入图片描述

实验对比

在这里插入图片描述
更多精彩内容,请关注“探索GIS的小蜗牛”。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47127612/article/details/105586743
今日推荐