Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 当添加具有相同heauristic值的节点时,*搜索如何选择下一个节点?_Algorithm_Search_Artificial Intelligence_A Star_Motion Planning - Fatal编程技术网

Algorithm 当添加具有相同heauristic值的节点时,*搜索如何选择下一个节点?

Algorithm 当添加具有相同heauristic值的节点时,*搜索如何选择下一个节点?,algorithm,search,artificial-intelligence,a-star,motion-planning,Algorithm,Search,Artificial Intelligence,A Star,Motion Planning,我对这个概念有一个基本的理解,但一位讲师给出的典型答案让我困惑, 我对(2,3)B节点如何在(2,3)节点之前展开感到困惑,理论上,该节点首先被添加到队列中(在添加节点B之前) 此树是网格最短路径评估的图形表示此树并不意味着(2,3)节点没有子节点实际上它们在网格中引用了相同的位置,有人能澄清我遗漏了什么吗?提前感谢:)答案是这取决于优先级队列的实现 以通常的数组实现为例。元素的顺序如下所示: 0 1 2 3 4 5 6 7 8 9 10 [0, [1, [3, [7, 8]],

我对这个概念有一个基本的理解,但一位讲师给出的典型答案让我困惑,

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


此树是网格最短路径评估的图形表示此树并不意味着(2,3)节点没有子节点实际上它们在网格中引用了相同的位置,有人能澄清我遗漏了什么吗?提前感谢:)

答案是这取决于优先级队列的实现

以通常的数组实现为例。元素的顺序如下所示:

0 1 2 3 4 5 6 7 8 9 10
[0,
  [1,
    [3, [7, 8]],
    [4, [9, 10]]]],
  [2, [5, 6]]]
但是在位置
i
下面,接下来的两个是
2i+1
2i+2
。因此,数组是一个树状结构,如下所示:

0 1 2 3 4 5 6 7 8 9 10
[0,
  [1,
    [3, [7, 8]],
    [4, [9, 10]]]],
  [2, [5, 6]]]
现在假设
3,5
彼此具有相同的优先级,因此
6,7
也具有相同的优先级。这4个是按这个顺序加起来的。还假设堆首先将顶部(不管您怎么想,都是左侧)元素放在ties上。然后,当您提取时,我们最终会将
3
5
放在底部,然后
3
首先下降。但是当你继续提取时,你最终会在
6,7
之间找到一个平衡点,现在
7
位于顶部(左侧,不管你如何调整你的思维方向),因此它首先下降

结果是,优先级队列保证事情按优先级顺序进行,但在顺序上没有其他保证。因此,同样优先的事情可以以任何顺序出现


这与为什么不是一个稳定的排序直接相关。

你能详细说明一下你的成本函数和启发式函数是什么吗?上图中的f指的是什么?明白了。因此,如果您根据这个求值函数将这些节点转储到优先级队列中,那么a和B的总成本看起来是相同的,对吗?如果是这种情况,则由具体的实现决定从哪个节点展开。在这种情况下,它看起来像是先取了B,这是评估函数的值,即实际成本+启发式成本,使用的启发式函数是h(x)=(4)− r) +(c)− 1) ,其中r和c指网格中节点的x和y坐标。另外,代价函数是节点到起始节点的距离。有趣的是,这是一个随机选择吗?或者,对于整个实现(即始终首先选择最后添加的节点),通常对于优先级队列,如果两个元素具有相同的优先级,则它们将按队列顺序提供服务-因此将是先进先出(FIFO)。