(比较排序的概率下界)在这一问题中,我们将证明对于给定的 n n n个互异的输入元素,任何确定或随机的比较排序算法,其概率运行时间都有下界 Ω ( n l g n ) Ω(n{\rm lg}n) Ω(nlgn)。首先来分析一个确定的比较排序算法 A A A,其决策树为 T A TA TA。假设 A A A的输入的每一种排列情况都是等可能的。
a. 假设 T A TA TA的每个叶结点都标有在给定的随机输入情况下到达该终点的概率。证明:恰有 n ! n! n!个叶结点标有 1 / n ! 1/n! 1/n!,其他叶结点标记为 0 0 0。
b. 定义 D ( T ) D(T) D(T)表示一棵决策树 T T T的外部路径长度,即 D ( T ) D(T) D(T)是 T T T的所有叶结点深度的和。假设 T T T为一棵有 k > 1 k > 1 k>1个叶结点的决策树, L T LT LT和 R T RT RT分别是 T T T的左子树和右子树。证明: D ( T ) = D ( L T ) + D ( R T ) + k D(T) = D(LT) + D(RT) + k D(T)=D(LT)+D(RT)+k。
c. 定义 d ( k ) d(k) d(k)为所有具有 k > 1 k > 1 k>1个叶结点的决策树 T T T的最小 D ( T ) D(T) D(T)值。证明: d ( k ) = min 1 ≤ i ≤ k − 1 { d ( i ) + d ( k − i ) + k } d(k)=\min\limits_{1≤i≤k-1}\{d(i)+d(k-i)+k\} d(k)=1≤i≤k−1min{d(i)+d(k−i)+k}。(提示:考虑一棵能够取得该最小值的、有 k k k个叶结点的决策树 T T T。设 i 0 i_0 i0是 L T LT LT中的叶结点数, k − i 0 k−i_0 k−i0是 R T RT RT中的叶结点数。)
d. 证明: d d d对于给定的 k ( k > 1 ) k (k > 1) k(k>1)和 i ( 1 ≤ i ≤ k − 1 ) i (1 ≤ i ≤ k−1) i(1≤i≤k−1),函数 i l g i + ( k − i ) l g ( k − i ) i{\rm lg}i+(k-i){\rm lg}(k-i) ilgi+(k−i)lg(k−i)在 i = k / 2 i = k/2 i=k/2处取得最小值,并有结论 d ( k ) = Ω ( k l g k ) d(k) = Ω(k{\rm lg}k) d(k)=Ω(klgk)。
e. 证明: D ( T A ) = Ω ( n ! l g ( n ! ) ) D(TA) = Ω(n!{\rm lg}(n!)) D(TA)=Ω(n!lg(n!)),并得出在平均情况下,排序 n n n个元素的时间代价为 Ω ( n l g n ) Ω(n{\rm lg}n) Ω(nlgn)这一结论。
现在来考虑一个随机化的比较排序 B B B。通过引入两种结点,我们可以将决策树模型扩展来处理随机化的情况。这两种结点是:普通的比较结点和“随机化”结点。随机化结点刻画了算法 B B B中所做的形如 R A N D O M ( 1 , r ) {\rm RANDOM}(1, r) RANDOM(1,r)的随机选择情况。该类结点有 r r r个子结点,在算法执行过程中,每一个子结点等概率地被选择。
f. 证明:对任何随机化比较排序算法 B B B,总存在一个确定的比较排序算法 A A A,其期望的比较次数不多于 B B B的比较次数。
解
a.
题干有假设比较排序算法 A A A的输入的每一种排列情况都是等可能的。输入有 n n n个互异元素,一共有 n ! n! n!种可能的排列,每种排列出现的概率都是 1 / n ! 1/n! 1/n!。如果对应到决策树上,则恰有 n ! n! n!个叶结点标有概率 1 / n ! 1/n! 1/n!,其他叶结点标记概率为 0 0 0。因为这 n ! n! n!个概率为 1 / n ! 1/n! 1/n!叶结点对应 n ! n! n!种可能的排列,而其他叶结点表示不可能出现的排列。
b.
假设左右子树 L T LT LT和 R T RT RT分别有 k 1 k_1 k1和 k 2 k_2 k2个叶结点,显然有 k 1 + k 2 = k k_1 + k_2 = k k1+k2=k。假设左子树 L T LT LT的叶结点的在左子树 L T LT LT的深度分别为 l 1 , l 2 , … , l k 1 l_1, l_2, …, l_{k1} l1,l2,…,lk1,假设右子树 R T RT RT的叶结点的在右子树 R T RT RT的深度分别为 r 1 , r 2 , … , r k 2 r_1, r_2, …, r_{k2} r1,r2,…,rk2,于是有
D ( L T ) = ∑ i = 1 k 1 l i D(LT)=\sum\limits_{i=1}^{k_1}l_i D(LT)=i=1∑k1li
D ( R T ) = ∑ i = 1 k 2 r i D(RT)=\sum\limits_{i=1}^{k_2}r_i D(RT)=i=1∑k2ri
我们要计算 D ( T ) D(T) D(T),就要考察所有叶结点在决策树 T T T上的深度。相比叶结点在各自子树 L T LT LT或 R T RT RT上的深度,叶结点在决策树 T T T上的深度增加了 1 1 1。即左子树 L T LT LT的叶结点在决策树 T T T上的深度为 l 1 + 1 , l 2 + 1 , … , l k 1 + 1 l_1+1, l_2+1, …, l_{k1}+1 l1+1,l2+1,…,lk1+1,右子树RT的叶结点的在决策树 T T T的深度分别为 r 1 + 1 , r 2 + 1 , … , r k 2 + 1 r_1+1, r_2+1, …, r_{k2}+1 r1+1,r2+1,…,rk2+1。于是有
D ( T ) = ∑ i = 1 k 1 ( l i + 1 ) + ∑ i = 1 k 2 ( r i + 1 ) = ∑ i = 1 k 1 l i + ∑ i = 1 k 2 r i + ∑ i = 1 k 1 = D ( L T ) + D ( R T ) + k D(T)=\sum\limits_{i=1}^{k_1}(l_i+1) +\sum\limits_{i=1}^{k_2}(r_i+1) =\sum\limits_{i=1}^{k_1}l_i +\sum\limits_{i=1}^{k_2}r_i +\sum\limits_{i=1}^k1=D(LT)+D(RT)+k D(T)=i=1∑k1(li+1)+i=1∑k2(ri+1)=i=1∑k1li+i=1∑k2ri+i=1∑k1=D(LT)+D(RT)+k
c.
考虑一棵有 k > 1 k > 1 k>1个叶结点的决策树 T T T,它的左子树 L T LT LT有 i i i个叶结点,那么它的右子树 R T RT RT有 k − i k−i k−i个叶结点。显然, i i i的取值范围为 1 ≤ i ≤ k − 1 1 ≤ i ≤ k−1 1≤i≤k−1。对于一个确定的 i i i,左子树 L T LT LT的最小 D ( L T ) D(LT) D(LT)值为 d ( i ) d(i) d(i),右子树 R T RT RT的最小 D ( R T ) D(RT) D(RT)值为 d ( k − i ) d(k−i) d(k−i)。借用问题b的结论,对于一个确定的 i i i,决策树 T T T的最小 D ( T ) D(T) D(T)值 d i ( k ) = d ( i ) + d ( k − i ) + k d_i(k) = d(i) + d(k−i) + k di(k)=d(i)+d(k−i)+k。为了得到决策树 T T T的最小 D ( T ) D(T) D(T)值 d ( k ) d(k) d(k),可以遍历 i = 0 , 1 , … , k i = 0, 1, …, k i=0,1,…,k,取最小的 d i ( k ) d_i(k) di(k),即
d ( k ) = min 1 ≤ i ≤ k − 1 { d ( i ) + d ( k − i ) + k } d(k)=\min\limits_{1≤i≤k-1}\{d(i)+d(k-i)+k\} d(k)=1≤i≤k−1min{d(i)+d(k−i)+k}
d.
令函数 f ( i ) = i l g i + ( k − i ) l g ( k − i ) f(i)=i{\rm lg}i+(k-i){\rm lg}(k-i) f(i)=ilgi+(k−i)lg(k−i),它的导数为
f ′ ( i ) = l g i + i ∙ 1 i ∙ l n 2 − l g ( k − i ) − ( k − i ) 1 ( k − i ) ∙ l n 2 = l g i − l g ( k − i ) f'(i)={\rm lg}i+i∙\frac{1}{i∙ln2}-{\rm lg}(k-i)-(k-i)\frac{1}{(k-i)∙ln2}={\rm lg}i-{\rm lg}(k-i) f′(i)=lgi+i∙i∙ln21−lg(k−i)−(k−i)(k−i)∙ln21=lgi−lg(k−i)
当 i = k / 2 i = k/2 i=k/2时, f ’ ( i ) = 0 f’(i) = 0 f’(i)=0。当 i < k / 2 i < k/2 i<k/2时, f ’ ( i ) < 0 f’(i) < 0 f’(i)<0;当 i > k / 2 i > k/2 i>k/2时, f ’ ( i ) > 0 f’(i) > 0 f’(i)>0。所以函数 f ( i ) f(i) f(i)在 i = k / 2 i = k/2 i=k/2处取得最小值,最小值为 k l g k − k k{\rm lg}k-k klgk−k。
接下来证明 d ( k ) = Ω ( k l g k ) d(k) = Ω(k{\rm lg}k) d(k)=Ω(klgk),我们采用代入法。 d ( k ) = Ω ( k l g k ) d(k) = Ω(k{\rm lg}k) d(k)=Ω(klgk)意味着存在一个正常数 c c c,使得当 k k k足够大时,有 d ( k ) ≥ c k l g k d(k) ≥ ck{\rm lg}k d(k)≥cklgk成立。
先考察初始情况 k = 1 k = 1 k=1,此时决策树 T T T只有一个叶结点,当这个叶结点就是根结点时,决策树 T T T的 D ( T ) D(T) D(T)值最小。由于根结点的深度为 0 0 0,故此时 D ( T ) = 0 D(T) = 0 D(T)=0,即 d ( 1 ) = 0 d(1) = 0 d(1)=0。显然, c c c可以取任意正常数,都能使得 d ( 1 ) ≥ c ∙ 1 ∙ l g 1 = 0 d(1) ≥ c∙1∙{\rm lg}1 = 0 d(1)≥c∙1∙lg1=0成立。
现在进入归纳过程。假设 d ( k ) ≥ c k l g k d(k) ≥ ck{\rm lg}k d(k)≥cklgk对 1 , 2 , … , k − 1 1, 2, …, k−1 1,2,…,k−1都成立。根据问题c的结论,有
d ( k ) = min 1 ≤ i ≤ k − 1 { d ( i ) + d ( k − i ) + k } d(k)=\min\limits_{1≤i≤k-1}\{d(i)+d(k-i)+k\} d(k)=1≤i≤k−1min{d(i)+d(k−i)+k}
≥ min 1 ≤ i ≤ k − 1 { c i l g i + c ( k − i ) l g ( k − i ) + k } ≥\min\limits_{1≤i≤k-1}\{ci{\rm lg}i+c(k-i){\rm lg}(k-i)+k\} ≥1≤i≤k−1min{cilgi+c(k−i)lg(k−i)+k}
= c ∙ min 1 ≤ i ≤ k − 1 { i l g i + ( k − i ) l g ( k − i ) } + k =c∙\min\limits_{1≤i≤k-1}\{i{\rm lg}i+(k-i){\rm lg}(k-i)\}+k =c∙1≤i≤k−1min{ilgi+(k−i)lg(k−i)}+k
根据上文分析,当 i = k / 2 i = k/2 i=k/2时, i l g i + ( k − i ) l g ( k − i ) i{\rm lg}i+(k-i){\rm lg}(k-i) ilgi+(k−i)lg(k−i)取得最小值 k l g k − k k{\rm lg}k-k klgk−k。于是上式可以继续变换为
d ( k ) ≥ c ∙ min 1 ≤ i ≤ k − 1 { i l g i + ( k − i ) l g ( k − i ) } + k = c ( k l g k − k ) + k = c k l g k + ( 1 − c ) k d(k)≥c∙\min\limits_{1≤i≤k-1}\{i{\rm lg}i+(k-i){\rm lg}(k-i)\}+k=c(k{\rm lg}k-k)+k=ck{\rm lg}k+(1-c)k d(k)≥c∙1≤i≤k−1min{ilgi+(k−i)lg(k−i)}+k=c(klgk−k)+k=cklgk+(1−c)k
根据上式,只要取 c ≤ 1 c ≤ 1 c≤1,就能使得 d ( k ) ≥ c k l g k d(k)≥ck{\rm lg}k d(k)≥cklgk成立。
综上所述, d ( k ) = Ω ( k l g k ) d(k) = Ω(k{\rm lg}k) d(k)=Ω(klgk)成立。
e.
对于一个 n n n个元素的确定的比较排序算法 A A A,其决策树 T A TA TA的叶结点数目至少为 n ! n! n!,对应 n ! n! n!种可能的排列。那么决策树 T A TA TA的 D ( T A ) D(TA) D(TA)值的下限为 d ( n ! ) = Ω ( n ! l g ( n ! ) ) d(n!) = Ω(n!{\rm lg}(n!)) d(n!)=Ω(n!lg(n!))。
现在考察平均情况下排序 n n n个元素的时间代价,实际上要考察的是平均情况下单个叶结点的深度,即单个叶结点的深度的期望值 E [ D e p t h ( i ) ] E[Depth(i)] E[Depth(i)]。现在我们来计算所有叶结点的深度的期望和
∑ i = 1 n ! E [ D e p t h ( i ) ] = E [ ∑ i = 1 n ! D e p t h ( i ) ] = E [ D ( T A ) ] = Ω ( n ! l g ( n ! ) ) \sum\limits_{i=1}^{n!}E[Depth(i)] =E[\sum\limits_{i=1}^{n!}Depth(i) ]=E[D(T_A )]=Ω(n!{\rm lg}(n!)) i=1∑n!E[Depth(i)]=E[i=1∑n!Depth(i)]=E[D(TA)]=Ω(n!lg(n!))
由于每个叶结点的概率值是一样的,所以每个叶结点的深度的期望值也是相等的。于是单个叶结点的深度的期望值 E [ D e p t h ( i ) ] = ( 1 / n ! ) ∙ Ω ( n ! l g ( n ! ) ) = Ω ( l g ( n ! ) ) = Ω ( n l g n ) E[Depth(i)]=(1/n!)∙Ω(n!{\rm lg}(n!))=Ω({\rm lg}(n!))=Ω(n{\rm lg}n) E[Depth(i)]=(1/n!)∙Ω(n!lg(n!))=Ω(lg(n!))=Ω(nlgn)。于是,平均情况下排序 n n n个元素的时间代价为 Ω ( n l g n ) Ω(n{\rm lg}n) Ω(nlgn)。
f.
笔者还未能理解题目意思,以后再补上。