AGV导航中的最短路径算法比较

在AGV导航中,路径选择是一个重要课题,如果最优路径使用最短路径算法,那可以使用的算法有很多,本文比较了当前流行的最短路径算法,主要有Dijkstra 算法,Floyd算法,A-star算法,Bellman-Ford 算法,SPFA算法等

下表是对各种算法的一个比较:

算法 适用场景 实现难易度 时间/空间复杂度 负权边问题
Floyd算法 多源最短路径,计算任意两点之间的最短距离;稠密图效果最佳;时间复杂度比较高,不适合计算大量数据; 简单 时间复杂度:O(n^3);空间复杂度:O(n^2) 可以处理
Dijkstra 算法 单源最短路径,计算一个点到图中其他点之间的最短距离;稠密图; 时间复杂度: O((N+M)logN);空间复杂度:O(M) 不能处理
A-star算法 单源最短路径,可以平衡效率和路线质量,找到次优路线的搜索算法;是对 Dijkstra 算法的优化和改造; 复杂 时间复杂度: O((N+M)logN);空间复杂度:O(M) 不能处理
Bellman-Ford 算法 单源最短路径 稀疏图 中等 时间复杂度:O(MN);空间复杂度:O(M) 可以处理
SPFA算法 单源最短路径;对Bellman-Ford 算法的优化;稀疏图 中等 时间复杂度最坏也是O(MN);空间复杂度:O(M) 可以处理

因为AGV导航需要计算任意两点的最短路径,所以我们需要一个多源最短路径算法。Floyd算法满足此需求,同时实现简单,易于理解,虽然时间复杂度高,但是如果应用场景中导航点的个数不是天文数字的话,还是可以承受的。

References:

A-star 算法原理分析: https://blog.csdn.net/m0_37264516/article/details/88045568

Floyd算法: https://baike.baidu.com/item/Floyd%E7%AE%97%E6%B3%95/291990?fromtitle=%E5%BC%97%E6%B4%9B%E4%BC%8A%E5%BE%B7%E7%AE%97%E6%B3%95&fromid=5546207&fr=aladdin

Dijkstra(迪杰斯特拉算法)的实现: https://blog.csdn.net/qq_41923622/article/details/82082052

最短路径问题:https://cloud.tencent.com/developer/article/1525973

Bellman-Ford算法:https://baike.baidu.com/item/Bellman-Ford%E7%AE%97%E6%B3%95/1089090?fr=aladdin

SPFA 算法:https://baike.baidu.com/item/SPFA%E7%AE%97%E6%B3%95/8297411?fr=aladdin