打开手机,输入目的地,几乎在你松开手指的瞬间,谷歌地图就甩出一条路线——还要顺带算出预计到达时间、避开拥堵、在三条高速之间替你权衡。全球每天有上亿次这样的请求,而每一次的应答时间通常只有几十毫秒。
这件事"快得离谱"。如果你把整张路网看成一个图(graph),全北美就有几千万个路口(节点)和上亿条道路(边)。在最朴素的算法下,给一对起终点找最短路径,意味着要把海量的节点逐一比较——单次查询都要跑上几秒甚至几十秒,更别说撑住全球的高并发。Veritasium 这支 29 分钟的视频《Google Maps is unreasonably fast. Let me explain》(谷歌地图为何快得不合理),正是要回答一个被我们当成理所当然的问题:这一切到底是怎么做到的?
视频用清晰的叙事把答案串成了一条六十年的技术进化线——从 1959 年 Dijkstra 在咖啡馆里 20 分钟写下的算法,到 1968 年带"直觉"的 A*,再到 2008 年让查询骤然提速的"路网分层压缩",以及把整片北美路网像切蛋糕一样剖开的"嵌套剖分"。本文不仅拆解视频的核心论点,还会补充视频之外的算法细节与工程权衡,让你不仅"知道地图很快",更"看懂它凭什么这么快"。
| 项目 | 内容 |
|---|---|
| 视频标题 | Google Maps is unreasonably fast. Let me explain |
| 频道 | Veritasium(@veritasium,认证频道,订阅超 1600 万) |
| 时长 | 29 分钟 |
| 播放量 | 约 570 万(截至 2026 年 6 月中旬,发布约两周) |
| 核心主题 | 大规模真实路网上"毫秒级最短路径"背后的算法演进 |
视频从一个朴素的事实切入(第 1 章"What is a 'shortest path algorithm'?"):所有地图导航,本质上都是在一张巨大的"图"上求最短路径。每个路口是节点,每段路是带"权重"的边。所谓导航,就是在这张几千万节点的图里,找出从 A 到 B 权重之和最小的那条路径。
【延伸分析】这张"图"的规模才是真正的敌人。北美路网约 数千万节点、上亿条边;如果用最直白的算法,每次查询都要扫过相当一部分网络。视频反复埋下的伏笔正是:朴素算法在"全球规模"面前会瞬间崩溃。理解了这一点,后面所有的优化才有意义。
第 2 章"Dijkstra's 20 Minute Algorithm"讲的是计算机科学史上的名场面:荷兰计算机科学家 Edsger W. Dijkstra 在 1959 年发表的论文《A Note on Two Problems in Connexion with Graphs》(发表于 Numerische Mathematik)中给出了最短路径算法。坊间流传,他是在阿姆斯特丹一家咖啡馆里,大约 20 分钟就在脑子里想出了它。
算法的思想优雅得惊人:从起点出发,像水波纹一样向外扩散,每一步都挑出"当前离起点最近、且还没确定"的节点,用一个小顶堆(优先队列)维护候选。它正确、简洁,是整个领域的奠基。
【延伸分析】Dijkstra 的复杂度约为 O((V+E) log V)。听起来不糟,但 V 是"全图节点数"——在你只想知道北京到上海怎么走时,它也会兢兢业业地把整个亚洲的路网都扩散一遍。视频在这里点出了第一个矛盾:正确≠实用。
第 3 章"The First Route Planner"把镜头拉向历史,讲路径规划第一次走进现实设备的过程。【延伸分析】早在 Dijkstra 的纯理论之外,工程界从 1970 年代的实验性路线导引系统(如通用汽车的 ERGS)、到 1980 年代本田 Electro Gyro-Cator(用惯导而非算法)、再到 1990 年代真正装载道路数据并做实时计算的车载导航,逐步把"最短路径"从论文搬到了方向盘旁边。视频借此强调:算法要落地,靠的不是更聪明地搜,而是更聪明地"预处理"路网——这为后面的高潮埋下伏笔。
第 4 章"A* Search Algorithm"是算法界的明星。1968 年,Peter Hart、Nils Nilsson 与 Bertram Raphael 在论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中提出 A*。它的关键创新是启发函数 h(n):在 Dijkstra"已走代价 g(n)"之外,再加一项对"到终点还剩多远"的估计 h(n),按 f(n)=g(n)+h(n) 来排优先级。
只要 h(n) 是可采纳的(admissible)——即永远不高估真实剩余代价——A* 既能保证找到最优解,又能像被磁铁吸住一样,朝着终点方向"直奔"过去,从而大幅减少无谓的扩散。导航里常用的 h,就是两点间的直线/大圆距离(因为两点间直线最短,绝不会高估实际路程)。
【延伸分析】A* 把"无方向地波纹扩散"变成了"有方向地瞄准"。可惜它仍然在最坏情况下要碰触大半个图,单靠它仍扛不住整个北美的实时高并发。
第 5 章"Shortest Doesn't Mean Fastest"是整支视频最容易被忽视、却最贴近生活的一章。我们嘴上说"最短路径",心里想的其实是最快路径。把边的权重从"距离"换成"通行时间",结果可能截然不同——绕远一点的高速,往往比笔直但红绿灯密布的城区小路更快。
更难的是,通行时间是动态的:早高峰、施工、事故都会让它分秒变化。这意味着地图不仅要在静态权重上算得快,还要能在路况每几分钟刷新一次时迅速重算。这个"动态权重"的需求,直接催生了视频后半段那套堪称艺术品的数据结构。
来到全片的高潮——第 6 章"Road Network Hierarchy"。这一章揭示谷歌地图快的真正秘密:不要在原始图上算,而是预先把图"压缩"成一个多层结构。
核心思想是 Contraction Hierarchies(CH,收缩层级),由 Robert Geisberger、Peter Sanders、Dominik Schultes 与 Daniel Delling 在 2008 年的论文中提出(其前身是 Sanders 与 Schultes 的 Highway Hierarchies)。做法是:把"重要性低"的节点逐个"收缩"掉——每删一个节点,就为它的邻居补上一条"捷径(shortcut)"代表经由它的最短路径。反复收缩后,图被组织成一个"从底到顶越来越稀疏、越来越像高速干道"的层级结构。
查询时采用双向向上搜索:从起点和终点各自"往上"爬到更高层级,最终在顶端汇合。因为高层极其稀疏,实际碰到的节点数从"几千万"骤降到"几千甚至几百"——毫秒级查询就此成为现实。
【延伸分析】这里的精髓是"用空间换时间、用预处理换实时":离线花几分钟到几十分钟做一次收缩建索引,换来在线每次查询快上成千上万倍。这与"魔方求解器用搜索硬解状态空间"是两条完全不同的路线——后者靠搜索剪枝,地图靠结构性压缩。
第 7 章"Mapping North America - Nested Dissection"把工程推向极致。它讲的是如何把整片北美大陆的路网切成一块一块,再用一层"叠加网络(overlay)"把它们缝起来。这种技术叫嵌套剖分(Nested Dissection):源自 1973 年 Alan George 为稀疏矩阵排序提出的方法,后来被路网路由领域(尤其是微软研究院 Delling、Goldberg、Werneck 等人的工作)借用来做图分割。
由此诞生了 Customizable Route Planning(CRP,可定制路由):先用嵌套剖分建一个与"度量(metric)"无关的骨架——也就是切分方式只取决于路网拓扑,不依赖具体通行时间;真正的通行时间只存在那层薄薄的 overlay 上。当路况变化时,只需重算 overlay 那一小部分弧,几秒内就能让整片大陆的导航全部跟上最新拥堵。这正是地图能"避开拥堵"还能"毫秒响应"的底层支撑。
【延伸分析】把"拓扑结构"和"动态度量"解耦,是工程上的神来之笔:路网的物理拓扑几个月才变一次,而通行时间几分钟一变。让两者分开更新,等于把"慢变"和"快变"分别用最合适的策略处理——这是大规模系统设计的通用智慧。
第 8、9 章把镜头从工程拉回哲学。视频收尾引用了 Dijkstra 的名言——"Simplicity is prerequisite for reliability"(简单是可靠的先决条件)。【延伸分析】这句话恰好回扣全片:Dijkstra 算法之所以六十年不倒,正因为它足够简单;而所有花哨的加速(A*、CH、CRP)都建立在"保持模型简单、只引入必要的结构"之上。谷歌地图的"快",不是靠一个炫技的奇技淫巧,而是靠几十年间、一代代研究者把'简单'贯彻到极致的累积。
flowchart TD
A[真实路网: 几千万节点/上亿边] --> B[朴素 Dijkstra 1959<br/>正确但 O V+E log V 全图扩散]
B --> C{慢在哪里?}
C -->|无方向扩散| D[A* 1968<br/>加启发函数 h 望向终点<br/>仍可能碰半个图]
C -->|全图规模太大| E[现实需求:<br/>最短≠最快 + 实时路况]
D --> E
E --> F[核心思路: 用预处理换实时<br/>预先把图结构化压缩]
F --> G[Contraction Hierarchies 2008<br/>收缩低重要节点+补捷径<br/>双向向上搜索→碰几千节点]
F --> H[Nested Dissection 嵌套剖分<br/>把整片大陆路网切片+overlay]
H --> I[Customizable Route Planning CRP<br/>拓扑与度量解耦<br/>路况变化只重算 overlay]
G --> J[结果: 大陆级路网 毫秒级查询<br/>支撑上亿次/天 请求]
I --> J
J --> K[Dijkstra 哲学:<br/>Simplicity = Reliability]
第一,"问题规模"本身就是一种算法选择信号。 视频反复示范:当输入从"几百节点"涨到"几千万节点",最优解往往不是更聪明的搜索,而是改变数据组织方式。这对你写任何后端都成立——查询慢到一定程度,去优化 SQL 不如去重塑存储结构(空间换时间、预聚合、分层索引)。谷歌地图的本质,就是把"最短路径问题"从"在线算法问题"重新定义成了"离线预处理 + 在线查询"的工程问题。
第二,把"慢变"与"快变"解耦,是大规模系统的通用范式。 CRP 把路网拓扑(慢变)和通行时间(快变)分开存放与更新,这与你做缓存分层、配置中心、特性开关、A/B 实验的灰度数据是同一个道理:按变化频率分层,让每一层用最经济的更新策略。下次你为"热数据/冷数据"如何拆分发愁时,想想 overlay 那一层。
第三,启发式要"可采纳",工程优化要"可验证"。 A* 的 h(n) 必须不高估才能保证最优;这意味着任何你引入的"捷径/近似",都要清楚地知道它牺牲了什么、保留了什么。同理,CH 和 CRP 都保留了最优解保证——它们不是在"猜",而是在"用更少的计算得到同样正确的答案"。这种"加速但不牺牲正确性"的工程美学,值得每一个追求性能的人借鉴。
对普通读者:下次地图瞬间给你路线时,你会知道那不是"魔法",而是 Dijkstra、Hart、Sanders、Goldberg 们六十年接力把"简单"打磨到极致的结果。对算法学习者:Dijkstra 与 A* 是图论的必修地基,而 Contraction Hierarchies 与 CRP 则是把理论变成十亿级产品的"最后一公里",强烈建议结合论文精读。
谷歌地图的"毫秒级"不是某一个天才算法的胜利,而是一代代研究者把"简单"贯彻到极致、用预处理把在线难题改写成离线工程题的六十年接力——简单,才是可靠的先决条件。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
