勵志

勵志人生知識庫

四毛子算法

四毛子算法,也稱為The Method of Four Russians,是一種用於解決RMQ(Range Minimum Query,範圍最小值查詢)問題的算法。它的時間複雜度為O(n+m),可以線上性時間內求解RMQ問題。四毛子算法的核心思想在於將原序列的RMQ問題轉化為笛卡爾樹上的LCALCA問題,再進一步轉化為±1RMQ問題。

在四毛子算法中,首先構建原序列的笛卡爾樹,然後對於原序列的一個區間[L,R],在笛卡爾樹中找到對應的區間位置。LCALCA問題的處理在Enler序(歐拉序)上進行,即在歐拉序上的一個新的RMQ問題。此時,RMQ問題不再是求解value的值,而是找到區間[L,R]中深度最小的點。

對於±1RMQ問題的求解,算法將歐拉序列進行分塊,塊長b取為⌈log2t2⌉,其中t為Enler序列的長度。對於大塊間的信息維護,使用ST表(Sparse Table)處理,複雜度為O(tblogt)=O(n)。對於邊角塊的處理,通過預處理達到O(1)的複雜度。由於差分數組總共只有2b−1種,所以預處理的複雜度可以達到O(b2b),不超過O(n)。

具體來說,可以將每一個序列形成的規則折線狀壓起來,如果第i位是1表示i->i+1折線下降了1,反之表示序列上升了1。最後用常規思路處理邊角塊問題即可。

四毛子算法的重要之處不僅在於算法本身,更在於它所體現的一種序列問題的轉化思想。這種思想可以擴展到任意RMQ問題,即將原問題轉化為LCALCA問題,再進一步轉化為±1RMQ問題。這種轉化思想在實際套用中可以幫助去掉一個log級別的複雜度。