算法导论—最短路径
来源:互联网 发布:数据库系统分析与实现 编辑:程序博客网 时间:2024/06/06 02:21
华电北风吹
日期:2016/1/16
最短路径求法包含单源最短路径和所有节点对的最短路径。单源最短路径有Dijkstra算法和Bellman-Ford算法。所有节点对的最短路径求法有基于动态规划的矩阵乘法和Floyd-Warshall算法和针对稀疏图的Johnson算法。
一、松弛操作
松弛操作是基于图中的有向边,通过边的起点对终点的最短路径长度上界进行压缩的一种方法。比如图中存在一条a->b的边,长度为
二、单源最短路径
1、Bellman-Ford算法
对于图G=(V,E),最短路径的长度肯定小于|V|,因此对所有的边松弛|V|次以后得到的路径肯定是最短路径,这也是Bellman-Ford算法的原理。时间复杂度为
2、Dijkstra算法
Dijkstra算法是跟广度优先搜索比较类似的贪心算法。在给定源节点以后,每次从未找到最短路径的节点中选择与源节点距离最小的节点,把当前路径设置为该节点到源节点的最短路径,并根据当前结点的边表的那些有向边进行松弛操作。直到找到所有节点的最短路径。
三、所有节点对的最短路径
1、动态规划(矩阵乘法)
很显然,最短路径长度不会超过节点数目|V|。因此可以把最短路径长度的最大值当作状态,依次求解每个状态下的所有节点的最短路径。
假设每个状态下的最短路径矩阵用
2、Floyd-Warshall算法
上一个方法是基于路径长度作为状态进行计算,这样在计算每个状态的最短距离矩阵的每个元素的时候,需要把所有的节点给遍历一遍,以确定当前路径下该节点的最短路径。Floyd-Warshall算法以节点作为状态,这样可以免去上一个方法的对所有节点的遍历过程,而专注于当前结点对最短路径的影响,因此可以将计算复杂度降低一个|V|数量级(如果用了第一个方法的提高效率的技巧,则是降低了一个
3、针对稀疏图的Johnson算法
John算法通过设置虚拟节点,对节点赋予权重(Bellman-Ford算法),来讲存在负权重的图,构建成一个新的不存在负权重的边的图,然后在稀疏图上运行Dijkstra算法,来计算所有节点对的最短路径。
- 算法导论—最短路径
- 算法导论-最短路径
- 算法导论-最短路径-Dijkstra算法+Bellman-Ford 算法
- 算法导论——24.2 DAG最短路径算法java实现
- 算法导论——24.3 Dijkstra最短路径算法java实现
- 算法导论-25.1-最短路径与矩阵乘法
- 算法导论 所有节点对的最短路径
- 算法导论 所有结点最短路径问题 Johnson
- 图—单源有权最短路径概述——《算法导论》
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 【Java】判断字符串是否为数字的方法
- Codeforces Educational Round 5 ABCDE
- hbase1.1.2安装
- 【Linux运维-集群技术进阶】Keepalived安装配置
- 80386的分段机制、分页机制和物理地址的形成
- 算法导论—最短路径
- C语言基本内容(一)
- Navicat 连接oracle解决方案之ORA-28547
- HDU 1166----敌兵布阵(线段树点更新)
- vim退出插入模式
- Java的IO流与对象的序列化浅谈
- 使用maven构建XML风格的Spring4 MVC应用
- MATLAB R2015a重建.m等文件关联
- 返回顶部 各个样式