Bootstrap

100种算法【Python版】第26篇——Johnson算法

1 算法原理

Johnson算法是由美国数学家Donald B. Johnson在1977年提出的,主要用于解决加权有向图中所有节点之间的最短路径问题。该算法通过将所有边的权重进行重新加权来消除负权边的影响,从而使得可以使用Dijkstra算法来高效地计算最短路径。

Johnson算法的核心思想是利用Bellman-Ford算法计算每个节点到其他节点的最短路径,得到一个势函数(potential function),然后使用这个势函数来调整图中的边权重。具体原理如下:

(1)势函数的概念:
设图中有节点 v v v,其势函数

;