曼哈顿距离在这个改进的n拼图中仍然是一个可接受的启发式算法吗?

时间:2013-12-10 13:14:59

标签: algorithm a-star 8-puzzle

我使用A *算法成功实现了一个8-puzzle解算器,现在我正在添加一个扭曲:拼图中可能有多个空白区域,并且拼贴上的数字不再是唯一的(可能是相同的数字。)

虽然算法在我修改它以生成所有空白空间的后继状态之后仍然有效,但它并没有以尽可能少的移动数来解决游戏(因为当我尝试使用时,我实际上想出的移动数量较少)手工解决,惊喜!)

问题:曼哈顿距离在这个难题中仍然是一个可行的启发式吗?如果没有,启发式是什么?

1 个答案:

答案 0 :(得分:1)

是的,此问题的可接受启发式算法可能涉及曼哈顿距离。

最简单的方法是将曼哈顿距离带到每个图块最近的目标位置。

这显然是可以接受的,因为与忽略所有障碍物直接移动到最近的位置相比,不可能采取更少的动作来更快地到达任何位置。

但是我们可以做得更好 - 对于目标位置为1和2的两个相同的区块A和B,而不是计算每个区域到最近的区域的距离,我们可以计算所有可能的区块分配到位置的距离,所以:

min(dist(A,1) + dist(B,2), dist(A,2) + dist(B,1))

这可以推广到任意数量的磁贴,但请记住,对于n个相同的磁贴,有n!个这样的可能性,因此计算速度非常快。

看到为什么这是可以接受的仍然相当容易 - 因为我们计算所有瓦片分配到位置的最短距离,实际的最短距离不可能更小。