[面试] BFS、Dijstra、SPFA、Floyd求最短路的比较

bfs:广度优先搜索,暴力,时间复杂度跟图的边数有关,树的层序遍历,求无权图的单源最短路,队列
dijkstra:贪心,时间复杂度n的平方,可以用堆优化到nlogn,求带权图的单源最短路
SPFA:dp,队列优化的求单源最短路,时间复杂度n的3次方, dijkstra不能处理带负权边和回路,SPFA可以解决,可以判断图中是否有回路
floyd:dp,时间复杂度n的三次方,求带权图的多源最短路,可以判断图是否有回路

 

求解方向

算法类型

时间复杂度

BFS

权图的源最短路/求树的层序遍历(队列

暴力搜索

O(V+E),与边有关。最坏的情况就是这个图是完全图,无向完全图有个公式是E = V*(V-1)/2,V=100,则E=10^4,主要由边决定

Dijstra

权图的源最短路(非负权,不可判断是否回路

贪心

O(V^2),可以用堆优化到O(VlogV)   当是稀疏图的情况时,此时E=V*V/lgV,所以算法的时间复杂度可为O(V^2) 。若是斐波那契堆作优先队列的话,算法时间复杂度,则为O(V*lgV + E)。

SPFA

队列优化的求权图的源最短路(可负权,可判断是否回路

动态规划

O(kE),其中k<<E

Floyd

权图的源最短路(可负权,可判断是否回路

动态规划

O(V^3),空间O(V^2)

Dijstra与SPFA区别:Dijkstra不能处理带负权边和回路,SPFA可以解决,可以判断图中是否有回路。但是在非负边权图中,为了避免最坏情况的出现,通常使用效率更加稳定的Dijkstra算法,以及它的使用堆优化的版本。

BFS有2个功能:一个是遍历,与DFS类似,时间复杂度都是O(V+E)。另一个是是求无权图最短路





  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值