什么是A *搜索的时间复杂度

时间:2017-06-30 15:03:36

标签: algorithm time-complexity path-finding a-star asymptotic-complexity

我是堆叠溢出的新手,但我在这里是因为我已经到处搜索过,而且似乎找不到关于A *时间复杂度的大量信息,除了维基。我还想将它与Dijkstra的算法进行比较,看看如何在A *中添加启发式算法可以提高它的性能。

我知道它是一个非常高级的主题,但我无法从维基上给出的信息中完全理解它(即使对维基上的Dijkstra算法的分析似乎相当先进)。 / p>

https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm https://en.wikipedia.org/wiki/A*_search_algorithm

如果有人能够更详细地解释时间复杂性,或者就该主题提出任何阅读/学习材料,我将不胜感激。我对A *算法有很好的理解,但我现在才开始学习它的分析。

1 个答案:

答案 0 :(得分:2)

答案只是取决于明星本身并不是完整的算法。 明星 Dijkstra,带有启发式,可以满足某些属性(例如三角不等式)。您可以选择导致不同时间复杂度的不同启发式函数。最简单的启发式是直线距离。然而,还有更高级的东西,例如地标启发式

在最糟糕的情况下,你总是需要探索整个社区,这样你就不会从一般的分析点上比 Dijkstra 更好。 但是在大多数实际应用中,您可以获得更好的界限。 仅当您了解图表和启发式函数的某些属性时才会这样。然后,您可以做出一些导致更好复杂性的假设,但仅限于那些实例。

例如,如果您知道直线距离始终是图表中的正确距离并且您使用直线距离启发式,那么您的 A明星将尽可能提高Theta(1)的复杂性。然而,对于大多数应用来说,这是一个强烈的假设。但你可以想一想这是怎么回事。

底线是:非常依赖对图表的结构和启发式功能。

当您要求学习材料时,这是关于明星的讲座:Efficient Route Planning (A*, Landmarks, Set Dijkstra) - University of Freiburg

互联网上也有很多,这个算法非常受欢迎,因为它非常容易实现,而且对于大多数情况来说已经足够快(例如非复杂的游戏)。