BFPRT 線性查詢演算法

2021-10-19 11:54:15 字數 420 閱讀 4268

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;若ik,在大於x的元素中遞迴查詢第i-k小的元素。 

終止條件:n=1時,返回的即是i小元素。

BFPRT(線性查詢)演算法

bfprt演算法是解決從n個數中選擇第k大或第k小的數這個經典問題的著名演算法,但很多人並不了解其細節。本文將首先介紹求解這個第k小數字問題的幾個思路,然後重點介紹在最壞情況下複雜度仍然為o n 的bfprt演算法。關於選擇第k小的數字有許多方法,其效率和複雜度各不一樣,可以根據實際情況進行選擇。將...

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

bfprt演算法解決的問題十分經典,即從某n個元素的序列中選出第k大 第k小 的元素,通過巧妙的分 析,bfprt可以保證在最壞情況下仍為線性時間複雜度。該演算法的思想與快速排序思想相似,當然,為使得演算法在最壞情況下,依然能達到o n 的時間複雜 度,五位演算法作者做了精妙的處理。演算法步驟 1 ...

BFPRT演算法詳解

在一大堆數中求其前k大或前k小的問題,簡稱top k問題。而目前解決top k問題最有效的演算法即是bfprt演算法,其又稱為中位數的中位數演算法,該演算法由blum floyd pratt rivest tarjan提出,最壞時間複雜度為o n 在首次接觸top k問題時,我們的第一反應就是可以先...