4种最短路劲算法的比较

  • Dijkstra算法:时间复杂度O(n3),属于贪心算法的一种,缺点:无法判断含负权边的图的最短路。

  • Floyd算法 : 时间复杂度O(n3),属于动态规划的一种,最慢但是最简单

  • Bellman-Ford:求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。在这里插入图片描述

  • SPFA:SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE)

首先,在不考虑时间复杂度的情况下,同是解决图论中最短路径的寻找的问题。这个基础的问题之上还可以引申出很多其他的理论或是实际应用问题。Dijkstra进行进一步的堆优化以后时间复杂度成为O(nlogn),比起Floyd的O(n3)是小了非常非常多。但是Dijkstra,以及常用的还有Bellman-Ford,SPFA等,均是在求单源最短路径的问题中有着较为理想的时间复杂度(<=O(n2)),但若是求图中任意两点间的距离,尤其是在图较为稠密时,Floyd的O(n^3)也是不输于其他的。另外Floyd有一个优势,那便是写起来简单。插点的简单思想,三重循环加一个判定,五行就写完了。而Dijkstra在堆优化后、以及SPFA,则需要约50行的代码。

作者:北海若 链接:https://www.zhihu.com/question/267648211/answer/327117780
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值