“Dijkstra 解决最短路问题,正确性来自贪心定型论证。图表示与优先队列实现共同决定复杂度;二叉堆只是偏重简单最坏界的一种选择。Johnson 算法先用势函数把负边重赋为非负,再逐源调用…”
形式陈述 ​
输入是非负边权图、起点
排序的优先队列。初始化
令
一致性使沿任意路径的
直觉 ​
Dijkstra只按已经付出的
启发函数的价值来自可证明的方向性,而非“猜得大胆”。高估可能让真正最优路径被延后到错误终止之后;一致性则保证局部估计沿边相容,使关闭集合安全。
例子与边界 ​
四邻接方格中每步代价为
目标被某条边首次发现时不能立即停止,因为另一个尚在队列中的顶点可能给出更短路线。使用一致启发时,应等待目标成为最小
可采纳不自动蕴含一致。树搜索没有重复状态时可采纳性足以支持标准最优性论证;图搜索若永久关闭节点而不 reopen,则不一致启发可能让后来更小的
推论与应用 ​
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.
- Stuart Russell and Peter Norvig, Artificial Intelligence: A Modern Approach, 4th ed., Pearson, 2021, Ch. 3.