A*搜索的时间复杂度是多少
What is the time complexity of A* search
我是堆栈溢出的新手,但我来这里是因为我到处搜索,除了 wiki 之外似乎找不到太多关于 A* 时间复杂度的信息。我还想将它与 Dijkstra 的算法进行比较,看看在 A* 中添加启发式算法如何提高它的性能。
我知道这是一个很高级的话题,但我只是从wiki上给出的信息无法完全理解它(甚至wiki上对Dijkstra算法的分析似乎也很高级)。
https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
https://en.wikipedia.org/wiki/A*_search_algorithm
如果有人能更详细地解释时间复杂度,或建议阅读/学习有关该主题的内容,我将不胜感激。material。我对A*算法理解的很透彻,但是现在才开始学习A*算法的分析。
答案很简单这取决于。 一颗星本身并不是完整的算法。 一颗星是Dijkstra,其启发式算法满足某些属性(如三角不等式)。您可以 select 导致不同时间复杂度的不同启发式函数。最简单的启发式算法是直线距离。然而,还有更高级的东西,例如 landmarks heuristic。
在最坏的情况下,您总是需要探索整个社区,因此从一般分析角度来看,您不会比 Dijkstra 更好。
然而,在大多数实际应用中,您可以获得更好的界限。
这仅在您知道图形和启发式函数的某些属性时才会发生。然后您可以做出一些假设,这些假设会导致更好的复杂性,但仅限于那些实例。
例如,如果您知道 直线距离 始终是图表中的正确距离,并且您使用 直线距离启发式,那么您的 A star 将具有 Theta(1)
的最佳复杂性。然而,对于大多数应用程序来说,这是一个非常强的假设。不过你可以想想这是怎么回事。
底线是:它极度依赖你的图表结构和你的启发式函数。
这里有星的讲座,求学习material:Efficient Route Planning (A*, Landmarks, Set Dijkstra) - University of Freiburg
互联网上也有很多,该算法很受欢迎,因为它很容易实现,而且在大多数情况下已经足够快(例如非复杂游戏)。
我是堆栈溢出的新手,但我来这里是因为我到处搜索,除了 wiki 之外似乎找不到太多关于 A* 时间复杂度的信息。我还想将它与 Dijkstra 的算法进行比较,看看在 A* 中添加启发式算法如何提高它的性能。
我知道这是一个很高级的话题,但我只是从wiki上给出的信息无法完全理解它(甚至wiki上对Dijkstra算法的分析似乎也很高级)。
https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm https://en.wikipedia.org/wiki/A*_search_algorithm
如果有人能更详细地解释时间复杂度,或建议阅读/学习有关该主题的内容,我将不胜感激。material。我对A*算法理解的很透彻,但是现在才开始学习A*算法的分析。
答案很简单这取决于。 一颗星本身并不是完整的算法。 一颗星是Dijkstra,其启发式算法满足某些属性(如三角不等式)。您可以 select 导致不同时间复杂度的不同启发式函数。最简单的启发式算法是直线距离。然而,还有更高级的东西,例如 landmarks heuristic。
在最坏的情况下,您总是需要探索整个社区,因此从一般分析角度来看,您不会比 Dijkstra 更好。 然而,在大多数实际应用中,您可以获得更好的界限。 这仅在您知道图形和启发式函数的某些属性时才会发生。然后您可以做出一些假设,这些假设会导致更好的复杂性,但仅限于那些实例。
例如,如果您知道 直线距离 始终是图表中的正确距离,并且您使用 直线距离启发式,那么您的 A star 将具有 Theta(1)
的最佳复杂性。然而,对于大多数应用程序来说,这是一个非常强的假设。不过你可以想想这是怎么回事。
底线是:它极度依赖你的图表结构和你的启发式函数。
这里有星的讲座,求学习material:Efficient Route Planning (A*, Landmarks, Set Dijkstra) - University of Freiburg
互联网上也有很多,该算法很受欢迎,因为它很容易实现,而且在大多数情况下已经足够快(例如非复杂游戏)。