形式陈述
设 为有限集,。二进制倍增预计算 在函数复合公理库函数复合Function composition · Composition of maps按先 f 后 g 的次序把映射串联为 g∘f。意义下的各个 次幂:
即 ,每一层由上一层与自身复合而得。要计算 ,把步数 写成二进制展开 ,则
依次沿各跳表前进即可;诸幂都是同一个 的迭代,彼此可交换,应用次序无关。设 、支持的最大步数为 ,预处理时间与空间为 ,单次查询 。最常见的实例是有根树公理库有根树与祖先关系Rooted tree · Ancestor relation · Parent and depth in a tree在树中选定根后,由唯一根路径定义父子、祖先、深度与子树。上的父亲函数 (根的父亲约定为根本身或哨兵),此时 就是 的第 级祖先。
直觉
这与快速幂是同一个思想:任何步数都是若干个二的幂之和,只要预先备好“跳 步”的答案,走 步就化为至多 次大跳。倍增表本身按动态规划公理库动态规划Dynamic programming在有限或良基的状态依赖上复用已计算结果的算法设计范式。方式填充——跳 步等于先跳 步、再从落点跳 步,恰好复用已算好的半程答案。支撑这一切的代数事实只有一条:函数复合满足结合律,因此“先分块预算、再拼接”与一步步走结果相同。与朴素逐步模拟相比是 对 的差距,代价是对数因子的额外内存与一次静态预处理。
幂次跳表与二进制分解
例子与边界
取一条父指针链 (箭头指向父亲,根 指向自身),查询结点 的第 级祖先:,依次查表 、、,三次查表替代十三步逐级上爬。倍增表还可与“可结合的路径摘要”并行维护:令 为从 向上 步路径上的最小值(或和、最大值),其合并规则与 完全同构——这要求摘要运算构成幺半群公理库幺半群Monoid具有双侧单位元的半群。,若结合律缺失,拼接便无意义。
边界情形:倍增表是静态快照,若 会被修改(换父、改权),相关表项整列失效,只能重建或改用支持动态操作的树结构;空间 在 很大时不可忽视,而“第 级祖先”这类特定问题另有更省空间的线性预处理算法,倍增胜在简单与通用。另一常用技巧是在表上自高位向低位“贪心下探”:例如寻找最深的、满足某谓词的祖先时,逐位尝试大跳、越界或谓词破坏则放弃该位——这要求谓词沿祖先链单调,否则逐位判定不再正确。
推论与应用
树上的最近公共祖先公理库最近公共祖先Lowest common ancestor · LCA有根树中同时为两个顶点祖先且深度最大的唯一顶点及其查询问题。是倍增的招牌应用:先把两点提到同一深度,再自高位起同步大跳,直到双方父亲重合。若接口只问第 级祖先,Level Ancestor 问题公理库Level Ancestor 问题Level ancestor problem · LA query · 层祖先问题在静态根树中按目标深度或向上步数返回唯一祖先,并比较倍增的对数查询与线性空间常数查询方案。还能在静态树上追求线性空间与常数查询;若目标是 LCA,RMQ–LCA 等价公理库RMQ 与 LCA 的等价归约RMQ-LCA equivalence · RMQ to LCA reduction用 Euler 深度序列与 Cartesian tree 建立静态 RMQ 和 LCA 的双向线性归约。给出另一条线性预处理路线。倍增的 预处理与 查询是静态 RAM 下的最坏界,胜在构造直接,而非所有树查询上的最终界。
稀疏表公理库稀疏表Sparse table预计算长度为二次幂的静态区间答案,以 $O(1)$ 或 $O(\log n)$ 回答区间查询。把同一“按二的幂分块”思想用于静态区间查询,数与矩阵的快速幂是它在乘法结构上的化身。并行环境中的指针跳跃与链表排名公理库指针跳跃与链表排名pointer jumping · pointer doubling · list ranking同步倍增后继指针并累加跨越距离,在对数轮内求链表节点到表尾的排名。也反复把后继距离加倍,但评价指标变成总工作与并行深度。函数图上的第 个后继、树上路径摘要仍属于顺序查表版本;共享“doubling”图像不表示这些成本模型相同。
参考资料
- OI-Wiki contributors, OI-Wiki (2026), binary lifting.
- cp-algorithms contributors, Algorithms for Competitive Programming (2026), binary lifting.
- Michael A. Bender and Martín Farach-Colton, “The LCA Problem Revisited,” LATIN 2000, LNCS 1776, 2000.