最短路径算法总结(floyd及其优化,dijkstra,SPFA及其优化,A*)

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

在网上看大家写的算法详解非常详细、篇幅很长,但是讲来讲去有点绕。

这里对几个经典的算法用尽可能少的几句话概括一下,写代码的时候不容易绕晕。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值