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

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

最短路问题分为

  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)
这是我最喜欢的算法了,因为实在是太简单了三重循环直接搞定!!!
在这里插入图片描述

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值