期望為線性的選擇演算法

2022-09-13 12:12:10 字數 735 閱讀 6664

以快排為模型,對陣列遞迴劃分,但遞迴後只處理包含所查第k個元素的那邊,如此遞迴下去直至查詢成功

這裡的partition就是其中的randomized_partition

#include int randomized_partition(int * a, int p, int r)

} temp = a[i+1];

a[i+1] = a[r];

a[r] = temp;

return i+1;

}int randomized_select(int * a, int p, int r, int i)

int main()

;//[1,10]

int len = sizeof(a)/sizeof(int);

int ans = randomized_select(a,0,9,3);

printf("%d\n", ans);

return 0;

}

期望執行時間是o(n),書中推到複雜我就直接跳過了;另外它的最壞執行時間為o(n^2),因為不是每次劃分都是均勻的,所以存在每次劃分都最不均勻的情況,即最壞執行時間.

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

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

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

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

小白高階之期望為線性時間的選擇演算法

期望為線性時間的選擇演算法,最壞時間複雜度為 n 期望時間複雜度為 n 選擇演算法用到了以前快速排序時用到的隨機劃分。目的是找出陣列中第i個元素。演算法的思想為 先隨機劃分,再看i的位置,若是i剛剛好等於隨機劃分的位置,則返回此位置的陣列元素值,否則根據i的位置遞迴呼叫選擇函式,尋找第i 個元素。與...