形式陈述
输入是有限非负边权图、起点 s 、目标 t 与有限实值启发函数 h ( v ) ;输出一条 s 到 t 的最短路径 理路 最短路问题 Shortest-path problem 在有限有向实权图中寻找源点到各顶点的最小有向游走成本。 或不可达。算法维护已知路径代价 g ( v ) 、前驱,以及按
f ( v ) = g ( v ) + h ( v ) 排序的优先队列 理路 优先队列 Priority queue · Priority queue ADT 按键的优先次序反复访问并移除当前最小元素的抽象数据类型。 。初始化 g ( s ) = 0 、其余为 + ∞ ,将 s 放入开放集合。反复弹出最小 f 的有效记录:若它是目标则返回;否则扫描出边,对严格改进 g ( v ) > g ( u ) + w ( u , v ) 更新代价与前驱,并插入或更新开放集合中的 v 。若使用重复堆项,应先跳过过期记录;开放集合耗尽则目标不可达。
令 h ∗ ( v ) = δ ( v , t ) 。本页的可采纳启发满足 0 ≤ h ( v ) ≤ h ∗ ( v ) 且 h ( t ) = 0 ;一致性进一步要求每条边满足
h ( u ) ≤ w ( u , v ) + h ( v ) . 一致性等价于约化边权 w ′ ( u , v ) = w ( u , v ) + h ( v ) − h ( u ) ≥ 0 。对从 s 出发的候选路径,约化成本为 g ( v ) + h ( v ) − h ( s ) ,与 f ( v ) 只差同一常数。因此可应用 Dijkstra 的结算证明:顶点首次有效弹出时其 g 已最优,此后可以永久关闭。在邻接表、带句柄二叉堆,以及常数成本的权重运算与启发求值下,确定性最坏时间为 O ( ( n + m ) log ( n + 1 ) ) ,其中 n = | V | , m = | E | 。
只有可采纳性而没有一致性时,严格改进一个已关闭顶点还必须重新开放它,使更好的代价能继续传播。目标作为最小 f 被弹出仍可安全终止:若另有更便宜的最优路,沿该路总有一个尚待展开、已经获得正确前缀代价的开放顶点,其 f 不超过该路总成本,与目标的最小键矛盾。这一版本可能反复展开同一个顶点,成本须计入所有重复松弛;一般不能沿用一致情形的一次展开界,甚至存在指数次重复展开的图族。
直觉
Dijkstra 理路 Dijkstra 算法 Dijkstra's algorithm 在非负边权图中逐次确定最短距离的单源最短路算法。 只按已经付出的 g 扩张,A* 再加入不高估的剩余成本下界。f 是任何经当前候选到达目标的乐观总价;若某条路线连乐观估计都更贵,就可暂缓展开。h = 0 时所有额外信息消失,在相同目标与停止约定下,算法正好退化为 Dijkstra。
启发函数的价值来自可证明的方向性,而非“猜得大胆”。高估可能让真正最优路径被延后到错误终止之后;一致性则保证局部估计沿边相容,使关闭集合安全。
图片加载失败 A* 的启发式搜索前沿 图中只列出开放集合里的两个候选 n , x ,其他开放格省略。单位步长下,两点的 Manhattan 下界分别为五和七,已知前缀代价均为三,所以优先展开键为八的 n 。
例子与边界
四邻接方格中每步代价为 1 时,到目标的 Manhattan 距离是一致启发:移动一格最多让该距离下降一,故 h ( u ) ≤ 1 + h ( v ) 。无障碍时它等于真实剩余距离;有障碍时仍不高估绕行距离。多个候选的 f 可能相等,具体展开次序还取决于平局规则。
目标被某条边首次发现时不能立即停止,因为另一个尚在队列中的顶点可能给出更短路线。使用一致启发时,应等待目标成为最小 f 并被弹出。即使 h 恰为真实剩余距离,也可能展开多条最优路线上的候选。例如 s → a , a → t , s → b , b → t 四条边权均为一,精确启发使 a , b , t 的候选键都为二,某种平局规则会先展开 a , b 才取出 t ;找到一条最优路其实只需其中一个分支。求得精确启发本身通常还需要解决反向最短路。
重新开放有一个四点反例。取 s → a : 2 , s → b : 1 , b → a : 0.5 , a → t : 2 ,启发值为 h ( s ) = h ( a ) = h ( t ) = 0 , h ( b ) = 2.5 。这些值都可采纳,却在 b → a 上不一致。展开 s 后,算法先取 a ,产生目标代价四;随后取 b ,发现 g ( a ) = 1.5 。若永久关闭 a ,这个改进无法传给目标,最后错误返回四;重新开放 a 才得到最优代价 3.5 。
本页固定原边权非负的常用接口。更一般的图若另有势函数保证所有约化边权非负,也可用重赋权后的 Dijkstra 证明,但需重新核对启发、路径和负圈条件。
推论与应用
A* 用于地图、机器人规划、游戏寻路和状态空间搜索。在一致性及相应平局约定下,更紧的下界可缩小必须展开的区域;实际展开数仍受平局和重复状态处理影响,启发计算成本也可能上升。应比较“省下的展开”与“每次估计代价”。
A* 保证的是精确最短路,不是近似算法。Weighted A* 把启发乘权以换速度,会改变正确性保证,必须另行给出次优界,不能把它当作同一算法的小优化。
参考资料
Peter E. Hart, Nils J. Nilsson, and Bertram Raphael, “A Formal Basis for the Heuristic Determination of Minimum Cost Paths,” IEEE Transactions on Systems Science and Cybernetics 4(2), 1968, pp. 100–107.
Zhifu Zhang、Nathan R. Sturtevant、Robert Holte、Jonathan Schaeffer、Ariel Felner,A Search with Inconsistent Heuristics* ,IJCAI 2009,pp. 634–639,§2:重新开放与指数最坏图族;§3 另给受限权值下更细的界。
Stuart Russell and Peter Norvig, Artificial Intelligence: A Modern Approach , 4th ed., Pearson, 2021, Ch. 3.