最短路径算法总结(Dijkstra、Bellman-ford、SPFA和Floyd)

本文详细介绍了四种常见的最短路径算法:Dijkstra、Bellman-ford、SPFA和Floyd,包括它们的工作原理、适用场景、时间复杂度,以及堆优化版Dijkstra的改进。这些算法在单源最短路径问题中各有特色,适用于不同图的性质,如存在负权边和负权环的处理。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

在最短路径算法中,常用的有Dijkstra、Bellman-ford、spfa、Floyd这四大算法

  1. Dijkstra:迪克斯特拉算法
  2. Bellman-ford:贝尔曼-福特算法
  3. SPFA:Shortest Path Faster Algorithm算法
  4. Floyd:弗洛伊德算法

四大算法介绍

简介

Dijkstra:是一种用于求解单源最短路径的贪心算法。它从起始节点开始,逐步扩展到其他节点,每次选择当前距离起始节点最近的节点进行扩展。通过不断更新节点的最短距离,最终得到起始节点到其他所有节点的最短路径(Dijkstra算法(求最短路)

Belman-ford:是一种用于求解单源最短路径的动态规划算法。它通过对图中所有边进行松弛操作,逐步更新节点的最短距离。贝尔曼-福特算法可以处理带有负权边的图,并且能够检测出图中是否存在负权回路(Bellman-Ford算法

SPFA:是一种用于解决单源最短路径问题的算法,它也是对Bellman-Ford算法的一种优化。SPFA算法的基本思想是利用队列来存储待处理的顶点,通过不断地松弛操作来更新顶点的最短路径值

Floyd:又称插点法,是一种用于求解任意两点间最短路径的动态规划算法。它通过不断更新节点之间的最短距离,逐步求解出所有节点之间的最短路径。弗洛伊德算法适用于有向图或无向图,可以处理带有负权边的图

时间复杂度

算法 时间复杂度
一般Dijkstra O(n^2)
堆优化版Dijkstra O(mlogn)
Belman-ford O(nm)
spfa 一般O(m),最坏O(nm)
Floyd O(n^3)

适用场景

算法 适用场景 最短路问题
一般Dijkstra 所有边权都是正数 单源最短路
堆优化版Dijkstra
Belman-ford

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏大橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值