动态规划求解 RMQ 问题
文章目录
rmq 即是区间最值问题,这里是动态规划模板的讲解。所谓 dp 的方法,就是区间 dp 的方法,如果采用原始的区间 dp 方法,那么当数据量很大时会出现时间和空间的双重爆破。这里我们采用了倍增法。我们通过这个模板来观察这个的实现以及思想。
上模板。这是 poj 3264 的题,可以用线段树,也可以用 rmq 求解。
|
|
预处理时间是
预处理
|
|
这里,
该区间的终点为
区间我们对半拆分。
查询
|
|
显然,查询最大值和查询最小值是一样的。
任意一个整数可以表达为一个二进制数,我们求得
总结
首先,这是个区间 dp 的优化,这个优化也可以作用于允许区间重叠的问题。
区间 dp 我们分别枚举开始节点和终点,并枚举分割节点。这里,我们的分割节点取中间节点即可。由于原始的区间 dp 复杂度都很大,所以我们采用了倍增法解决一部分问题。
这里,我们用倍增法压缩了一些区间,在我们查询的时候再将之取出。我们之所以采用二倍是因为计算机的二进制表达,我们也可以采用三倍甚至四倍,但倍增越大,我们压缩的就越厉害,到时候我们将之分割的时候就越麻烦。所以,一般我们采用二倍。
以上就是我学习 rmq 的一些总结,希望对大家学习该算法的时候有所帮助。
文章作者 bigshans
上次更新 2019-03-22