§9 中位數和順序統計量

最值問題

  1. 找到最大值:逐一比較
    n1n-1
  2. 同時找到最大值和最小值:兩兩比較,再與不變量比較
    2n22n-2 \rightarrow 3n/23 \lfloor n/2 \rfloor
  3. 找到次大值或次小值:錦標賽,注意記錄
    n+lgn2n+\lceil lgn \rceil -2

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

  1. O(n)O(n)的選擇算法:SELECT
    1)將輸入的n個無序元素5個一組劃分,找出每組中位數O(n)\quad O(n)
    2)對每組找出的n/5\lceil n/5 \rceil箇中位數,遞歸調用SELECT再找出其中位數xx T(n/5)\quad T(\lceil n/5 \rceil)
    3)用xx對數組進行劃分O(n)\quad O(n)
    4)對劃分出來的區域遞歸調用SELECT繼續找T(7n/10+6)\quad \leq T(7n/10 + 6)
    T(n){O(1),n<140T(n/5)+T(7n/10+6)+O(n),n140 T(n) \leq \begin{cases} O(1) ,& n < 140\\ T(\lceil n/5 \rceil) + T(7n/10 + 6) + O(n), & n \geq 140 \end{cases}
  1. 題目在這裏插入圖片描述
    劃分遞歸就好
  2. 題目
    在這裏插入圖片描述
    和上一題一樣,也是劃分遞歸,只不過這裏指明瞭是第kk個,就加個lgklgk
  3. 題目在這裏插入圖片描述
    先找到中位數O(n)\quad O(n)
    再遍歷數組求每個數和中位數的差的絕對值O(n)\quad O(n)
    再在差的絕對值中找第kk小的O(n)\quad O(n)
  4. 題目在這裏插入圖片描述
    lgnlgn當然是二分遞歸
MEDIAN(X, Y, n)
    if n == 1
        return min(X[1], Y[1])
    if X[n / 2] < Y[n / 2]
        return MEDIAN(X[n / 2 + 1..n], Y[1..n / 2], n / 2)
    return MEDIAN(X[1..n / 2], Y[n / 2 + 1..n], n / 2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章