分别有下面这几种算法(heap写了好久 T T 。。)
其中未注明LIST的SPFA 和 dij 是邻接矩阵的形式。
heap是手写的堆,邻接表存图。priority指的是调用C++里的STL。
稠密图我建图是任意两点均有路径,对角线都是0。。求得的最短路所有起点都是1,终点都是n(矩阵的大小)
下面是稠密图的时间统计,因为矩阵不能开太大,所以最大开了1250*1250。除了n = 10 都是秒过就统计一次,其他均生成三次数据。
时间单位是ms。
稠密图总结:(可以是用邻接矩阵的情况)
1、如果n不大,可以用邻接矩阵的话,dijkstra是最好的选择,写起来比较快而且速度也很快。其次是SPFA,写起来比较好写。
2、floyd 这个算法,n大于300就最好不要用了,很有可能跑1秒以上了。
3、bellman-ford ,n大于200就不要用了,比floyd还耗时间 = =。。。
稀疏图的m 是边数,n是点数。
稀疏图总结:(前面的n比较小时可以用邻接矩阵,后面的floyd 啊 dijkstra等不能使用邻接矩阵的就删掉不考虑了)
1、稀疏图,明显感觉用邻接表的算法占优势了。
2、bellman 超过50000边就不要用了。
3、heap的表现可以说是最好的。
4、超过3000个点就不要用dijkstra 加邻接表 不加任何优化的那种。
5、超过500000条边就不要用SPFA加邻接表了。
6、综上,dijkstra + priority 邻接表 是最好的选择。虽然比heap慢一点,跑3W点 300W边和heap没差多少。
7、priority坏处就是,不能在队列里修改值,如果进队多次,可能空间满了。。
8、特别恶心的可以用heap ,一般的恶心用priority足以^ ^
附稠密图和稀疏图的时间统计
稠密图
稀疏图
分享到:
相关推荐
代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法离散优化问题代码代码 基于最短路dijkstra算法...
Dijkstra 最短路分析算法 Matlab源代码
带权区间图的最短路算法,带权区间图的最短路算法,带权区间图的最短路算法,带权区间图的最短路算法
最短路径Dijkstra算法-最短路Dijkstra算法.rar 最短路径Dijkstra算法
最短路问题的简便算法
最短路Dijkstra算法 Matlab代码Function部分,通用各种类型网络
最短路的算法---Dijkstra算法 狄克斯特拉最短路算法
图论Dijkstra最短路算法matlab通用程序,有实例。希望对大家有用
floyd最短路算法 最短路程序
算法合集之《最短路算法及其应用》
最短路Dijkstra算法 Matlab代码Input例子,一个小网络,用于测试Function
在借鉴城市公共交通最短路算法的基础上,针对城际网络的特点,研究了城际交通换乘路径的选择问题。以 最小换乘次数为首要目标,并以此为基础,综合考虑时间、票价等因素,获取城际交通系统最短路。首先提出一种 基于...
k则最短路算法文献,理论严密算法中的删除路径算法,santos。
在计算有环有方向的最短路时,可以用Floyd算法计算出任意两点之间的最短路!
MATLAB源码集锦-基于最短路dijkstra算法离散优化问题代码
Dijkstra 最短路算法 C#实现的
所有最短路算法的模板,适合刚接触ACM的朋友们
最短路问题及算法
最短路问题优化算法的分析与研究,孙磊,,本文研究了Dijksta算法的几种优化方法。在大量的最短路算法中,Dijksta算法是一种最经典的方法,很多算法都是在该算法的基础上经过改�
该算法可以用来寻求图上的最短路或者图的最小支撑树,并且不要求图是连通的,还可以判断图的连通性。