关于RMQ问题的四种解法
什么是RMQ問(wèn)題:
????RMQ (Range Minimum/Maximum Query):對(duì)于長(zhǎng)度為n的數(shù)組A,回答若干詢(xún)問(wèn)RMQ(A,i,j)(i,j<=n-1),返回?cái)?shù)組A中下標(biāo)在i,j范圍內(nèi)的最小(大)值,也就是說(shuō),RMQ問(wèn)題是指求區(qū)間最值的問(wèn)題。
1.暴力法最簡(jiǎn)單的方法,就是遍歷數(shù)組直接搜索,但是這種方式時(shí)間復(fù)雜度是O(n)。對(duì)于數(shù)組長(zhǎng)度較大,性能要求高的場(chǎng)景不適用。一般用這個(gè)算法就等著TLE,時(shí)間復(fù)雜度最壞O(Q*N),也不一定超時(shí),簽到題可能就直接讓你過(guò)了。
2.ST(Sparse Table)算法
ST算法是一種更加高效的算法,基于動(dòng)態(tài)規(guī)劃的思想,以O(shè)(nlogn)的預(yù)處理代價(jià),換取O(1)的查詢(xún)時(shí)性能。但是,是離線(xiàn)的,也就是說(shuō)每次修改都是O(nlogn)復(fù)雜度,那么用在帶修的題目上就顯得捉襟見(jiàn)肘了。
3.樹(shù)狀數(shù)組
從下向上更新,sum改為max/min即可,但是局限性比較大吧,很少看見(jiàn)用樹(shù)狀數(shù)組求最值的題解。
4.線(xiàn)段樹(shù)是基于分治的思想來(lái)實(shí)現(xiàn)的,建立是o(nlogn)查詢(xún)?yōu)镺(logN),那么也就是說(shuō)這個(gè)可以進(jìn)行修改,單點(diǎn)修改維護(hù)也是logN。
分析也就是說(shuō),我們可以?huà)侀_(kāi)1/3不談,當(dāng)題目是離線(xiàn)的時(shí)侯使用ST算法更快,當(dāng)題目是在線(xiàn)的時(shí)候直接使用線(xiàn)段樹(shù)維護(hù)即可,好像還有一種萬(wàn)能的莫隊(duì),不在考慮范圍之內(nèi)。
對(duì)于每種算法,詳解馬上發(fā)布。
總結(jié)
以上是生活随笔為你收集整理的关于RMQ问题的四种解法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: The Preliminary Cont
- 下一篇: 图论--最短路-- Dijkstra模板