维基百科关于A *复杂性的解释如下:
引用:
引用:
A*的时间复杂度取决于启发式算法。在最坏情况下,展开的节点数与解(最短路径)的长度呈指数关系,但当搜索空间是树时,它是多项式的...
我的问题是:“A *的时间复杂度是否为指数级?还是说它不是时间复杂度,而是内存复杂度?如果是内存复杂度,那么A *的时间复杂度是什么?”A*的时间复杂度取决于启发式算法。在最坏情况下,展开的节点数与解(最短路径)的长度呈指数关系,但当搜索空间是树时,它是多项式的...
我的问题是:“A *的时间复杂度是否为指数级?还是说它不是时间复杂度,而是内存复杂度?如果是内存复杂度,那么A *的时间复杂度是什么?”| h(n) - h*(n) | < O(log *h(n) )
,其中h(n)是估计距离,h*(n)是剩余的精确距离,也就是说,如果我们的估计函数的误差呈现亚指数增长,那么A*算法的时间复杂度将是多项式级别的。不幸的是,大部分情况下,估计误差是线性增长的,因此在实际应用中,更快的替代方案更受欢迎,但这也意味着不能保证最优解。由于每个扩展节点都被存储以避免多次访问同一节点,所以扩展节点数量的指数级增长意味着指数时间和空间复杂度。
请注意,指数空间复杂度必然意味着指数时间复杂度。反之则不成立。
O((|V| + |E|) log |V|)
。用图的大小来描述A*算法复杂度是最有意义的。这个答案令人惊讶地差劲(也许是受维基百科影响?肯定不是Cormen...)。 - PawelP