AStar算法
启发式搜索 1. 相关概念 在宽度优先和深度优先搜索里面,我们都是根据搜索的顺序依次进行搜索,可以称为盲目搜索,搜索效率非常低。 而启发式搜索则大大提高了搜索效率,由这两张图可以看出它们的差别: 什么是启发式搜索( heuristic search ) 用当前与问题有关的信息作为启发式信息,这些信息是能够提升查找效率以及减少查找次数的。 我们定义了一个估价函数 h(x) 用于估计状态 x 到 终点 的 代价 起始状态到 x 状态所花的代价,我们称为 g(x) 令 F(x)=g(x)+h(x) ,作为我们的搜索依据。 你要从 x 走到目的地,那么 h(x) 就是你感觉或者目测大概要走的距离, h*(x) 则是你到达目的地后,发现你实际走了的距离。你预想的距离一定是比实际距离短,或者刚好等于实际距离的值。这样我们称你的 h(x) 是可纳的,是乐观的。 2. A*图示过程 方格左下角为 G(x) 为起点到 x 的步数,右下角为 H(x) 为 x 到终点的预估值,这里选的是曼哈顿距离,右上角为 F(x)=G(x)+H(x) 估价函数。绿色点为起点,黑点为墙,红点为终点。起点相邻四个点进 open 表,并计算出 F 值。 继续选择 open 列表中 F 值最小的节点,此时最小节点有两个,都为 4 。这种情况下选取哪一个都是一样的,不会影响搜索算法的效率。因为启发式相同