当前位置: 首页 > news >正文

算法随笔:各种经典最短路算法的简要比较总结

有多种最短路径的应用场景,它们需要用到不同的算法来解决。除了贪心最优搜索之外,其他都是最优性算法,即得到的解都是最短路径。其中m是边的数量,n是点的数量。

问题边权算法时间复杂度
一个起点,一个终点非负数;无边权(或边权为1)A*算法<O((m+n)logn)
双向搜索<O((m+n)logn)
贪心最优搜索<O(m+n)
一个起点到其他所有点无边权(或边权为1)BFSO(m+n)
非负数Dijkstra(堆优化)O((m+n)logn)
允许有负数SPFA<O(mn)
所有点对之间允许有负数FloydO(n^3)

应该在不同的场景下有选择地使用。

(1)图的规模小,并且要求多源最短路,那么使用Floyd,如果边权有负数,则需要判断负环。

(2)图的规模大,且边的权值非负,用Dijkstra,SPFA虽然在Bellman-Ford算法上进行了很大的优化,但是最坏情况下依然是O(mn),不稳定(比赛时,有的题目可能故意利用SPFA的不稳定性,如果一道题目的图规模很大,并且边的权值为非负数,它可能会故意设置不利于SPFA的测试数据,此时使用SPFA将会超时,要使用更稳定的Dijkstra)。

(3)图的规模很大,且边的权值有负数,用SPFA,并且需要判断负环。

http://www.lryc.cn/news/158471.html

相关文章:

  • concrt140.dll怎么下载,concrt140.dll修复工具(修复精灵下载)一键修复问题
  • 自行实现字符串转浮点数函数atof()
  • Windows平台Fortran编程入门
  • 05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】
  • 晨启,MSP430开发板,51开发板,原理图,PCB图
  • Notepad++ 的安装及配置
  • ✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】
  • 简单记录下gin中使用中间件记录操作日志
  • 基于Matlab利用IRM和RRTstar实现无人机路径规划(附上源码+数据+说明+报告+PPT)
  • uniapp使用@microsoft/signalr(报错“ReferenceError: require is not defined“)
  • CloudCompare 二次开发(9)——半径滤波
  • ElementUI浅尝辄止29:Breadcrumb 面包屑
  • ABB MPRC086444-005数字输入模块
  • stable diffusion实践操作-常见lora模型介绍
  • kubeadm 安装k8s
  • 选择最适合您的Bug管理软件:市场比较与推荐
  • Spring MVC的常用注解及用法
  • HTTP和HTTPS的区别、 HTTPS运行原理
  • 统计封闭岛屿的数目
  • 【数据结构与算法系列4】长度最小的子数组
  • 问道管理:底部渐渐抬高 今年反弹时刻或已来临
  • 正规黄金代理的三大要素
  • Spine2D骨骼动画播放器 - 微信小程序版
  • 蓝天转债,双良转债上市价格预测
  • python-爬虫-xpath方法-批量爬取王者皮肤图片
  • go锁--读写锁
  • Unity中Shader的屏幕坐标
  • springboot MongoDB 主从 多数据源
  • 【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析
  • Unity 切换场景后场景变暗