25.5.22学习总结

ST表(Sparse Table,稀疏表)是一种用于高效解决静态区间最值查询(RMQ)问题的数据结构。其核心思想是通过预处理每个长度为2^j的区间的最值,使得查询时只需合并两个子区间的最值即可得到结果,从而实现O(1)的查询复杂度。

一、核心特性

  1. 预处理时间复杂度O(nlog⁡n)

  2. 查询时间复杂度O(1)

  3. 适用场景:静态数据(无修改操作)的区间最值查询。

  4. 支持操作:可重复贡献且可结合的运算(如最大值、最小值、最大公约数等)。

二、构建过程

  1. 初始化

    • 定义二维数组st,其中st[i][j]表示从位置i开始、长度为2j的区间的最值。

    • 初始时,st[i][0] = arr[i](即长度为1的区间的最值为元素本身)。

  2. 动态规划填充

    • 对于每个j(1≤j≤⌊log⁡2n⌋),遍历所有可能的起点i,满足i+2j−1<n

    • 状态转移方程:

      st[i][j]=op(st[i][j−1],st[i+2j−1][j−1])其中op为合并操作(如取最大值或最小值)。

三、查询过程

对于区间[L,R]的最值查询:

  1. 计算区间长度:len=R−L+1。

  2. 确定最大幂次:k=⌊log⁡2len⌋。

  3. 合并子区间结果

    result=op(st[L][k],st[R−2k+1][k])这两个子区间分别覆盖[L,L+2k−1]和[R−2k+1,R],确保完全覆盖原区间。

四、优缺点分析

  • 优点

    • 查询速度快(O(1))。

    • 适用于多次查询静态数据的场景。

  • 缺点

    • 不支持动态修改。

    • 仅适用于可重复贡献的操作。

 五、ST表与线段树的比较

1. 时间复杂度对比

操作

ST表

线段树

预处理

O(nlog⁡n)

O(n)

查询

O(1)

O(log⁡n)

更新

不支持

O(log⁡n)

  • ST表:查询极快(常数时间),但预处理稍慢,且不支持动态修改。

  • 线段树:查询和更新均为对数时间,支持动态数据。

2. 空间复杂度对比

数据结构

空间复杂度

ST表

O(nlog⁡n)

线段树

O(n)

  • ST表:需要二维数组存储预处理结果,空间消耗较大。

  • 线段树:通常用一维数组实现(类似堆),空间更优。

3. 功能对比

功能

ST表

线段树

静态区间最值(RMQ)

✔️

✔️

动态区间最值/和

✔️

区间更新

✔️

可扩展性

✔️

4. 适用场景

  • 选择ST表

    • 数据静态不变,且需要极快查询(如高频RMQ)。

    • 无需支持修改操作。

    • 例如:离线处理大量查询的RMQ问题。

  • 选择线段树

    • 数据动态变化,需要支持更新。

    • 查询类型复杂(如区间和、区间最值混合)。

    • 例如:实时更新的数据库区间统计。

六、例题


【模板】ST 表 && RMQ 问题https://www.luogu.com.cn/problem/P3865

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值