当添加具有相同启发式值的节点时,A* 如何搜索 select 下一个节点?

How does A* search select the next node, when nodes with the same heauristic value get added?

我对这个概念有基本的了解,但是讲师给出的模范答案让我很困惑,

我对 (2,3)B 节点如何在 (2,3)A 节点之前扩展这一事实感到困惑,该节点理论上首先被添加到队列中(在节点 B 之前添加)

这棵树是网格最短路径评估的图形表示。 这棵树并不意味着 (2,3)A 节点没有子节点 实际上它们指的是网格中的相同位置,有人可以澄清我遗漏了什么吗?提前致谢:)

答案在于优先级队列的实现。

采用通常的 heap 数组实现。元素排序如下:

0 1 2 3 4 5 6 7 8 9 10

但在 i 位置下方,接下来的两个是 2i+12i+2。所以数组是一个树结构,看起来像这样:

[0,
  [1,
    [3, [7, 8]],
    [4, [9, 10]]]],
  [2, [5, 6]]]

现在假设 3, 56, 7 具有相同的优先级。然后按顺序添加了这 4 个。还假设堆首先丢弃顶部(左边,不管你怎么想)元素。然后当你提取时,我们最终会把 35 放到底部,然后 3 先下降。但是当你继续提取时,你最终会在 6, 7 之间取得平局,现在 7 位于顶部(左侧,无论你如何定位你的想法)所以它首先下降。

结果是优先队列保证事情按优先顺序出现,但没有其他保证顺序。所以相同优先级的东西可以任意顺序出现。

这与 Heapsort 不是稳定排序的原因直接相关。