1. 程式人生 > >演算法: BFPRT(線性查詢演算法)

演算法: BFPRT(線性查詢演算法)

轉載地址: https://mp.weixin.qq.com/s/U70cJ0fKpcjiDOe0ZeBS2w

 

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小元素。