最值問題
找到最大值:逐一比較
n − 1 n-1 n − 1
同時找到最大值和最小值:兩兩比較,再與不變量比較
2 n − 2 2n-2 2 n − 2 → \rightarrow → 3 ⌊ n / 2 ⌋ 3 \lfloor n/2 \rfloor 3 ⌊ n / 2 ⌋
找到次大值或次小值:錦標賽,注意記錄
n + ⌈ l g n ⌉ − 2 n+\lceil lgn \rceil -2 n + ⌈ l g n ⌉ − 2
最壞時間爲線性的選擇算法
O ( n ) O(n) O ( n ) 的選擇算法:SELECT
1)將輸入的n個無序元素5個一組劃分,找出每組中位數O ( n ) \quad O(n) O ( n )
2)對每組找出的⌈ n / 5 ⌉ \lceil n/5 \rceil ⌈ n / 5 ⌉ 箇中位數,遞歸調用SELECT再找出其中位數x x x T ( ⌈ n / 5 ⌉ ) \quad T(\lceil n/5 \rceil) T ( ⌈ n / 5 ⌉ )
3)用x x x 對數組進行劃分O ( n ) \quad O(n) O ( n )
4)對劃分出來的區域遞歸調用SELECT繼續找≤ T ( 7 n / 10 + 6 ) \quad \leq T(7n/10 + 6) ≤ T ( 7 n / 1 0 + 6 )
T ( n ) ≤ { O ( 1 ) , n < 140 T ( ⌈ n / 5 ⌉ ) + T ( 7 n / 10 + 6 ) + O ( n ) , n ≥ 140 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}
T ( n ) ≤ { O ( 1 ) , T ( ⌈ n / 5 ⌉ ) + T ( 7 n / 1 0 + 6 ) + O ( n ) , n < 1 4 0 n ≥ 1 4 0
題目
劃分遞歸就好
題目
和上一題一樣,也是劃分遞歸,只不過這裏指明瞭是第k k k 個,就加個l g k lgk l g k
題目
先找到中位數O ( n ) \quad O(n) O ( n )
再遍歷數組求每個數和中位數的差的絕對值O ( n ) \quad O(n) O ( n )
再在差的絕對值中找第k k k 小的O ( n ) \quad O(n) O ( n )
題目
l g n lgn l g n 當然是二分遞歸
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 )