【发布时间】:2012-06-17 09:25:27
【问题描述】:
维基百科对 A* 的复杂性有以下说法:
A* 的时间复杂度取决于启发式。在最坏的情况下, 扩展的节点数是长度的指数 解(最短路径),但搜索时是多项式的 空间是一棵树……
而我的问题是:“A* 的时间复杂度是指数级的吗?还是不是时间复杂度,而是内存复杂度?” 如果是内存复杂度,A*的时间复杂度是多少?
【问题讨论】:
-
表示时间复杂度。
维基百科对 A* 的复杂性有以下说法:
A* 的时间复杂度取决于启发式。在最坏的情况下, 扩展的节点数是长度的指数 解(最短路径),但搜索时是多项式的 空间是一棵树……
而我的问题是:“A* 的时间复杂度是指数级的吗?还是不是时间复杂度,而是内存复杂度?” 如果是内存复杂度,A*的时间复杂度是多少?
【问题讨论】:
在最坏的情况下,A* 时间复杂度是指数级的。
但是,请考虑h(n) 估计距离和h*(n) 剩余确切距离。
如果条件| h(n) - h*(n) | < O(log *h(n) )成立,即如果错误
我们的估计函数的 次指数增长,那么 A* 时间复杂度将是
多项式。
遗憾的是,大多数情况下,估计误差呈线性增长,因此,在实践中, 更快的替代方案是首选,付出的代价是最优性 再也达不到了。
【讨论】:
由于存储每个扩展节点是为了避免多次访问同一节点,因此扩展节点数量的指数增长意味着指数时间和空间复杂度。
请注意,必要的指数空间复杂度意味着指数时间复杂度。反之则不成立。
【讨论】:
O((|V| + |E|) log |V|)。用图大小来描述 A* 复杂度是最有意义的。这个答案出奇地差(也许是维基百科驱动的?肯定不是科门......)
A* 时间复杂度是指数还是内存复杂度?
维基百科的摘录表明它指的是时间复杂度
【讨论】: