星效算法最有效的路径

时间:2017-02-02 05:34:37

标签: algorithm

我尝试用对角线和两点之间直线距离的启发式编写星形算法。但是,在这种情况下,路径不是最短的 enter image description here

Going(2,2) - > (3,2) - > (4,2) - > (5,2)会更快,但它选择了削减。

我无法弄清楚我的理解有什么不对,因为当我这么想时,这就是它实际工作的方式。

我的理解:

  1. 从(1,1)开始发现(2,2)为最佳
  2. 发现(3,3)是最好的,发现(4,3)是最好的,因为你不能偷工减料
  3. 查找(5,3)为最佳,但计算(5,2)的f值为X
  4. 不能转到(6,2)并将f(5,2)计算为Y> X所以路径回溯到(4,3)
  5. 由于(5,3)不再处于开放集合中,因此选择下一个最佳(5,2)
  6. 其余的路径很好,没有任何回溯,因为没有"死胡同"满足了。
  7. 它应该意识到f(5,2)低于(4,2)低于(3,2),这是从未计算过的,因为它选择采取(3,3)

    这究竟出了什么问题?

    编辑:水平/垂直的步费用为1,对角线的步长费用为sqrt(2)

1 个答案:

答案 0 :(得分:0)

感谢亨利在评论中,推理因为(4,3) - > (5,2)具有比(2,2)更高的f值 - > (3,2),所以它应该向下(3,2)

即。要评估的下一个节点是从已排序的开放节点列表中选择的,而不是在输入时排序的值组的节点列表(不是添加了排序列表的堆栈)