1.
rmq (range minimum/maximum query)問題
是指:對於長度為n的數列a,回答若干詢問rmq(a,i,j)(i,j<=n),返回數列a中下標在i,j裡的最小(大)值,也就是
說,rmq問題是指求區間最值的問題。
2.
主要方法及複雜度如下:
1、樸素(即搜尋),o(n)-o(qn) online。
2、 線段樹,o(n)-o(qlogn) online。
3、st(實質是
動態規劃),o(nlogn)-o(q) online。
st演算法(sparse table),以求最大值為例,設d[i,j]表示[i,i+2^j-1]這個區間內的最大值,那麼在詢問到[a,b]區間的最大值時答案就是max(d[a,k], d[b-2^k+1,k]),其中k是滿足2^k<=b-a+1(即長度)的最大的k,即k=[ln(b-a+1)/ln(2)]。
d的求法可以用
動態規劃,d[i, j]=max(d[i, j-1],d[i+2^(j-1), j-1])。
4、rmq標準演算法:先規約成
lca(lowest common ancestor),再規約成約束rmq,o(n)-o(q) online。
首先根據原
數列,建立
笛卡爾樹,從而將問題在
時間複雜度為o(n)-o(1)。
RMQ 區間最值查詢 入門
講解不錯 一些細節講解 rmq range minimum maximum query 即區間最值查詢。rmq演算法一般用較長時間做預處理,時間複雜度為o nlogn 然後可以在o 1 的時間內處理每次查詢。主要是來解決 給你乙個陣列 其中有n個數字,現在給你多次詢問,給你區間 l,r 問你在這個區...
RMQ 區間最值查詢演算法
rmq range minimum maximum query 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中下標在i,j裡的最小 大 值。主要方法 樸素 即搜尋 複雜度為o n 線段樹能在對數時間內在陣列區間上進行更新與查詢。預處理 o n 查詢 o logn 定義...
RMQ問題(區間最值查詢)
有一類問題被稱作區間最值問題,描述的是,給定 n 個元素,需要查詢下標位於 p q 之間的最大 小值。首先確定,針對每一次查詢,肯定是不能動態求最值的,因為每次都要計算,可能造成比較多的時間耗費。有 一種比較好的解決辦法是,先得到所有結果,在查詢時直接取出結果。這樣,就需要一種資料結構,能夠覆蓋所有...