倍增
倍增
●所谓倍增,就是把一个数据规模为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)。
●该算法是在倍增的思想基础上实现的。
●应用:无修改时求区间最小/大值,特别是需要优化常数,或者询问次数大于序列长度的时候。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】