先介绍几个概念有助于理解Astar算法,
启发式搜索:对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。可以省略大量不必要的搜索,提高效率。
估价函数:从当前节点移动到目标节点的预估费用,这个估计就是启发式的,在寻路问题和迷宫问题中,我们通常用曼哈顿估价函数(Manhattan)预估费用。 (如果搜索区域的划分不是正方形,就不用Manhattan算法(|x|+|y|),换成其他的)
Astar算法与BFS: BFS是Astar算法的一个特例。对BFS算法,从当前节点拓展出来的每一个没有被访问过的节点都要放入队列进一步拓展,正因为如此,BFS算法的估计函数H永远为0,没有启发式的信息,所以可以认为是最烂的Astar算法。
开启列表: 将要被遍历的点的集合。
关闭列表:已经被遍历的点的集合。
Astar算法特点: 理论上是时间最优的,缺点是空间呈指数增长。(IDAstar 算法:这种算法被称为迭代加深Astar算法,可以有效的解决 Astar 空间增长带来的问题,甚至可以不用到优先级队列。)
搜索区域 (绿色–起点A,红色–终点B,蓝色–墙)
搜索区域被划分成了方形网格(二维数组),像这样简化搜索区域,是寻路的第一步。