期望為線性時間選擇演算法

2021-06-26 19:23:23 字數 537 閱讀 9640

一般選擇問題看起來要比我麼找最小值這樣的簡單問題更難。但這兩個問題的漸進執行時間卻是相同的θ(n)。randomized_select演算法,以快速排序演算法為模型。與快速排序不同的是,快速排序會遞迴處理劃分的兩邊,而randomized_select只處理劃分的一邊。快速排序執行的時間是θ(n ㏒n),而randomized_select的期望執行時間是θ(n).

#include#include#includeusing namespace std;

void exchange(int &a,int &b)

int partition(int *arry,int p,int r){

int x=arry[r];

int i=p-1;

for(int j=p;j

randomized_select的最壞執行時間為θ(n^2),即使是找最小元素也是如此,因為在每次劃分時可能極不走運地總是按餘下的元素中最大的來劃分,而劃分操作需要θ(n),我們也將看到該演算法有線性的期望執行時間,應為他是隨機化的,所以不存在乙個特定會導致其最壞情況發生的輸入資料。,

期望為線性時間的選擇演算法

演算法導論 第9章randomized select演算法 從乙個陣列當中尋找第i小的元素,最簡單最暴力的方法就是將整個陣列按照公升序進行排序操作,那麼第i個元素就是第i小的元素。如果是以這種方式,那麼時間複雜度等同於排序時所使用的排序演算法,如果是快速排序,那麼此時時間複雜度為o nlgn 那麼,...

期望為線性的選擇演算法

以快排為模型,對陣列遞迴劃分,但遞迴後只處理包含所查第 個元素的那邊,如此遞迴下去直至查詢成功 無 這裡的partition就是其中的randomized partition include int randomized partition int a,int p,int r temp a i 1 ...

期望線性時間選擇

在乙個由n個元素組成的集合裡,第i個順序統計量 order statistic 是該集合中第i 小的元素。比如 在一組元素的集合中,最小值是第1個順序統計量 i 1 而最大值是第n個順序統計量 i n code include include include void swap int a,int ...