“实际微块数是 $$ N=\left\lceil\frac mb\right\rceil. $$ 宏数组 $M[j]$ 保存第 $j$ 块的最左最小位置,并按 $(D[M[j]],M[j])$…”
形式陈述
给定长度
递推式为
始终保持左块在前、右块在后,因此不要求交换律。若摘要占常数空间、合并为常数成本,预处理和空间均为
任意非空查询区间可按二进制拆成
把左块写成
直觉
Sparse Table 为每个起点和二次幂尺度保存静态区间摘要。一般查询用二进制分解选取不重叠块;幂等运算允许故意让两个最大块重叠,因为重复的整个交叠摘要不会改变结果。
常见的 min、max、gcd 都是半格运算,所以教材常把常数查询描述为“半格情形”。半格是充分条件,却比算法真正需要的幂等半群更强。
图左的数字表示下标范围;右图按零基闭区间
例子与边界
稀疏表把静态区间预计算为
区间最小值查询中,
即使两个块重叠也不会重复计错。区间和不幂等,重叠部分会被加两次,只能使用不重叠分解、前缀和或其他结构。
非交换幂等半群同样可以使用双块公式,只要两块内部和最终合并都保持数组顺序。左零 band
数组更新会使覆盖该位置的许多预计算块失效,Sparse Table 因而适合静态查询。所谓 “Disjoint Sparse Table” 采用另一种预处理,可对一般结合运算提供
推论与应用
RMQ要求返回最左最小值的下标。为实现这个接口,把第
它与二进制倍增表都使用二次幂尺度,但并不调用祖先跳表;本页表项递推的正确性来自半群结合律,重叠查询的正确性来自幂等性。算法复杂度、代数契约与静态更新假设是三项独立条件,缺一项都不能从另外两项推出。
同样面对静态数组,莫队算法还要求查询全部已知,并能低成本增删窗口两端;它重排请求以复用完整频次状态,适合不同值数、同值位置对等不便用两个小摘要合并的统计。无需修改数组不代表满足幂等性,也不代表允许提前取得全部查询。
参考资料
- Johannes Fischer and Volker Heun, “Space-Efficient Preprocessing Schemes for Range Minimum Queries on Static Arrays,” SIAM Journal on Computing 40(2), 2011.
- Michael A. Bender and Martín Farach-Colton, “The LCA Problem Revisited,” LATIN 2000.
- OI-Wiki contributors, “Sparse Table,” 2026.