【转】RMQ-ST算法详解
地址:http://blog.csdn.net/z287438743z/article/details/8132806
RMQ(Range Minimum/Maximum Query)问题就是求区间最值问题。这里要仔细分析的是ST算法,它可以做到O(nlogn)的预处理,O(1)回答每个询问。
网上看了好多关于ST算法的文章,还算是有点理解了。
st算法,本质就是一个DP。
有一个数字序列记为L,比如这里给了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
35 13 65 99 88 75 64 51 42 55 66 83 12 44 65 12
f[i,j]表示的是从i开始的2^j个数里面的最值。以最大值来举例说明。
f[1,0]就是从第一个开始的1个里最大值,那么就是第一个自己本身,f[1,0]=35;
f[2,2]就是从第二个开始的4个里最大值,那么是13,65,99,88里面的最大值,明显是f[2,2]=99;
以此类推。
先前说了,是DP。状态转移方程就是。
f[i,j]=max(f[i,j-1],f[i+2^(j-1),j-1]);
比如f[5,3],包含的值有88 75 64 51 42 55 66 83。
求它的最大值,用二分的思想,就是[88 75 64 51],[42 55 66 83]的最大值中较大的。
即f[5,2] 和 f[9,2]。
以此类推,求i至其后2^j个数的最大值,即把2^j 分成前后两个2^(j-1),分别取其最大值,再通过比较获得此状态最大值。
以上是f数组的构造。
以下才回归到RMQ问题。
貌似,对于任意的i至j之间的最值,和之前构造的f数组有什么关系呢?
我们可以知道,任意的i至j之间的j-i+1个连续的值,一定可以分成两个2^n个数的两个区域(可以重合)。
比如说要求3到11之间的最值。
那么可以通过3到10之间的最值和4到11之间的最值求得3到11之间的最值,那么就可以和之前的f数组联系在一起了。
有j-i+1是个数,p=2^( (int) (log(2,j-i+1)) )就是可以连续分的最大2^n大小的块(不难理解)。
比如3到11之间的9个元素,最大可以分8大小的块。
3~10,4~11(从头开始数8个,从尾开始数8个)
那么就是计算 i~i+p-1,j-p+1~j的最值,每一个区域的个数是p个。
那么可以转化为f数组的f[i,log(2,p)],f[j-p+1,log(2,p)]两个范围。
即是计算
k=(int)(ln(j-i+1)/ln(2));
rmq(i,j)=max(f[i,k],f[i-2^k+1,k]);
理解为主,不然很容易搞错其中的+1 -1;
【转】RMQ-ST算法详解的更多相关文章
- 【原创】RMQ - ST算法详解
ST算法: ID数组下标: 1 2 3 4 5 6 7 8 9 ID数组元素: 5 7 3 1 4 8 2 9 8 1.ST算法作 ...
- ST算法详解
ST算法详解 Coded by Jelly_Goat. All rights reserved. 这个主要是说ST表的. 首先了解一下ST表是什么. 先来一个老套的情景带入. (假设所有的题目都是1s ...
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- kmp算法详解
转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- [转] KMP算法详解
转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的K ...
- 【转】AC算法详解
原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...
- KMP算法详解(转自中学生OI写的。。ORZ!)
KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...
- EM算法详解
EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...
- Tarjan算法详解
Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...
随机推荐
- Android布局中 android:layout_gravity="bottom"为何不起作用?
在android布局时我们有时会需要将位于LinearLayout布局中的控件放在布局底部,或者是同时想将几个控件底部对齐,此时我们自然会想到使用 android:layout_gravity=&qu ...
- SVN 钩子操作-同步更新web目录
一个简单的钩子演示:也可以网上搜索其他高级的 本次想要达到的功能是:每次用户commit 到仓库后,仓库的钩子会自动把程序又更新的www/的web发布目录 1.现在web目录下创建一个test.com ...
- js识别不同浏览器
检測浏览器.注意浏览器推断顺序,主要是基于userAgent做推断. //检測浏览器 var client = function(){ var engine = { ie:0, ...
- SpringBoot项目的云服务器部署
1.场景还原 springboot配置相当简单,人人皆知.怎么把springboot工程部署到云服务器上呢?可能有人会说,博主你前篇不是讲了java工程的云部署把:但是我想澄清一点的是,我前篇的工程都 ...
- x264源代码学习1:概述与架构分析
函数背景色 函数在图中以方框的形式表现出来.不同的背景色标志了该函数不同的作用: 白色背景的函数:不加区分的普通内部函数. 浅红背景的函数:libx264类库的接口函数(API). 粉红色背景函数:滤 ...
- ResfulApi规范
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体. 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3 POST 向指定资源提交数据进行处理请求(例如提 ...
- shu7-19【背包和母函数练习】
题目:http://acm.hdu.edu.cn/diy/contest_show.php?cid=20083 密码:shuacm 感觉他们学校的新生训练出的比较好. 今天很多题目都是强化了背包的转化 ...
- Netty聊天室(2):从0开始实战100w级流量应用
目录 客户端 Client 登录和响应处理 写在前面 客户端的会话管理 客户端的逻辑构成 连接服务器与Session 的创建 Session和 channel 相互绑定 AttributeMap接口的 ...
- Image Recognition
https://www.tensorflow.org/tutorials/image_recognition
- TCP协议要点和难点全解
转载自http://www.cnblogs.com/leetieniu2014/p/5771324.html TCP协议要点和难点全解 说明: 1).本文以TCP的发展历程解析容易引起混淆,误会的方方 ...