假设被排序数为 n 个, 找pivot的随机办法对每一个数的概率严格为 1/n .
步骤一: 建模。
假设将第 K 个数选为pivot , 则子问题规模为 k-1 和 n-k , 并且该分割的running time 为 Θ(n)
所以容易得到: T(n) = T(k-1) + T(n-k) + Θ(n)
步骤二:用喊有指示随机变量 Xk 来表达T(n)。
设Xk 为指示随机变量 (当第k个数被选为pivot ,则 Xk = 1 ,相反则等于0),则有:
T(n) = X1(T(0) + T(n) + Θ(n)) + X2(T(1) + T(n) + Θ(n)) + ...... + Xn(T(n) + T(n) + Θ(n))
= Sum( Xk( T(k-1) + T(n-k) + Θ(n) ) (k=1,2,3 ......)
步骤三:对两边取期望并化简。
对两边取期望:
E(T(n)) = E( X1(T(0) + T(n) + Θ(n)) + X2(T(1) + T(n) + Θ(n)) + ...... + Xn(T(n) + T(n) + Θ(n)) )
E(T(n)) = E(Sum( Xk( T(k-1) + T(n-k) + Θ(n) )) (k=1,2,3......)
利用期望的线性属性有:
E(T(n)) = Sum(E(Xk( T(k-1) + T(n-k) + Θ(n)))
由于E(Xk) = 1/n (随机概率的期望等于事件发生的概率) ,并且Xk 是独立的,所以
E(T(n)) = 1/n Sum(T(k-1) + T(n-k) + Θ(n))
由于Sum(T(k-1)) 和 Sum(T(n-k)) 是相等的(相当与 1 + 2 + 3 和 3 + 2 + 1)
所以
E(T(n)) = 2/n Sum(T(k))
步骤四:用代替法证明 E(T(n)) <= anlgn
由于是证明 T(n) = Θ(nlgn)
用替代法有:
E(T(n)) <= 2/n Sum(anlgn) = 2a/n Sum(nlgn)
用到一个结论: Sum(nlgn) 对于 n=2 , 3,4, .... , n-1 , 有 Sum(nlgn) <= 1/2n2lgn - 1/8n2
所以
2a/n Sum(nlgn) for n = 0,1,2,3......n <= 2a/n Sum(nlgn) for n = 2,3,4....,n-1 <= 2a/n (1/2n2lgn - 1/8n2) = Θ(nlgn) 得证。