当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/206792.html

相关文章:

  • window 显示驱动开发-指定 GDI 硬件加速渲染操作
  • Python-标准库
  • 浅谈测试驱动开发TDD
  • 微服务架构的演变过程
  • 关于大语言模型的问答?
  • spring boot启动报错:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)
  • 咬合配准算法文献推荐
  • 电子电路:为什么会产生电流超前或者滞后于电压的情况?
  • CUDA 加速的稀疏矩阵计算库cuSPARSE
  • 数据库blog5_数据库软件架构介绍(以Mysql为例)
  • P22:LSTM-火灾温度预测
  • Python实现矩阵转置:原理与实践
  • 《JVM G1 源码分析和调优》笔记
  • Linux 玩转nfs
  • 【TTS回顾】CosyVoice 深度解析:基于LLM的TTS模型
  • C语言if-else分支结构中的类似短路现象
  • C++:关联式容器map容器,multimap容器
  • 系统与账户安全
  • 3 tomcat原理
  • 【RAG】ragflow源码亮点:文档embedding向量化加权融合
  • MapReduce-Top N程序编写与运行
  • 自学嵌入式 day22 -数据结构 栈 队列
  • LeetCode 404.左叶子之和的迭代求解:栈结构与父节点定位的深度解析
  • 【Python中的Socket套接字详解】网络通信的核心基石
  • X链如何实现免开发落地页与精准归因?
  • Spring AI之Advisors (增强器)
  • 文本分类模型常规用法
  • 【KWDB 2025 创作者计划】_从部署开始了解KWDB
  • OpenCV计算机视觉实战(7)——色彩空间详解
  • 新型压缩编码算法基础近日确定!