星型(A*)算法在Java中的实现

星型(A*)算法在Java中的实现,java,algorithm,path-finding,a-star,Java,Algorithm,Path Finding,A Star,免责声明:我几乎没有Java背景,因为我主要是一名C#开发人员 希望有一个*算法的java实现。 是的,我在网上看到了同一版本的多个版本,我无法在它们之间进行选择 我正在寻找一个A*算法实现,它使用java的所有新特性,使算法更快(即使有一点点)。原因是,我们正在实现一个和上的路径查找,因此,性能是最高优先级 是否有任何指示(至少在哪里可以找到)?尝试几个,测量,选择最快的,以适应您的需要。性能主要取决于启发式函数的选择,该函数独立于A*适当值 如果启发式是固定的,那么优先级队列的实现很可能成为

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

希望有一个*算法的java实现。
是的,我在网上看到了同一版本的多个版本,我无法在它们之间进行选择

我正在寻找一个A*算法实现,它使用java的所有新特性,使算法更快(即使有一点点)。原因是,我们正在实现一个和上的路径查找,因此,性能是最高优先级


是否有任何指示(至少在哪里可以找到)?

尝试几个,测量,选择最快的,以适应您的需要。性能主要取决于启发式函数的选择,该函数独立于A*适当值

如果启发式是固定的,那么优先级队列的实现很可能成为瓶颈,因此请尝试。这些是实践中最快的堆数据结构之一,与二进制堆相比,它们具有允许O(1)插入时间+摊销O(logn)pop-min的优势。这在许多A*循环的预期情况下非常重要,其中队列已填满,但从未完全清空,即。,插入的数量远远大于持久性有机污染物的数量

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

如果不起作用,考虑使用近似算法(贪婪搜索)。简单地优化一个编写得体的a*循环不会给您带来巨大的速度提升


有关算法和问题的详细讨论,请参阅。

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

您能给我们提供您已经找到的版本的链接吗?顺便说一句,使用“Java的新特性”不会使算法更快。链接再次过期,对于像我这样的人来说,这里有一个最新的发现:@BattleBarnes所包含的双向A*甚至更快,
closedList
?哈希表应该使用什么数据结构。或者一棵红黑相间的树。或者是一棵八字树。或者任何最快的@st0le,你说得对,这很重要,但根据我的经验,快速集合比快速优先级队列更容易获得。@sk0le:如果需要一个封闭集合,那就是。@Robert,谢谢。“如何实现A*”时不时出现,而“阅读R&N”几乎总是答案;)+1.优化*代码不会赢得OP A性能奖杯。-0,是的,A*可能没有那么有效,但您需要的替代方法是特定于路径查找的加速技术,如收缩层次结构和类似方法。为了准确性,A*并不总是提供最佳答案。只有当试探法是正确的时,它才会这样做。