“树上的最近公共祖先是倍增的招牌应用:先把两点提到同一深度,再自高位起同步大跳,直到双方父亲重合。若接口只问第 $k$ 级祖先,Level Ancestor 问题还能在静态树上追求线性空间与常…”
接口与参数约定 ​
根的深度固定为
等价的第
树的唯一根路径保证答案存在且唯一。若
Binary Lifting 基线 ​
二进制倍增保存
预处理与空间为
线性空间常数查询的结构图像 ​
静态树可用 longest-path/ladder decomposition 把节点划进若干从祖先到后代的 ladder,并把每条 ladder 向上复制至多自身长度。所有原 ladder 总长为
查询先令
配合常数时间最高置位/微表,Bender–Farach-Colton 型方案可在 Word-RAM 上取得
结论针对静态根树,且常数查询依赖
可追踪真例 ​
设根路径为
第 ancestor(y,3) 与
与 LCA、动态树的区分 ​
最近公共祖先输入两个节点并寻找最深公共祖先;Level Ancestor 输入一个节点和一个深度。LCA 算法可以调用祖先跳跃作为子程序,Level Ancestor 也能帮助对齐深度,但两个问题的接口和最优预处理并不相同。
若树发生 link、cut 或换根,深度和 ladder 可能整体改变,静态线性预处理立即失效。动态版本应进入动态森林问题并分别报告更新、查询及换根成本,不能沿用本页
简洁树表示还可用平衡括号与 rank/select 支持祖先导航;其重点是 bit 空间,而非把指针树的
参考资料
- Michael A. Bender and Martín Farach-Colton, “The Level Ancestor Problem Simplified,” Theoretical Computer Science 321(1), 2004.
- Omer Berkman and Uzi Vishkin, “Finding Level-Ancestors in Trees,” Journal of Computer and System Sciences 48(2), 1994.
- Paul F. Dietz, “Finding Level-Ancestors in Dynamic Trees,” WADS, 1991, for the dynamic contrast.