免责声明:由于我主要是C#开发人员,因此我对Java的了解很少。
想拥有A *算法的Java实现。 是的,我在网上看到了同一版本的许多版本,因此无法在它们之间进行选择。
我正在寻找一种A *算法实现,该实现使用Java的所有新功能来使算法更快(即使有点)。原因是我们正在实施一个路径MMO,因此,性能是重中之重。
MMO
任何指针(至少在哪里看)?
尝试几次,测量,最快地选择,以适应您的需求。性能主要取决于启发式函数的选择,而启发式函数与A *固有无关。
如果启发式是固定的,则优先级队列的实现可能会成为瓶颈,因此请尝试配对堆。这些是实践中最快的堆数据结构,与二进制堆相比,它们具有优点,它们允许O(1)插入时间+摊销O(log n)pop-min。这在许多A *循环的预期情况下很重要,在这种情况下队列已满,但从未完全清空,即插入次数远大于弹出次数。
如果内存成为问题,请切换到迭代加深A (IDA )或递归最佳优先搜索(RBFS)。
如果没有任何效果,请考虑使用近似算法(贪婪搜索)。仅优化写得体的A *循环并不会为您带来巨大的提速。
有关算法和问题的详尽讨论,请参见Russell和Norvig。