在网上看大家写的算法详解非常详细、篇幅很长,但是讲来讲去有点绕。
这里对几个经典的算法用尽可能少的几句话概括一下,写代码的时候不容易绕晕。
floyd算法及优化
时间复杂度是O(n**3),代码超级简洁(但运行起来也超慢),会得到所有点两两之间最小距离,python示例代码如下:
for k in range(n):
for i in range(n):
for j in range(n):
d[i][j]=min(d[i][j],d[i][k]+d[k][j])
(其中k,i,j均为节点的编号,d为距离矩阵,d[i][j]为i点到j点的距离,n为节点总个数)
floyd是动态规划算法,有递推公式:d[i][j]=min(d[i][j],d[i][k]+d[k][j]),注意三重循环k要写外面,里面的i,j是对称的故而顺序没影响。
思路是:对于第1个中间点k1,计算以k1作为中间点时,所有点两两之间的最小距离;对于第2个中间点k2,计算以k2作为中间点时,所有点两两之间的最小距离,如果这个距离比之前的小,就更新d[i][j]的值……如此遍历所有中间点k后,所有d[i][j]都更新到最小值。
floyd优化
由于d[i][j]和d[j][i]实际上是相同的,因此上述代码可以化为:
for k in range(n):
for i in ra

本文简要概述了四个经典的最短路径算法:Floyd算法及其优化,Dijkstra算法,SPFA算法(Shortest Path Faster Algorithm)及其优化,并介绍了A*算法。Floyd算法通过三重循环实现动态规划,优化版减少了冗余计算。Dijkstra算法的时间复杂度为O(n^2)。SPFA算法的时间复杂度为O(VE),优化后的SLF和LLL策略能提高效率。A*算法则结合启发式信息寻找最短路径。
&spm=1001.2101.3001.5002&articleId=84955193&d=1&t=3&u=4387347809e04127b78a8ed9a3de70c8)
3175

被折叠的 条评论
为什么被折叠?



