倍增

倍增
所谓倍增,就是把一个数据规模为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 @ 2022-07-27 21:42  神茗掉线中(冲AC)  阅读(85)  评论(0)    收藏  举报