500个航路点/节点的最短路径算法(例如Dijkstra)?

时间:2011-03-08 15:30:49

标签: java artificial-intelligence path-finding dijkstra graph-algorithm

我在这里询问了最短路径算法: 2D waypoint pathfinding: combinations of WPs to go from curLocation to targetLocation

(要了解我的情况,请阅读该问题以及此问题。)

似乎Dijkstra最短路径算法能够满足我的需要。但是,我的路线图中有大约500到1000个节点。

到目前为止,我所看到的实现将节点数量限制在50以下。我的问题是:我还应该使用Dijkstra最短路径算法,还是替代? Java中是否有任何实现?

3 个答案:

答案 0 :(得分:5)

在您尝试之前,您不知道。

1000个节点并不是那么多。 Dijkstra的算法在边缘数量上具有线性复杂度,并且边缘数量在节点数量上最差二次方。根据您对图表的描述,很难说出有多少边缘,但即使是完整的1.000.000也不是很大。

主要关注点是您使用priority queue正确实施。

编辑Russell & Norvig,第2版,在第3章和第4章中描述了一组通用搜索算法。他们称之为统一成本图搜索本质上是Dijkstra的算法。如果您按照他们的指示操作,可以在需要时将算法扩展到A *搜索。

答案 1 :(得分:2)

度量2D世界中的最短路径查找是A *算法的教科书示例。您的启发函数应该是从每个航点到目标的直线距离。

答案 2 :(得分:0)

dijkestra算法不是prim或kruskal,当后者仅使用边缘时,它正在计算整个mst。你有其他算法吗?