7. 倍增、ST、RMQ的理解

参考视频:https://www.bilibili.com/video/BV1gq4y1C7Ls

倍增

任意整数均可被表示成若干个2的次幕项之和
例如整数5,其二进制表示为101,该二进制数从右向左第0、2位均为1,则5=22+20
整数26,其二进制表示为11010,该二进制数从右向左第1、3、4位均为1,则26=24+23+21
也就是说,2的次幕项可被拼成任一需要的值。

倍增,顾名思义就是成倍增加。若问题的状态空间特别大,则一步步递推的算法复杂度太高,可以通过倍增思想,只考察2的整数次幕位置,快速缩小求解范围,直到找到解。



用ST表法——求RMQ问题

0.首先要明白ST表是啥?

ST(Sparse Table,稀疏表)算法采用了倍增思想,在 O(nlogn)时间构造一个二维表之后,可以在0(1) 时间在线查询 [ l,r ] 区间的最值,有效解决在线RMQ(Range Minimum/Maximum Query,区间最值查询)问题。

如何实现呢?设F[i,j]表示 [i,i+2j-1] 区间的最值,区间长度为2j

在这里插入图片描述

0. ST表的递推公式

在这里插入图片描述



1.即初始化ST表

在这里插入图片描述



2. ST表的查询

若查询 [l,r] 区间的最值,则首先计算k值,和前面的计算方法相同,区间长度为 r-I+1,2k<r-l+1<2k+1,因此k=log2(r-I+1)。

若查询区间的长度大于或等于2k且小于2+1k+1,则根据倍增思想,可以将查询区间分为两个查询区间,取两个区间的最值即可。两个区间分别为从l向后的2k个数及从r向前的2k个数,这两个区间可能有重叠,但对求最值没有影响。
在这里插入图片描述


ST表的时间复杂度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你说的白是什么白_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值