(比较排序的概率下界)在这一问题中,我们将证明对于给定的
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.
笔者还未能理解题目意思,以后再补上。
算法导论 — 思考题8-1 比较排序的概率下界
最新推荐文章于 2021-08-07 20:34:54 发布