A* 算法
一、A*算法
先看一下优先队列BFS算法,该算法维护了一个优先队列,不断从队列中取出当前状态最小的状态进行扩展,每个状态第一次从队列中被取出时,就得到了从初态到该状态的最小代价;
但是一个状态的当前代价最小,只能说明从起始状态到该状态的代价最小,而在未来的搜索中,从该状态到目标状态可能会花费很大的代价,而也有可能当前代价较大,但未来到目标状态的代价可能会很小;
为了提高搜索效率,可以对未来产生的代价进行预估,则搜索到一种状态时,计算出当前状态到目标状态的代价的估计值,用 “当前代价 + 估计代价” 最小的状态进行扩展;
二、估价函数
1、估价函数
设 x x x 为当前状态, f ( x ) f(x) f(x) 为对 x x x 的评估函数,则有
f ( x ) = g ( x ) + h ( x ) f(x) = g(x) + h(x) f(x)=g(x)+h(x)
其中,
g ( x ) g(x) g(x) 表示从初始状态到