RMQ算法(Range Minimum/Maximum Query),即区间最值查询,是一种在线算法。
补充:所谓在线算法就是每次输入可立刻处理一个结果,对比离线算法,离线算法是要知道所有的输入之后才开始处理结果,例如选择排序和插入排序,选择排序是一种离线算法,排序之前要知道所有的待排序元素,而插入排序就不必知道,所以插入排序是一种在线算法。
RMQ算法一般用比较长的时间预处理,预处理时间复杂度是log级,然后查询的时间只有O(1)。
下面我举一个例子来讲一下RMQ的求最小值预处理部分。
假设有一个数组a:1 5 3 1 2 5 2 4 8 9
设二维数组dp[i][j]表示从第i位开始连续 个数中的最小值。则dp[1][1]就是表示从第一位开始后面连续两位的最小值,即第一位和第二位的最小值。dp[2][1]表示第2位开始后面连续两位的最小值,即第二位和第三位的最小值。