N代表顶点个数,M代表边的条数.
Floyd算法虽然总体时间复杂度,但是可以解决负权边(不能解决负权环,实际上这几种都无法解决负权回路,因为一直循环下去总能找到更小的路径),并且均摊到每一点对上,在所有的算法中还是比较好的. Floyd算法代码复杂度小也是一大优势. Dijkstra算法最大的弊端就是无法适应有负权边的图,但Dijkstra具有很好的可扩展性,另外在Dijkstra算法在选择剩余不在最短路径顶点的集合中选择最小值是可以堆优化,这样算法的时间复杂度可以达到O(MlogN).
当图中含有负边时,使用Bellman-Ford或者SPFA算法.
参考:《啊哈!算法》一书,这本书通俗易懂,过程详细并配有图画讲解,都是一些基本的数据结构和算法知识,期待更给力的作品.
本书的作者网址:http://blog.csdn.net/ahalei
时间: 2024-10-06 18:21:49