《算法導論》第9章 中位數和順序統計量 個人筆記

第9章 中位數和順序統計量

9.1 最小值和最大值

尋找集合中的最小值or最大值,必須要做n-1次比較。
同時尋找最小值和最大值不需要2(n-1)次比較,我們將一對輸入元素相互進行比較,然後把較小的與當前最小值比較,較大的與當前最大值比較,這樣每2個元素共需3次比較。所以總的比較次數至多是3(n/2)。

9.2 期望爲線性時間的選擇算法

選擇數組A[p..r]種第i小的元素:

int randomized_select(int a[], int low, int high, int i){
    if(low == hight)
        return a[low];
    q = randomized_partition(a, low, high);
    k = q - low + 1;
    if(i == k)
        return a[q];
    else{
        if(i < k)
            return randomized_select(a, low, q-1 ,i);
        else
            return randomized_select(a, q+1, low ,i-k);
    }
}

9.3 最壞情況爲線性時間的選擇算法

SELECT算法
1. 將輸入數組的n個元素劃分爲n/5 組,每組5個元素,且至多隻有一組由剩下的n mod 5個元素組成
2. 尋找這n/5+1 組中每一組的中位數:首先對每組元素進行插入排序,然後 確定每組有序元素的中位數
3. 對第2步中找出的n/5+1 箇中位數,遞歸調用SELECT以找出其中位數x(若有偶數箇中位數,約定x是較小的中位數)
4. 利用修改多的PARTITION 版本,按中位數的中位數x對數組進行劃分。讓k比劃分的低區中的元素數目多1,因此x是第k小的元素,並且有nk 個元素在劃分的高區
5. 如果i=k ,則返回x。如果i<k ,則在低區遞歸調用SELECT來找出第i小的元素。如果i>k ,則在高區遞歸查找第i-k小的元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章