求最短路算法的一个总结

无环情形
无向无权图: BFS
有向图:不管是否有权,都可以用DAG DP
DAG的拓扑排序(Topological Sorting):可借助DFS(或Kahn算法)完成。如果排序失败,说明该图存在有向环,不是DAG。
什么叫拓扑排序呢?它是有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:
1) 每个顶点出现且只出现一次。
2) 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。一个有向图能够被拓扑排序的充要条件是它是一个有向无环图(DAG)。

有环情形
有向正权图:
Dijkstra: 求单源、无负权的最短路(也可以用于无向正权,因为无向可以化为双有向) 。时效性较好,时间复杂度为O(V*V+E)。源点可达的话,O(V*lgV+E*lgV)=>O(E*lgV)。当是稀疏图的情况时,此时E=V*V/lgV,所以算法的时间复杂度可为O(V^2) 。若是斐波那契堆作优先队列的话,算法时间复杂度,则为O(V*lgV + E)。

有向负权图:
Bellman-Ford: 单点最短路,可检测并输出负环。时间复杂度O(VE)。
SPFA:Bellman-Ford算法的队列优化版,可检测负环(当存在一个点入队大于等于V次,则有负环),但不能输出负环。
时间复杂度:最好情形下,每一个节点都只入队一次,则算法实际上变为广度优先遍历,其时间复杂度仅为O(E)。某些特殊情形下 , 会使得每一个节点都被入队(V-1)次,此时算法退化为Bellman-ford算法,其时间复杂度为O(VE)。
Floyd-Warshall:任意两点间最短路径,基于DP。可以正确处理有向图或负权的最短路径问题。时间复杂度为O(V^3),空间复杂度为O(V^2)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值