A搜索算法和A*搜索算法概述

A算法

A算法是一种基于估价函数的加权启发式图搜索算法
** f ( n ) = d ( n ) + w ( n ) f(n) = d(n)+w(n) f(n)=d(n)+w(n) **
其中:

n n n:任意一个顶点

g ( n ) g(n) g(n):表示起点到任意顶点 n n n的实际成本

h ( n ) h(n) h(n):是一种启发式函数,表示从任意顶点 n n n到目标点的估算成本

值得注意的是,启发式的信息给的越多,估价函数的数值就越大,执行的效率页越高。

A*算法

原理

**广度优先搜索之所以能找到最优的路径,原因就是每一次扩展的点,都是距离出发点最近、步骤最少的。**如此这样递推,当扩展到目标点的时候,也是距离出发点最近的。这样的路径自然形成了最短的路线。

任何事情都有正反两面。正是由于广度优先搜索一层层的扩展,虽然让他找到了最优的路线,但是,他却很傻的走完了绝大多数格子,可以这样说没有什么学习能力和判断能力,才找到我们的目标点。也就是,他只关注了当前扩展点和出发点的关系,而忽略了当前点和目标点的距离。

在这里插入图片描述

同样是从出发点S走了两步以后到达的M1和M2两个点,如果让你来选择,你会选择他们中的谁来做扩展点呢?很明显,只要是眼力不差的人,都会选择M1。为什么呢?因为M2需要再走9步,才能到达终点E;而M1只需要7步!!!这里实际上就是上面公式的 g ( n ) g(n) g(n).

A算法相对广度优先搜索算法,除了考虑中间某个点同出发点的距离以外,
还考虑了这个点同目标点的距离。这就是A
算法比广度优先算法智能的地方。也就是所谓的启发式搜索。

所以,接下来最关键的问题,就是怎么计算这个 h ( n ) h(n) h(n)的值!
除了考虑中间某个点同出发点的距离以外,还考虑了这个点同目标点的距离。 h ( n ) h(n) h(n)就是教给计算机如何少做无用的功。

在这里插入图片描述
现在要到达E,已经明知道中间无法过去,就没有必要去尝试红色圈,直接跟着墙壁走,一定比较省力,这就是算法的核心。

估算函数 h ( n ) h(n) h(n)如何计算?

常见的距离计算公式有这么几种:

1、曼哈顿距离:这个名字听起来好高端,说白了,就是上面我们讲的横向格子数+纵向格子数;
在这里插入图片描述

2、欧式距离:这个名字听起来也很高端,说白了,就是两点间的直线距离sqrt((x1-x2)2 + (y1-y2)2)

在这里插入图片描述

实现

利用A*算法解决迷宫问题(附代码)

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪程序猿

就当请我吃顿饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值