关于A星寻路的缺点探讨

Reference

云风的 BLOG: A* 算法之误区 (codingnow.com)
A* 算法简介 (redblobgames.com)

正文

引用自:云风的 BLOG: A* 算法之误区 (codingnow.com)

A* 算法理论上 是时间最优的 可以得到最优解,不过我们可以通过选择一个更好的估价函数,或是减少解空间来提高性能。 A* 算法最大的缺点就是,空间需求太大。我们可以用一些时间换空间的方法改进。但是如果不存在解(比如在寻路问题中,根本不存在一条通达的路),采用 A* 算法求解,势必会穷举所有的可能。所以一般在游戏里,我们一般会采用额外的手法避免这个问题。

  1. A*寻路的空间需求

在A*算法中,我们常用两个容器来保存待遍历的节点和不需要遍历的节点,这一点确实是用空间来换时间,如果节点数量过多,空间消耗是很大的。

  1. 不存在解

如果又不存在解的情况,A*还是会遍历周围的格子节点,这就造成了不必要的消耗。

黄色是终点,蓝色是起点,尽管没有到达终点的路径,还是将整个地图都遍历了。

例如下图:

图1 不存在解
  • 解决方案

可以事先求得终点是否被包围,如果包围则,返回空。

  1. 启发函数的影响

估价函数的准确性影响搜索结果:估价函数的准确性会影响A星算法的最终结果,因此选择合适的估价函数很关键。

关于启发函数:A* 算法简介 (redblobgames.com),观看以上文章了解,曼哈顿距离与欧拉距离