Johnson 算法

这个算法可以用于处理稀疏图,带有负权的任意两点间的最短路问题

如果点数 边数 ,那么堆优化的dij就可以解决了

但是dij中不能存在负的边权,所以我们要考虑一种转化边权的方法

可以通过类似差分约束的方法来重构边权

对一条边 u,v ,他们的权值为e ,dis[i]表示1-i的最短路

我们可以得到dis[v]-dis[u]+e0

因此就可以把变成dis[v]-dis[u]+e

增设一个超级源点S,由S向各点连一条权值为0的边,然后使用spfa求出点S到所有点的最短路dis[i]

spfa的最坏的时间复杂度为O(nm),这样我们就把问题转化为在一张非负图上求全源最短路径,就可以使用堆优化的dij了

【最短路】 Johnson 算法相关推荐

  1. 【图论】Johnson算法(多源最短路优化)

    样例题的话随便找个Floyd算法自己测一下吧,下面上封装后的Johnson板子: (好啦-既然你们懒那我给你们找个吧..AcWing.854) 链接:https://www.acwing.com/pr ...

  2. 【技巧】浅谈Johnson算法

    简介 Johnson算法主要用于求稀疏图上的全源最短路径.其主体思想是利用重赋权值的方法把一个原问题带负权的图转化为权值非负的图.然后再使用N次Dijkstra算法以求出全源最短路. --姜碧野< ...

  3. 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)

    图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...

  4. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  5. 算法导论——所有点对最短路径:稀疏图Johnson算法

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...

  6. 单源最短路 Dijkstra算法 和 SPFA算法

    单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...

  7. Remmarguts' Date(POJ2449+最短路+A*算法)

    题目链接:http://poj.org/problem?id=2449 题目: 题意:求有向图两点间的k短路. 思路:最短路+A*算法 代码实现如下: 1 #include <set> 2 ...

  8. 加工生产调度(Johnson算法 双机流水作业调度问题)

    加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...

  9. 所有结点对的最短路径问题之Johnson算法

    Johnson算法可以在O(V*V lgV + VE)的时间内找到所有节点对之间的最短路径,对于稀疏图来说,算法的渐进表现要由于重复平方法和FloydWarshall算法,如果图没有权值为负值的环路, ...

  10. 稀疏图Johnson算法

    在前面的文章<所有节点对的最短路径问题>中,我们介绍了用于稀疏图的Johnson算法,由于代码比较长,我们将其单独放在一篇文章之中. Johnson算法的时间复杂度在使用二叉堆作为最小优先 ...

最新文章

  1. 中国大陆集成电路芯片领域各个细分代表企业
  2. 惯性制导精度是多少_什么叫惯性制导,惯性制导的重要性体现在哪里?
  3. Segment Routing — SRv6 — SRv6 协议解析
  4. elasticsearch 查询(match和term)
  5. css选择器 nth-child
  6. Rancher搭建集群
  7. 块状元素的text-align对齐属性
  8. eclipse里没有project facets
  9. 详解C与C++的联系与区别
  10. 新闻系统(3)内容保护的探索
  11. Android开发学习——Android Studio配置SVN
  12. 变频器服务器电路板维修,变频器电路板维修技巧
  13. 实验16 编写包含多个功能子程序的中断例程
  14. php如何设计自定义模型,php – Kohana ORM模型中的自定义方法
  15. OpenCV/CUDA/Qt 环境配置小结
  16. 一种用于茶叶病害识别的低阶学习方法
  17. linux线程退出正确姿势demo
  18. atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
  19. iOS底层探索之多线程(五)—GCD不同队列源码分析
  20. 一个简单的DNS服务器架设

热门文章

  1. 基于树莓派的Data Matrix decode
  2. linux教程 课件ppt,Linux操作系统实用教程全集 教学课件 中文PPT版
  3. 拟合美国人口matlab编码,美国人口数据的阻滞增长模型拟合分析
  4. Sublime Text3自定义主题
  5. 音视频处理入门基础知识(一)
  6. MATLAB实现自编码器(五)——变分自编码器(VAE)实现图像生成的帮助函数
  7. PHP - Smarty模板引擎 - Download下载 - 2 6 22
  8. 如何破解无线网络密码(无线网络密码破解)
  9. 样点自适应补偿(SAO)技术
  10. 关于spring框架