【RMQ算法】
来源:互联网 发布:免费网站源码 编辑:程序博客网 时间:2024/06/16 10:57
RMQ算法
一、概述
RMQ算法是一种快速的从一段区间中查找最值的算法。每次查询时间可以为O(1)(主要时间在预处理上为O(n*log(n)))。
二、实现
在RMQ算法中我们用一个数组f[i][j]来表示区间[i,i+2^j-1]的最值。这个区间长度为2^j。可以通过递推关系得到 ( f[i][j]=max/min(f[i][j-1],f[i+2^(j-1)][j-1] (对应的区间分别为[i ,i+2^(j-1)-1] 和[2^(j-1) ,2^(j-1)+2^(j-1)-1]刚好为f[i][j].然后就是查询过程对于区间[x,y],要找到一个k使得2^(k+1)>=(y-x+1)&&2^(k)<(y-x+1). k=log2(y-x+1);
然后区间[x,y]最值即为max/min(f[x][k],f[y-2^k+1][k] ).
代码:
void rmq_init(){ for(int i=1;i<=n;i++) f[i][0]=val[i]; m=0; while(n>(1<<m))m++; for(int j=1;j<=20;j++) { for(int i=1;i+(1<<j)-1<=n;i++) { f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } }}int rmq(int x,int y){ int k=(int)log(y-x+1)/log(2); return max(f[x][k],f[y-(1<<k)+1][k]);}
阅读全文
0 0
- 【RMQ】RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- rmq算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- RMQ算法
- Android 融云SDK-即时通讯IM(附源码)
- 【python PDF合并】python 合并同一个文件夹下所有PDF文件
- DES加密与解密(c语言版)
- Android自定义View系列(二)——打造一个仿2K游戏摇杆
- iOS开发 PHAsset获取照片名称
- 【RMQ算法】
- LeetCode题解(Golang实现)--Longest Substring Without Repeating Characters
- 在CentOS下搭建自己的Git服务器
- Java基础学习总结(四)—— 关键字介绍
- 第一篇:JAVA获得设备信息
- BigDecimal 加,减,乘,除 详解
- camera2 opengl实现滤镜效果录制视频 三 录音
- vue中使用百度地图
- codeforces #430 (div2)