在使用A星算法进行搜索时,如果开放列表中有两个(或更多)节点具有相同的最小成本值,应该选择哪个节点呢?
我知道应该选择启发式值最小的那个节点,但如果这个成本也相同呢?
例如:
我有两个从根节点扩展出来的节点。f(n1) = f(n2) 且 h(n1) = h(n2)。我应该扩展哪个节点,n1还是n2?我应该随机选择还是选择最先添加到开放列表的节点?
回答:
-
一种常见的策略是按照LIFO(后进先出)的方式处理这些相同成本的节点。这会使算法具有一定的深度优先特性。一般来说,这不一定是最有效的解决方案。
-
你也可以使用随机的方式来打破这种平局。
-
或者你可以选择一种实用的策略,即以某种方式选择算法首先生成的节点。