“把LCA 归约到RMQ时,对根树做完整树上 Euler 序:进入或返回一个顶点都记录该顶点与深度,得到顶点序列 $E$ 和深度数组 $D$,相邻深度恰差 $\pm1$。令 $first(v)…”
形式陈述
设
由于根
“最近”指相对根的深度最大,不是图距离最小、编号接近或平面几何位置接近。根属于问题实例的一部分;换根可能改变答案。
静态 LCA 问题给定一棵固定有根树,预处理后回答多次
直觉
从
定义本身只需要祖先偏序。二进制倍增、Euler Tour、RMQ 微块和 Tarjan 离线算法是不同实现,不应塞进 LCA 的定义。先固定问题对象,再比较预处理时间、查询时间、空间和在线性,才能避免把一种实现误当成概念本身。
例子与边界
若根为
若
常见接口允许
LCA 依赖根。对路径
动态链接或切断树边会使父亲、深度与祖先关系整体变化,静态预处理表可能失效。所谓“换根查询”也应区分:是永久改变根,还是用固定预处理回答假想根下的 LCA。
推论与应用
有根树与祖先关系提供定义和唯一性。LCA 可用于树上距离:
它还支撑路径聚合、虚树、层级权限、系统发育树和树上差分。
对一次只含
在FRT随机树嵌入的标签差边权约定下,叶标零、父子边长为(Γ父−Γ子)/2;两条到LCA的路径分别望远镜求和,叶距离恰为LCA标签Γ。查询仍在一棵固定树上进行,随机性属于建树阶段;每点对期望伸长的证明不能由一次LCA查询替代。
常用实现包括:
- 二进制倍增:通常
预处理、 查询; - Euler Tour 加RMQ:把首次出现区间中的最小深度位置还原为 LCA;
- 常数时间 RMQ:可把静态查询降到
,同时保持线性级预处理与空间; - 离线并查集方法:适合查询全部预先给出的场景。
RMQ–LCA 等价说明两类静态查询可在线性规模下互相归约。这种等价针对静态查询问题的线性规模互归约,并保留相应的渐近预处理与查询能力;树与数组各自保留原有的数据表示。
参考资料
- 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.