维基百科关于 A* 复杂性的说法如下(链接在这里):
比它的时间复杂度更成问题的是 A* 的内存使用。在最坏的情况下,它还必须记住指数数量的节点。
我看不出这是正确的,因为:
假设我们探索节点 A 及其后继节点 B、C 和 D。然后我们将 B、C 和 D 添加到开放节点列表中,每个节点都伴随着对 A 的引用,然后我们将 A 从开放节点移动到封闭节点节点。
如果在某个时候我们找到了另一条通往 B 的路径(例如,通过 Q),它比通过 A 的路径更好,那么只需将 B 对 A 的引用更改为指向 Q 并更新其实际成本 g (和逻辑上 f)。
因此,如果我们在一个节点中存储它的名称、它的引用节点名称以及它的 g、h 和 f 分数,那么存储的最大节点数就是图中的实际节点数,不是吗?我真的不明白为什么算法在任何时候都需要在内存中存储一定数量的节点,这些节点与最佳(最短)路径的长度成指数关系。
有人可以解释一下吗?
编辑据我所知,现在阅读您的答案,我从错误的角度进行推理。我认为给定的图是理所当然的,而指数复杂度是指仅由“分支因子”定义的概念图。