A*算法

简介

A*搜索算法(英文:A*search algorithm,A*读作 A-star),简称 A*算法,是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历(英文:Graph traversal)和最佳优先搜索算法(英文:Best-first search),亦是 BFS 的改进。

定义起点 ,终点 ,从起点(初始状态)开始的距离函数 ,到终点(最终状态)的距离函数 ,以及每个点的估价函数

A*算法每次从优先队列中取出一个 最小的元素,然后更新相邻的状态。

如果 ,则 A*算法能找到最优解。

上述条件下,如果 满足三角形不等式,则 A*算法不会将重复结点加入队列。

时,A*算法变为 Dijkstra;当 并且边权为 时变为 BFS。

A*算法适用于搜索空间较大的情况。

例题

八数码

题解

由于搜索空间较大,有 个移动操作,假设我们从起点转移到终点至少需要 步,那么最起码我们要搜索 条路径,而且这已经是很理想的状况了,我们在搜索的时候难免会“走几条弯路”(也就是搜那些不可能到的路径,而且搜了很长一段距离停不下来),那么时间复杂度就会达到一个指数级别的增长。

所以采用 A*算法 或 双向BFS 减少搜索空间。

设计估价函数:

  • 当前状态中每个数与它的目标位置的曼哈顿距离之和。