Quick Selection(快速選擇演算法)

2021-09-22 16:42:16 字數 900 閱讀 1401

常年見到快速排序演算法,當在普林斯頓大學的網課上看到這個quick selection演算法的時候,直接蒙住了——這個是什麼,和快速排序有什麼關係啊?

於是迅速查閱了維基百科,大致了解了其思想,再結合課程中的ppt,終於搞明白了。不得不說這是個很巧妙的演算法,把原先要o(nlogn)複雜度的問題,簡化為o(n),且資料無需有序.

想起來以前在競賽和面試時候碰到過類似的情況,都是要找出第n大的數,當時第乙個想到的就是排序,然後再通過定位來求解。這回是長記性了,哪有不用更高效演算法的道理呢?!

quick selection演算法和quick sort演算法是由同乙個作者提出,這兩者之間有很大的相似之處——分治,即將問題的規模一次次的減小,直到求出最終解。

目標:找到第n大的數

隨機產生乙個pivot

根據這個pivot,將小於其的數放左邊,大於其的數放右邊

更新第n大數的估計值的位置,選擇其中一邊,直到=n

重複2、3步驟

操作的情況大致如下圖所示:v即為pivot

假設找的數以平均情況計算(被找的數每次都在中間部分),令o(n)為總的時間複雜度,n+o(n/2)為第o(n)次查詢所需要的時間。按照以下公式進行遞推,可以推出,最終o(n)近似等於2n,即o(n)=n。

而最壞情況時(被找的數每次都在最邊上),

來自演算法課程 ppt,其計算得出的結果

分治 快排 快選

快排模板 include using namespace std const int n 1e5 10 int n,a n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain 快速選擇演算法 選擇...

快重傳和快恢復

比如傳送方傳送了1,2,3,4四個報文,2 3 4先後到達接收方,由於接收方收到的是三個失序的報文,就會連續發3個ack為1的報文,表示希望收到報文1。當傳送方接收到1個這樣的冗餘報文時,不採取任何措施,直到收到3個冗餘報文,才認定報文1丟失,此時馬上重傳報文1而不是等待1的超時重傳。這就是快重傳。...

快重傳與快恢復

快重傳演算法首先要求接收方每收到乙個失序的報文段後就立即發出重複確認 為的是使傳送方及早知道有報文段沒有到達對方 而不要等待自己傳送資料時才進行捎帶確認。快重傳示意圖如下 如上圖所示,接收方收到了 m1 和 m2 後都分別發出了確認。現假定接收方沒有收到 m3 但接著收到了 m4。顯然,接收方不能確...