【问题标题】:What is the time complexity of A* search [closed]A *搜索的时间复杂度是多少[关闭]
【发布时间】:2017-06-30 15:03:35
【问题描述】:

我是堆栈溢出的新手,但我在这里是因为我到处搜索,除了 wiki 之外,似乎找不到关于 A* 时间复杂度的太多信息。我还想将它与 Dijkstra 的算法进行比较,看看在 A* 中添加启发式如何提高它的性能。

我知道这是一个非常高级的话题,但是从 wiki 上给出的信息中我无法完全理解它(即使是在 wiki 上对 Dijkstra 算法的分析似乎也很高级)。

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

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

【问题讨论】:

  • 你可以在这里问:cs.stackexchange.com
  • E 为边数,V 为顶点数,Dijkstra 复杂度为O(E + V log V)(O(V^2) 用于幼稚的实现),而 A* 为O(E) ... 尚不清楚来自维基?
  • 如果用户回答了您的问题,请同时接受他的回答 (Accepting Answers: How does it work?)。如果不是,请说明什么仍未得到答复,这是 StackOverflow 的一个非常重要的部分,非常感谢。

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


【解决方案1】:

答案很简单,视情况而定。 星星本身并不是完整的算法。 星是具有启发式的Dijkstra,它满足某些属性(如三角不等式)。您可以选择导致不同时间复杂度的不同启发式函数。最简单的启发式方法是直线距离。然而,还有更高级的东西,例如 landmarks heuristic。

在最坏的情况下,您总是需要探索整个社区,因此从一般分析角度来看,您不会比 Dijkstra 更好。 然而,在大多数实际应用中,您可以获得更好的界限。 仅当您知道图形和启发式函数的某些属性时才这样做。然后,您可以做出一些假设,从而提高复杂性,但仅限于那些实例。

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

底线是:它极度依赖图表的结构和启发式函数。

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

互联网上也有很多,该算法非常流行,因为它很容易实现,并且在大多数情况下已经足够快(例如非复杂游戏)。

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2020-11-15
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多