Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 双向A*(A星)搜索_Algorithm_Shortest Path - Fatal编程技术网

Algorithm 双向A*(A星)搜索

Algorithm 双向A*(A星)搜索,algorithm,shortest-path,Algorithm,Shortest Path,我正在实现一个双向a*搜索(搜索中的双向是同时从起点和终点执行的,当这两个搜索相遇时,我将得到我的最短路径——至少有一点额外的逻辑) 有没有人有过单向a*和双向(!)的经验?我能期望什么样的性能提升?我估计至少可以将搜索时间减少一半,但我能看到这样做带来的更大收益吗?我正在使用该算法来确定道路网络上的最短路线——如果这有任何关系的话(我读过MS的“到达”算法,但我想朝着这个方向迈出一小步,而不是直接跳进去)。在最好的情况下,它应该以O(b^(n/2))而不是O(b^ n)运行,但这只是在你幸运的

我正在实现一个双向a*搜索(搜索中的双向是同时从起点和终点执行的,当这两个搜索相遇时,我将得到我的最短路径——至少有一点额外的逻辑)


有没有人有过单向a*和双向(!)的经验?我能期望什么样的性能提升?我估计至少可以将搜索时间减少一半,但我能看到这样做带来的更大收益吗?我正在使用该算法来确定道路网络上的最短路线——如果这有任何关系的话(我读过MS的“到达”算法,但我想朝着这个方向迈出一小步,而不是直接跳进去)。

在最好的情况下,它应该以O(b^(n/2))而不是O(b^ n)运行,但这只是在你幸运的情况下:)

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

这一切都取决于两个搜索是否容易相遇,如果它们在搜索的早期找到了一个很好的中间点,那么你就浪费了很多搜索时间,但是如果它们向完全不同的方向分支,你可能会得到比简单的a*更慢的结果(因为所有额外的簿记)

你可能想尝试一下 有一个基准测试脚本将其与标准astar进行比较
(对于NY城市道路数据,它似乎有30%的时间效益)

< P>你可以考虑集群作为更有效的助推器。另请参见

注意-问题标题以单词形式重复A*,以便于搜索。仅供参考:这里有一个指向MS论文的链接,题为Reach for A*(A-star):谢谢Michael-一些额外的研究表明,我不太可能幸运-双向A*据说在同一节点上的两个方向会聚时相当尴尬。我可能会试一试,或者更可能会投入一些时间来计算覆盖范围。在更大的数字上,当进行双向搜索时,你显然会赢。微软研究实验室使用这种算法,但有很多更复杂的改进。