Floyd | Dijkstra | Bellman-Ford | 队列优化的Bell. | |
空间复杂度 | O(N^2) | O(M) | O(M) | O(M) |
时间复杂度 | O(N^3) | O((M+N)logN) | O(NM) | 最坏也是O(NM |
适用情况 | 稠密图 和顶点关系密切 | 稠密图 和顶点关系密切 | 稀疏图 和边关系密切 | 稀疏图 和边关系密切 |
负权 | 可以解决负权 | 不能解决负权 | 可以解决负权 | 可以解决负权 |
无法解决负权边的图,但有良好的可扩展性,时间复杂度低,堆优化后的Dijkstra的时间复杂度可以达到O(MlogN)。
Bellman-Ford算法:
可以解决负权边的图,可以判断是否有负权回路
Floyd算法:
时间复杂度高,不可以解决负权边,并且均摊在每一点对上,在所有算法中还是属于较优的。较小的编码复杂度也是优势,如果要求是所有点之间的最短路径,或者如果数据范围较小,Floyd算法比较适合。