谈谈单元最短路

单元最短路,应该会立即想到spfa和dijkstra。

相较而言,我用spfa的次数更加多一些,

一般这些题目都可以用  spfa(算法)+(数据结构)边表给做掉,

借用了

这位大神的论文。

 我们一般用的都是spfa的bfs应用,这是比较正确的,一般情况下

 

 bfs算法优势明显,但是为什么还需要dijkstra呢?

 

如上图,这里的话,可以发现spfa的弱点就出来了,这里的Dijkstra是指加堆优化的。

而且,对于所有情况下,dijkstra更加平均,时间复杂度更加可以保证,而spfa是期望复杂度,不能够保证其时间复杂度(一般题目中应该是可以过的,如果不是针对卡你最短路的话)。

Dijkstra复杂度O(NlogN) Spfa复杂度 期望是O(KM) K一般取2即可,但网格图这些就不行了,完全没有优势,达到了O(EN)

所以学会Dijkstra后代码量短并且时间更加平均。

 

spfa无法解决 负权回路

dijkstra无法解决 负权

如果有负权回路,应该用bellman—ford 解决,这个复杂度是高的达到了O(nm)

 

Spfa优化

 

转载于:https://www.cnblogs.com/fengzhiyuan/p/6979041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值