1. 执行摘要:通俗解读 A* 算法
想象一下,你正身处一座迷宫般的巨大城市中,比如迷雾笼罩的伦敦,你的任务是从特拉法加广场(起点)前往大英博物馆(终点)。你手中有一张地图,但要在成千上万条街道中找到那条绝对最短、最省体力的路线,并非易事。
在 1968 年之前,计算机处理这类问题通常有两种'极端'的思维方式。
基于 1968 年 Hart 等人发表的 A* 算法论文进行深度解析。文章回顾了算法诞生的历史背景,包括斯坦福研究所 Shakey 机器人的需求以及当时搜索算法的局限性。详细阐述了 A* 的核心公式 f=g+h,对比了其与 Dijkstra 及贪婪搜索的区别。重点讲解了可采纳性(Admissibility)与一致性(Consistency)两个关键理论条件,解释了它们如何保证算法的最优性及工程实现的效率。最后总结了 A* 在现代游戏、机器人及 NLP 等领域的应用价值。
想象一下,你正身处一座迷宫般的巨大城市中,比如迷雾笼罩的伦敦,你的任务是从特拉法加广场(起点)前往大英博物馆(终点)。你手中有一张地图,但要在成千上万条街道中找到那条绝对最短、最省体力的路线,并非易事。
在 1968 年之前,计算机处理这类问题通常有两种'极端'的思维方式。
这种方法非常严谨:它从起点出发,把周围每一条路都走一遍,计算走到每个路口的确切距离,然后再向外扩展。它的优点是一定能找到最短路径;缺点是效率极低——它会毫无方向感地向四面八方探索。即便终点在北边,它也会把南边的路先探个究竟,因为它不仅想找到路,还想确信没有别的路更短。
这种方法完全相反:它只看终点在哪里,始终朝着'看起来更接近目标'的方向移动。优点是速度快;缺点是鲁莽——它可能把你带进死胡同,或者为了保持方向感而错过一条虽然稍微绕道但实际上更短的通途。你可能很快到终点,但未必是最短路线。
1968 年,斯坦福研究所(SRI)的三位科学家 Peter Hart、Nils Nilsson 和 Bertram Raphael 提出了 A*(A-Star)算法。它的核心秘密是给每一个路口(节点)打分,这个分数由两部分组成:
A* 使用评价函数:
$$ f = g + h $$
它既不像 Dijkstra 那样无视方向,也不像贪婪搜索那样无视历史代价,而是优先探索那个'过去代价不大且未来看起来有希望'的节点。论文之所以经典,是因为作者不仅提出了方法,还给出严格证明:
一句话:A* 把'直觉'变成数学上可讨论、可证明、可工程化的对象。
理解 A* 的诞生要回到 20 世纪 60 年代中期 AI 研究前沿。斯坦福研究所(SRI,现 SRI International)的 AI 中心进行了一项雄心勃勃的计划:制造一个能够感知环境、理解指令并自主行动的移动机器人——Shakey the Robot。
Shakey 的任务并不'抽象':它要在有墙、有桌椅、有箱子的办公环境中自主导航,例如'把 3 号房间的箱子推到 5 号房间'。这意味着它必须在现实世界中规划路线、避开障碍,并尽可能高效。
当时计算资源极其匮乏,算法效率至关重要:如果机器人每走一步都要停下来计算几分钟,它就不可能'行动'。
A* 诞生之前,路径规划存在明显二元对立:
作者观察到:Dijkstra 相当于按 $g(n)$ 排序,启发式搜索按 $h(n)$ 排序。关键洞见是:为什么不把两者统一到同一个评价函数中?
于是有了:
$$ f(n) = g(n) + h(n) $$
这在今天看似简单,但在当时是决定性的结构统一:它将'严谨的成本累计'与'对目标的方向感'在同一个标尺下比较。
论文首先建立严格框架,为后续证明'可采纳性(Admissibility)'与'最优性(Optimality)'奠定基础。
真实世界里,若我们知道:
$$ f(n)=g(n)+h(n) $$
搜索几乎不需要进行。但现实中 $h(n)$ 不可得,因此用估计:
$$ \hat{f}(n)=\hat{g}(n)+\hat{h}(n) $$
其中:
算法维护两个核心数据结构:
| 特性 | BFS | Dijkstra / UCS | 贪婪最佳优先(GBFS) | A* |
|---|---|---|---|---|
| 排序依据 | 深度/跳数 | $g(n)$ | $h(n)$ | $g(n)+h(n)$ |
| 完备性 | 是(有限分支/无环等条件) | 是 | 不一定 | 是(在可采纳等条件下) |
| 最优性 | 仅边权相等时 | 是 | 否 | 是(可采纳性保证) |
| 效率特征 | 低 | 中 | 高但不可靠 | 高且可靠(条件满足时) |
| 依赖信息 | 图结构 | 边权重 | 启发式 | 边权重 + 启发式 |
论文给出 A* 找到最优解的充分条件:对任意节点 $n$,启发式估计不高估真实剩余代价:
$$ \hat{h}(n)\le h(n),\quad \forall n $$
通俗解释:启发式必须'乐观'。它可以低估(让你以为前方可能有高速路),但不能高估(否则会把真正的最短路径提前判死刑)。
矛盾成立,因此假设不成立,A* 必然以最优解终止。
在保证'能找到最优解'之后,论文进一步讨论'效率'与实现复杂度。作者提出比可采纳性更强的条件:一致性(Consistency),现代文献也常称单调性(Monotonicity)。
若对任意后继关系 $m\to n$,满足:
$$ h(m,n) + \hat{h}(n) \ge \hat{h}(m) $$
其中 $h(m,n)$ 是边成本,那么启发式被称为一致。
直观含义:从 $m$ 直接'估计到目标'的代价,不应超过'先走到邻居 $n$,再从 $n$ 估计到目标'的代价之和。启发式不能出现'朝目标走一步,估计突然跳水式下降'的非理性波动。
一致性最重要的实际意义是:
1968 年论文是开创性的,但并非毫无瑕疵。1972 年作者发布更正短文,澄清了一个关键边界:可采纳性保证正确性,但不必然保证不需要 re-open。
若 $\hat{h}$ 可采纳但不一致,A* 可能先通过次优路径到达某节点并将其关闭,随后发现更短路径到达同一节点。此时:
现代教材往往直接强调'一致性启发式',正源于这一历史澄清。
A* 的哲学意义在于:它把'知识'变成了一项可以插入计算流程的量——$\hat{h}(n)$ 越接近 $h(n)$,搜索越窄、越快;当 $\hat{h}(n)=0$,算法退化为纯粹的'无知识搜索'。
这揭示了 AI 的一个朴素而深刻的事实:知识可以换算成计算效率。不是玄学,而是结构性收益。
1968 年这篇论文的价值,不在于'提出了一个算法',而在于它用极其简洁的结构统一了两种长期对立的方法:严谨的 $g$ 与导向性的 $h$,并把启发式搜索从'经验技巧'提升到'可证明的理论框架'。
A* 留给今天的启示可以用一句话收束:
真正强大的算法,不是更复杂,而是把直觉压缩成一个可以被证明的结构。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online