BFPRT演算法解決的問題十分經典,即從某n個元素的序列中選出第k大(第k小)的元素,通過巧妙的分析,BFPRT可以保證在最壞情況下仍為線性時間復雜度,該演算法的思想與快速排序思想相似,當然,為使得演算法在最壞情況下,依然能達到o(n)的時間復雜度,五位演算法作者做了精妙的處理,
演算法步驟:
1. 將n個元素每5個一組,分成n/5(上界)組,
2. 取出每一組的中位數,任意排序方法,比如插入排序,
3. 遞回的呼叫selection演算法查找上一步中所有中位數的中位數,設為x,偶數個中位數的情況下設定為選取中間小的一個,
4. 用x來分割陣列,設小于等于x的個數為k,大于x的個數即為n-k,
5. 若i==k,回傳x;若i<k,在小于x的元素中遞回查找第i小的元素;若i>k,在大于x的元素中遞回查找第i-k小的元素,
終止條件:n=1時,回傳的即是i小元素,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/261095.html
標籤:其他
上一篇:Qt - Plugin
