【算法学习笔记】Sparse Table


1. RMQ问题

RMQ(Range Minimum/Maximum Query) 区间最小/大值问题。给定一个 n n n 个元素的数组 A 1 , A 2 , A 3 , … , A n A_1, A_2, A_3, \dots, A_n A1,A2,A3,,An ,设计一个数据结构,支持区间查询操作 QueryMin(L,R) :计算 min ⁡ { A L , A L + 1 , … , A R } \min \{A_L, A_{L+1}, \dots, A_R\} min{ AL,AL+1,,AR} ,也可以支持 QueryMax(L,R) (注意:这里的区间都是离散意义下的,只包含整数)。

如果每次用循环计算显然不够快, m m m 次的查询需要 O ( m n ) O(mn) O(mn) 的时间复杂度。而前缀和的思想也不能提升效率,因为这不是一个可加性信息。怎么办呢?


2. Sparse-Table

实践中最常用的是 TarjanSparse-Table 算法,或者说ST表(稀疏表),一种简单的数据结构,主要用于处理RMQ问题。它使用倍增的思想,可以 O ( n log ⁡ n ) O(n\log n) O(nlogn) 预处理, O ( 1 ) O(1) O(1) 查询,而且常数很小。最重要的是,这个算法非常还写,不易写错

ST表使用一个二维数组 dp[][] ,对于范围内的所有 dp[a][b] ,先进行预处理,计算并存储 min ⁡ i ∈ [ a ,   a + 2 b ) ( A i ) \min\limits_{i\in[a,\ a+2^b)}(A_i) i[a, a+2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memcpy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值