当添加具有相同启发式值的节点时,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+1
和 2i+2
。所以数组是一个树结构,看起来像这样:
[0,
[1,
[3, [7, 8]],
[4, [9, 10]]]],
[2, [5, 6]]]
现在假设 3, 5
和 6, 7
具有相同的优先级。然后按顺序添加了这 4 个。还假设堆首先丢弃顶部(左边,不管你怎么想)元素。然后当你提取时,我们最终会把 3
和 5
放到底部,然后 3
先下降。但是当你继续提取时,你最终会在 6, 7
之间取得平局,现在 7
位于顶部(左侧,无论你如何定位你的想法)所以它首先下降。
结果是优先队列保证事情按优先顺序出现,但没有其他保证顺序。所以相同优先级的东西可以任意顺序出现。
这与 Heapsort 不是稳定排序的原因直接相关。
我对这个概念有基本的了解,但是讲师给出的模范答案让我很困惑,
我对 (2,3)B 节点如何在 (2,3)A 节点之前扩展这一事实感到困惑,该节点理论上首先被添加到队列中(在节点 B 之前添加)
这棵树是网格最短路径评估的图形表示。 这棵树并不意味着 (2,3)A 节点没有子节点 实际上它们指的是网格中的相同位置,有人可以澄清我遗漏了什么吗?提前致谢:)
答案在于优先级队列的实现。
采用通常的 heap 数组实现。元素排序如下:
0 1 2 3 4 5 6 7 8 9 10
但在 i
位置下方,接下来的两个是 2i+1
和 2i+2
。所以数组是一个树结构,看起来像这样:
[0,
[1,
[3, [7, 8]],
[4, [9, 10]]]],
[2, [5, 6]]]
现在假设 3, 5
和 6, 7
具有相同的优先级。然后按顺序添加了这 4 个。还假设堆首先丢弃顶部(左边,不管你怎么想)元素。然后当你提取时,我们最终会把 3
和 5
放到底部,然后 3
先下降。但是当你继续提取时,你最终会在 6, 7
之间取得平局,现在 7
位于顶部(左侧,无论你如何定位你的想法)所以它首先下降。
结果是优先队列保证事情按优先顺序出现,但没有其他保证顺序。所以相同优先级的东西可以任意顺序出现。
这与 Heapsort 不是稳定排序的原因直接相关。