除了Dijkstra外,还有另外一种方法来计算近似完全图的最短路径吗?我有大约8,000个节点和大约1,800万个边缘。我已经浏览了“地图上的a至b”线程,并决定使用Dijkstra。我用Perl编写了我的脚本,使用的是Boost::。但结果和我预期的不一样。使用调用$ 10+ ->Dijkstra最短路径($start_node,$end_node)计算一条最短路径花费了大约几分钟的时间;
我知道有很多的边缘,这可能是背后的原因,缓慢的运行时间。我死在水里了吗?还有其他方法来加速这件事吗?
发布于 2009-09-12 03:59:40
简短的回答:如果你只想要几条最短的路径,Dijkstra是你最好的选择,而如果你想在每一对节点之间找到最短的路径,Floyd算法会更好。
即使您的图是密集的(根据您问题的标题),如果您只想找到几条最短的路径,那么将其转换为稀疏图并使用Dijkstra的稀疏实现可能会有一些好处。稀疏Dijkstra在O(E log V)中运行。
请注意,这是假设所有的边缘权重都是非负的;如果是,那么您就不能使用这些。你必须使用更慢的算法,比如Bellman。
发布于 2012-01-26 14:06:59
你也可以试着让一个转一下。
如果您可以使用好的启发式方法,这种方法尤其有益。
https://stackoverflow.com/questions/1413859
复制相似问题