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*算法

原理

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

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

A搜索算法和A*搜索算法概述_第1张图片

同样是从出发点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)就是教给计算机如何少做无用的功。

A搜索算法和A*搜索算法概述_第2张图片
现在要到达E,已经明知道中间无法过去,就没有必要去尝试红色圈,直接跟着墙壁走,一定比较省力,这就是算法的核心。

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

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

1、曼哈顿距离:这个名字听起来好高端,说白了,就是上面我们讲的横向格子数+纵向格子数;
A搜索算法和A*搜索算法概述_第3张图片

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

A搜索算法和A*搜索算法概述_第4张图片

实现

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

你可能感兴趣的:(人工智能,java,spring,json)