倍增

倍增
所谓倍增,就是把一个数据规模为n的问题分解成若干个2^ai的和,预处理数据范围内所有2^ai 的情况,再将这些规模为2^ai 的问题通过一定的方法合并,得出原问题的解。
分治是把整个问题分成几个互不重复的子问题,合并求解;倍增是找互为倍数关系的子问题之间的联系,再合并求解。
可以认为,倍增也体现了分治思想。
适用题型:问题规模大,且成倍数据规模的问题之间存在简单的递推关系,可以轻易地由小范围求出大范围。
 
RMQ问题
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j),返回数列A中下标在i,
j之间的最小/大值。
如何求最小/大值?
暴力扫描,单次查询的时间复杂度是O(n)。如果开一个二维数组ans[i][j]
预存答案,预处理时间复杂度是O(n2),单次查询是O(1)。
 
ST算法
ST算法(Sparse Table)是一种用于解决RMQ问题的离线算法,类似于线段树和树状数组,其功能特性差不多,当实现起来的话,显然是ST算法更为简便。
ST算法的时间复杂度:预处理是O(nlogn),查询是O(1)。
该算法是在倍增的思想基础上实现的。
应用:无修改时求区间最小/大值,特别是需要优化常数,或者询问次数大于序列长度的时候。
posted @   神茗掉线中(冲AC)  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示