johnson最短路径
来源:互联网 发布:java中的数组声明 编辑:程序博客网 时间:2024/06/05 07:11
Johnson算法是求稀疏图的多元最短路径的算法,权值可以为负,但是不可以有负环。Johson算法是Bellman-Ford算法, Reweighting(重赋权重)和Dijkstra算法的大综合。主要的思想是使用dijstra算法对每个结点求单源最短路,但是dijstra不能解决有负权值的边,所有需要给边重新赋值,且赋值后最短路径与原来的最短路径的距离和path相同。使用斐波那契堆作为优先级队列时时间复杂度是O(V^2logV + VE)。
Johnson算法具体步骤:
1.初始化,把一个node q添加到图G中,使node q 到图G每一个点的权值为0。
2.使用Bellman-Ford算法,从源点为q,寻找每一个点 v从q到v的最短路径h(v),如果存在负环的话,算法终止。
3.使用第2步骤中Bellman-Ford计算的最短路径值对原来的图进行reweight操作(重赋值):边<u,v>的权值w(u,v),修改成w(u,v)+h(u)-h(v)。
4.最后,移去q,针对新图(重赋值之后的图)使用Dijkstra算法计算从每一个点s到其余另外点的最短距离。
(5.使用dijstra计算完最短路后,需要d(i,j) = d'(i,j) + h(v) - h(u)才是最后结果)
伪代码(摘自算法导论):
阅读全文
0 0
- johnson最短路径
- boost 最短路径 johnson
- 每对顶点的最短路径 : Johnson 算法
- johnson方法求所有节点对最短路径
- 最短路径算法----Dijkstra Bellman-Ford Floyd-Warshall Johnson
- 所有节点最短路径的Johnson实现
- 算法导论 所有结点最短路径问题 Johnson
- 稀疏图;两点间的最短路径;Johnson算法;只描述一下思路;
- 最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法
- 6.3.3 最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法
- 所有结点对的最短路径问题之Johnson算法
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson,无一幸免
- 算法——所有节点对的最短路径:Floyd-Warshall算法、Johnson算法
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法
- 最短路径算法--DIJKSTRA算法,BELLMANFORD算法,FLOYD算法,JOHNSON算法
- 数据结构
- Android 官方兼容库 EmojiCompat Support Library
- 关于Invoke的使用
- strlen源码剖析
- Spring Security——异常信息本地化
- johnson最短路径
- 【c#】控制台程序编写计时器
- (笔记)Android获取相册图片并返回
- DFS简单题 杭电1241 POJ 1154
- 无法启动屏幕键盘
- 图片无缝向下滚动
- Android应用开发工程师技术栈
- javascript学习(一)— 比较运算与strict模式
- poll_server