A* 算法

A* 算法是一种逐步逼近的启发式路径搜索算法。它搜索出来的路径不一定是最优的,但却是最快的搜索方法。

算法原理简介

A*算法很简单,但要真正理解却又似乎很难,究其原因,主要是介绍该算法的人要么只讲一些虚的大的道理,要么直接上伪代码,很少仔细说明。下面本人就根本自己的理解讲一下。

A* 搜索是从起点出发,向一个预估最正确的方向逼近。如果正确就继续向前,不正确则另外寻找路线。
如果预估最正确的方向:为每个节点计算两个值:g和h。g为从起点到此处的cost,h为从此处到终点的预估cost。(因此A*算法需要首先为当前地图设计一个预估算法)


算法实现原理分析

1、从起点出发,构建一个连通图。如下图所示:
图片

图例说明:S表示起点,E表示终点,0表示未判定过的点,非0表示已判定过的点(其中1表示连通图内部的点,2表示连通图外部的点)。

2、从连通图的外部点中(1),选择一个预估cost最小的点,作为current node,进行启发。

3、遍历current node的所有子节点,

4、如果Kid为连通图的节点:如果Kid.g+h < check.g+h,则update(check.g&parent)。

如果kid不是连通图的节点:将kid增加到连通图中。

5、两次遍历完子节点后,地图分别为下列状态。
图片    图片
6、重复从2-4的过程,直到找到E为止。

7、最后可能的状态为:
图片

从上述过程可以看出,A*搜索其实是一个不断向预想的最优方向尝试的算法。

PS:

1、向外扩张中,只选择“连通图”外部的的原因。因为选择图内部的点没有意义,它所有的children都是已经判定过的,尝试他们无法得到新的信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值