最短路问题的各种求法(一)

最短路问题的各种求法(一)

最短路问题分为

  1. 单源最短路(从一个点到另一个点的最短路)
  2. 多源汇最短路(起点终点不确定)

图分为稀疏图和稠密图

  • 稀疏图 m与n在一个数量级上
  • 稠密图 m与n^2在一个数量级上

求最短路问题的各种方法

- 单源最短路

当所有边权都是正数用Dijkstra算法

Dijkstra算法

  • 朴素版Dijkstra算法
    应用于稠密图 时间复杂度 O(n^2) 空间复杂度 O(n^2)
  • 堆优化版的Dijkstra算法(小根堆)
    应用于稀疏图 时间复杂度 O(mlogn) 空间复杂度 O(mn)
当存在负权边用Bellman-Ford算法或者spfa算法

Bellman-Ford算法
时间复杂度O(nm) 空间复杂度O(m+n)

PS:有边数限制的最短路只能用 Bellman-Ford算法

spfa算法
spfa算法是对于Bellman-Ford算法的优化
时间复杂度一般是O(m) 最坏是O(nm) 空间复杂度O(m+n)

PS:一般来说很多问题都可以用spfa算法但是它的时间复杂度最坏是O(nm)所以会有被卡的风险

- 多源汇最短路

Floyd算法
时间复杂度O(n^3) 空间复杂度O(n^2)
这是我最喜欢的算法了,因为实在是太简单了三重循环直接搞定!!!
最短路问题的各种求法(一)_第1张图片

你可能感兴趣的:(笔记,算法,数据结构,图论)