用Java实现A Star(A *)算法

时间:2011-01-07 11:17:35

标签: java algorithm path-finding a-star

免责声明:我没有Java背景,因为我主要是C#开发人员。

想要实现A *算法的java实现 是的,我在网上看到了很多相同的版本,我无法在它们之间做出选择。

我正在寻找一种A *算法实现,它使用java的所有新功能,使算法更快(即使有点)。原因是我们正在实现MMO上的路径寻找,因此,性能是首要任务。

任何指针(至少在哪里看?)

2 个答案:

答案 0 :(得分:22)

尝试几种,测量,选择最快,适应您的需求。性能主要取决于启发函数的选择,它与A *本身无关。

如果启发式修复,优先级队列的实现可能会成为瓶颈,因此请尝试pairing heaps。这些是实践中最快的堆数据结构,它们比二进制堆具有优势,它们允许O(1)插入时间+摊销的O(log n)pop-min。这在许多A *循环的预期情况下很重要,其中队列被填充,但从未完全清空,即插入的数量远远大于弹出的数量。

如果内存成为问题,请切换到迭代加深A *(IDA *)或递归最佳优先搜索(RBFS)。

如果无效,请考虑使用近似算法(贪婪搜索)。简单地优化一个体面的A *循环并不会给你带来巨大的加速。

请参阅Russell and Norvig了解算法以及对问题的详细讨论。

答案 1 :(得分:10)

如果表现是您的首要任务,A *可能不是您的最佳选择。 A *提供了精确的解决方案,因此将继续处理,直到找到正确的答案。还有其他轻量级解决方案可以在更快的时间内提供足够好的解决方案:例如强制爬山或最佳优先,甚至是简单的深度优先。