最短路径算法比较一文中,看到A*算法,可以使用曼哈顿距离、欧式距离、切比雪夫距离三种不同的估算方法
我们可以定义曼哈顿距离的正式意义为L1-距离或城市区块距离,也就是在欧几里德空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为: |x1 - x2| + |y1 - y2|.
曼哈顿距离——是两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。
欧氏距离(Euclidean distance)也称欧几里得度量、欧几里得度量,是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧氏距离的就是两点之间的距离。二维的公式: ρ = sqrt( (x1-x2)^2+(y1-y2)^2 )
国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1y1)走到格子(x2y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | | y2-y1 | ) 步 。
1. A* (使用曼哈顿距离)
2. A* (采用欧氏距离)
3. A* (利用切比雪夫距离)
A*算法最为核心的部分,就在于它的一个估值函数的设计上: f(n)=g(n)+h(n)
其中f(n)是每个可能试探点的估值,它有两部分组成: 一部分,为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示)。 另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值, h(n)设计的好坏,直接影响着具有此种启发式函数的启发式算法的是否能称为A*算法。
一种具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法的充分条件是: 1、搜索树上存在着从起始点到终了点的最优路径。 2、问题域是有限的。 3、所有结点的子结点的搜索代价值>0。 4、h(n)=<h*(n) (h*(n)为实际问题的代价值)。
当此四个条件都满足时,一个具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法,并一定能找到最优解。