我是正常蛇

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

假设被排序数为 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) 得证。

posted on 2012-09-10 20:23  我是正常蛇  阅读(446)  评论(0编辑  收藏  举报