A*算法的通俗理解

来源:互联网 发布:视频对比分析软件 编辑:程序博客网 时间:2024/05/16 01:56

之前做布局布线系统的时候,涉及寻路算法。其中用到的A*算法在教材上的描述往往比较晦涩,对某些初学习者来说,可能会存在一点困难。下面就这个算法,提供一个通俗的描述方式。

 

可以考虑如下例子:

 

小i在上海,计划去北京旅游。他也不知道,具体的路线,只知道到北京的路线必定会经过某些城市。

我们知道上海周边,有苏州,杭州。因此去北京的路线必定会穿过这两个城市。

小i会评估如下两条线路:

路线1:上海-杭州-北京

路线2:上海-苏州-北京

 

上海-杭州和上海-苏州的实际路程,小i可以很快知道。如何做决策,就取决于对杭州-北京和苏州-北京的路程的估计。

 

评估的标准为

路线A的代价(CA) = 上海-杭州的实际路程(SA) + 杭州-北京的估计路程(SA*)

路线B的代价(CB) = 上海-苏州的实际路程(SB) + 苏州-北京的估计路程(SB*)

这里的估计路程,可以通过地理方位简单的给出评估。

 

毫无疑问,如果CA<CB, 则小i会选择路线1,反之,选择路线2。

 

如此,考虑A*算法中的基本公式

 f(n)=g(n)+h(n)

f(n)全路径的估计代价, 如例子中CA和CB

g(n)起始节点到节点n的实际代价, 如例子中SA和SB

h(n)节点n到目标点的估计代价, 如例子中SA*和SB*

 

很容易理解搜索的最佳策略,是选择f(n)最小的路径,作为候选路径。

而且,这里很容易看出SA*和SB*的评估是否合理,决定了路径的选择是否最优。这也就是为什么,在A-Star算法中,会特别强调h(n)的原因。