“把LCA 归约到RMQ时,对根树做完整树上 Euler 序:进入或返回一个顶点都记录该顶点与深度,得到顶点序列 $E$ 和深度数组 $D$,相邻深度恰差 $\pm1$。令 first$(v)…”
形式陈述 ​
设
由于根
“最近”指相对根的深度最大,不是图距离最小、编号接近或平面几何位置接近。根属于问题实例的一部分;换根可能改变答案。
静态 LCA 问题给定一棵固定有根树,预处理后回答多次
直觉
从
定义本身只需要祖先偏序。二进制倍增、Euler Tour、RMQ 微块和 Tarjan 离线算法是不同实现,不应塞进 LCA 的定义。先固定问题对象,再比较预处理时间、查询时间、空间和在线性,才能避免把一种实现误当成概念本身。
例子与边界
若根为
若
常见接口允许
LCA 依赖根。对路径
动态链接或切断树边会使父亲、深度与祖先关系整体变化,静态预处理表可能失效。所谓“换根查询”也应区分:是永久改变根,还是用固定预处理回答假想根下的 LCA。
推论与应用
有根树与祖先关系提供定义和唯一性。LCA 可用于树上距离:
它还支撑路径聚合、虚树、层级权限、系统发育树和树上差分。
常用实现包括:
- 二进制倍增:通常
预处理、 查询; - Euler Tour 加RMQ:把首次出现区间中的最小深度位置还原为 LCA;
- 常数时间 RMQ:可把静态查询降到
,同时保持线性级预处理与空间; - 离线并查集方法:适合查询全部预先给出的场景。
RMQ–LCA 等价说明两类静态查询可在线性规模下互相归约。这里的 equivalent_to 指问题级互归约与渐近数据结构能力,不表示一棵树和一个数组是同一种数学对象。
参考资料
- Dov Harel and Robert E. Tarjan, “Fast Algorithms for Finding Nearest Common Ancestors,” SIAM Journal on Computing 13(2), 1984.
- Michael A. Bender and Martín Farach-Colton, “The LCA Problem Revisited,” LATIN 2000, LNCS 1776, 2000.
- Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Chapter 20.