双向A *(A星)搜索

时间:2010-09-04 09:54:11

标签: algorithm shortest-path

我正在实施双向A *搜索(双向,因为搜索是同时从原点和目的地执行的,当这两个搜索相遇时,我将拥有我的最短路径 - 至少有一点额外的投入的逻辑。)

有没有人有过采用单向A *和双向化(!)的经验 - 我可以期待什么样的性能提升?我估计它至少会将搜索时间减半或者减少 - 但是我可以看到更大的收益吗?我正在使用该算法来确定道路网络上的最短路线 - 如果这是相关的(我已经读过关于MS的“Reach”算法,但是想要采取婴儿步骤而不是直接进入)。 / p>

4 个答案:

答案 0 :(得分:9)

在最好的情况下,它会在O(b ^(n / 2))而不是O(b ^ n)中运行,但只有在你幸运的时候才会这样:)

(其中b是你的分支因子,n是单向A *会考虑的节点数)

这一切都取决于两个搜索相遇的容易程度,如果他们在搜索的早期阶段找到了彼此很好的搜索时间,那么如果他们分成了很多不同的搜索时间,那么最终得到的东西比简单的A *慢(因为所有额外的簿记)

答案 1 :(得分:2)

您可以尝试http://sourceforge.net/projects/tway/ 有一个基准测试脚本将其与标准astar进行比较 (对于纽约市的道路数据,似乎可以获得30%的时间收益)

答案 2 :(得分:1)

实施了3种不同的双向A *搜索算法(参见cskit)。

从项目根类型mvn exec:java(需要Maven)查看实际算法。 祝你好运!

编辑This library提供了3种不同的双向A *算法。这三种算法都是最优的。)

答案 3 :(得分:1)

你可以认为聚类更有效率。另请参阅this article