Top K問題-BFPRT演算法、Parition演算法
阿新 • • 發佈:2018-11-22
BFPRT演算法原理
在BFPTR演算法中,僅僅是改變了快速排序Partion中的pivot值的選取,在快速排序中,我們始終選擇第一個元素或者最後一個元素作為pivot,而在BFPTR演算法中,每次選擇五分中位數的中位數作為pivot,這樣做的目的就是使得劃分比較合理,從而避免了最壞情況的發生。演算法步驟如下
1. 將 個元素劃為 組,每組5個,至多隻有一組由 個元素組成。
2. 尋找這 個組中每一個組的中位數,這個過程可以用插入排序。
3. 對步驟2中的箇中位數,重複步驟1和步驟2,遞迴下去,直到剩下一個數字。 4. 最終剩下的數字即為pivot,把大於它的數全放左邊,小於等於它的數全放右邊。
5. 判斷pivot的位置與k的大小,有選擇的對左邊或右邊遞迴。
求第 大就是求第 小,這兩者等價。
基於Partition演算法
- 選擇一個Position(稱為基準),基於該演算法的Top k演算法,非常受Position好壞的影響,所謂的壞,有可能使時間複雜度達到O(n*n)。
- 然後利用Partition演算法進行劃分,如果Partition得到的p小於K,則繼續劃分p的右邊,如果p大於K,則繼續劃分p的左邊,如果p等於K,則演算法結束。
作者:遠o_O
連結:https://www.jianshu.com/p/495e5019669c
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。