Skip to content

模型Model

稀疏表

施工中 · 内容逐步修订

Sparse table

预计算长度为二次幂的静态区间答案,以 O(1) 或 O(log⁡n) 回答区间查询。

形式陈述 ​

给定长度 n≥1 的静态数组 a0,…,an−1 与半群运算 ∘,Sparse Table 预计算

st[k][i]=ai∘ai+1∘⋯∘ai+2k−1.

递推式为

st[k][i]=st[k−1][i]∘st[k−1][i+2k−1],

始终保持左块在前、右块在后,因此不要求交换律。若摘要占常数空间、合并为常数成本,预处理和空间均为 O(nlog⁡(n+1))。空数组没有非空区间查询,可直接保存空结构。

任意非空查询区间可按二进制拆成 O(log⁡(n+1)) 个互不重叠块,按原顺序组合,故一般结合运算的查询为 O(log⁡(n+1))。若运算进一步构成幂等半群,令 k=⌊log2⁡(r−l+1)⌋,则可用两个长度 2k 的重叠块:

ans(l,r)=st[k][l]∘st[k][r−2k+1].

把左块写成 U∘V、右块写成 V∘W,结合律与 V∘V=V 给出 U∘V∘W。若两块完全相同,直接使用 V∘V=V;某侧额外部分为空时省略它,并不要求半群有单位元。因此双块常数查询只需结合加幂等,交换律并非必需。长度的 ⌊log2⁡ℓ⌋ 可用额外 O(n) 时间和空间预先填表,查询时直接读取,无需把实数对数当作免费机器指令。

直觉

Sparse Table 为每个起点和二次幂尺度保存静态区间摘要。一般查询用二进制分解选取不重叠块;幂等运算允许故意让两个最大块重叠,因为重复的整个交叠摘要不会改变结果。

常见的 min、max、gcd 都是半格运算,所以教材常把常数查询描述为“半格情形”。半格是充分条件,却比算法真正需要的幂等半群更强。

稀疏表的重叠块查询

图左的数字表示下标范围;右图按零基闭区间 [1,6] 聚合数值,得到最小值 1。若按 RMQ 的位置接口查询半开区间 [1,7),下文的数对摘要会返回下标 5。

例子与边界

稀疏表把静态区间预计算为 2k 长度块,幂等运算可用两个重叠块常数回答;线段树把区间分成不重叠节点并支持更新。前者的常数查询依赖静态性和运算性质,不能靠重建少量表项获得同样的动态接口。

区间最小值查询中,

min(st[k][l],st[k][r−2k+1])

即使两个块重叠也不会重复计错。区间和不幂等,重叠部分会被加两次,只能使用不重叠分解、前缀和或其他结构。

非交换幂等半群同样可以使用双块公式,只要两块内部和最终合并都保持数组顺序。左零 band x∘y=x 是形式上的例子;实践中更常见的是交换操作。若实现把两块次序交换,非交换实例会立即暴露错误。

数组更新会使覆盖该位置的许多预计算块失效,Sparse Table 因而适合静态查询。所谓 “Disjoint Sparse Table” 采用另一种预处理,可对一般结合运算提供 O(1) 查询;它不是本页标准重叠结构的自动推论,应单独声明构造与空间。

推论与应用

RMQ要求返回最左最小值的下标。为实现这个接口,把第 i 个输入摘要取为 (A[i],i),合并使用字典序最小值:先比较数组键,键相等时选择较小下标。这个运算仍结合且幂等,查询后返回摘要的下标分量即可。RMQ 的零基半开区间 [l,r) 对应本页的闭区间 [l,r−1]。标准 Sparse Table 用 O(nlog⁡(n+1)) 预处理、空间换 O(1) 查询。线性空间常数时间 RMQ则通过 Cartesian tree、±1 结构和微块分类降低空间,不能与 Sparse Table 等同。

它与二进制倍增表都使用二次幂尺度,但并不调用祖先跳表;本页表项递推的正确性来自半群结合律,重叠查询的正确性来自幂等性。算法复杂度、代数契约与静态更新假设是三项独立条件,缺一项都不能从另外两项推出。

同样面对静态数组,莫队算法还要求查询全部已知,并能低成本增删窗口两端;它重排请求以复用完整频次状态,适合不同值数、同值位置对等不便用两个小摘要合并的统计。无需修改数组不代表满足幂等性,也不代表允许提前取得全部查询。

参考资料
  • 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.
关系图谱10 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系