(另一种快速排序的分析方法)对随机化版本的快速排序算法,还有另一种性能分析方法,这一方法关注于每一次单独递归调用的期望运行时间,而不是比较次数。
a. 证明:给定一个大小为
n
n
n的数组,任何特定元素被选为主元的概率为
1
/
n
1/n
1/n。利用这一点来定义指示器随机变量
X
i
=
I
X_i = I
Xi=I{第
i
i
i小的元素被选为主元},
E
[
X
i
]
E[X_i]
E[Xi]是什么?
b. 设
T
(
n
)
T(n)
T(n)是一个表示快速排序在一个大小为
n
n
n的数组上的运行时间的随机变量,试证明:
c. 证明公式(7.5)可以重写为:
d. 证明:
(提示:可以将该累加式分为两个部分,一部分是
k
=
2
,
3
,
…
,
⌈
n
/
2
⌉
−
1
k = 2, 3, …, ⌈n/2⌉-1
k=2,3,…,⌈n/2⌉−1,另一部分是
k
=
⌈
n
/
2
⌉
,
…
,
n
−
1
k = ⌈n/2⌉, …, n-1
k=⌈n/2⌉,…,n−1。)
e. 利用公式(7.7)中给出的界证明:公式(7.6)中的递归式有解
E
[
T
(
n
)
]
=
Θ
(
n
l
g
n
)
E[T(n)] = Θ(n{\rm lg}n)
E[T(n)]=Θ(nlgn)。(提示:使用代入法,证明对于某个正常数
a
a
a和足够大的
n
n
n,有
E
[
T
(
n
)
]
≤
a
n
l
g
n
E[T(n)] ≤ an{\rm lg}n
E[T(n)]≤anlgn。)
解
a.
数组每个元素都等可能地被选为主元。因此,对于单一元素,它被选为主元的概率为
1
/
n
1/n
1/n。
E
[
X
i
]
E[X_i]
E[Xi]就等于第
i
i
i小的元素被选为主元的概率,即
E
[
X
i
]
=
P
r
E[X_i] = Pr
E[Xi]=Pr{第
i
i
i小的元素被选为主元}
=
1
/
n
= 1/n
=1/n。
b.
对于一个大小为
n
n
n的数组,如果选定第
q
q
q小的元素(该元素用
z
q
z_q
zq表示)为主元,那么划分得到的
2
2
2个子数组的大小分别为
q
−
1
q-1
q−1和
n
−
q
n-q
n−q。于是可以得到以下递归式
T
q
(
n
)
T_q(n)
Tq(n)表示在选定第
q
q
q小的元素为主元的前提下,对大小为
n
n
n的数组进行快速排序的运行时间。其实
T
q
(
n
)
T_q(n)
Tq(n)也是一个随机变量,因为
T
(
q
−
1
)
T(q-1)
T(q−1)和
T
(
n
−
q
)
T(n-q)
T(n−q)也是随机变量,即
[
T
(
q
−
1
)
+
T
(
n
−
q
)
+
Θ
(
n
)
]
[T(q-1) + T(n-q) + Θ(n)]
[T(q−1)+T(n−q)+Θ(n)]也是随机变量。于是可以写出
T
q
(
n
)
T_q(n)
Tq(n)的期望
q
q
q的取值范围是
1
,
2
,
…
,
n
1, 2, …, n
1,2,…,n,于是我们可以计算
T
(
n
)
T(n)
T(n)的期望
上式中,
E
[
X
q
]
∙
E
(
T
(
q
−
1
)
+
T
(
n
−
q
)
+
Θ
(
n
)
)
=
E
[
X
q
(
T
(
q
−
1
)
+
T
(
n
−
q
)
+
Θ
(
n
)
)
]
E[X_q ]∙E(T(q-1)+T(n-q)+Θ(n))=E[X_q (T(q-1)+T(n-q)+Θ(n))]
E[Xq]∙E(T(q−1)+T(n−q)+Θ(n))=E[Xq(T(q−1)+T(n−q)+Θ(n))]成立,是因为随机变量
X
q
X_q
Xq和
[
T
(
q
−
1
)
+
T
(
n
−
q
)
+
Θ
(
n
)
]
[T(q-1)+T(n-q)+Θ(n)]
[T(q−1)+T(n−q)+Θ(n)]是互相独立的。
c.
将公式(7.5)的累加求和部分展开,得到下表
由上表可知,第
q
q
q个累加项与第
n
−
q
+
1
n-q+1
n−q+1个累加项是完全对称相等的。于是有
上式中,
q
=
0
q = 0
q=0和
q
=
1
q = 1
q=1分别对应的
T
(
0
)
T(0)
T(0)和
T
(
1
)
T(1)
T(1)都为常数时间,可以将它们拿掉,这样并不影响最终的结果。于是有
d.
按照提示,将累加式分为2个部分,于是有
e.
只需证明
E
[
T
(
n
)
]
=
O
(
n
l
g
n
)
E[T(n)] = O(n{\rm lg}n)
E[T(n)]=O(nlgn)即可。
初始情况取
n
=
2
n = 2
n=2,
T
(
2
)
T(2)
T(2)为常数时间。显然,只要取足够大的
a
a
a,就可使得
T
(
2
)
≤
a
•
2
•
l
g
2
=
2
a
T(2) ≤ a•2•{\rm lg}2 = 2a
T(2)≤a•2•lg2=2a成立。
下面进行归纳过程。假设
E
[
T
(
n
)
]
≤
a
n
l
g
n
E[T(n)] ≤ an{\rm lg}n
E[T(n)]≤anlgn对
2
,
…
,
n
−
1
2, …, n-1
2,…,n−1都成立,那么有
只要取足够大的
a
a
a,就能使得
a
n
l
g
n
−
1
4
a
n
+
Θ
(
n
)
≤
a
n
l
g
n
an{\rm lg}n-\frac{1}{4} an+Θ(n)≤an{\rm lg}n
anlgn−41an+Θ(n)≤anlgn成立,即
E
[
T
(
n
)
]
≤
a
n
l
g
n
E[T(n)] ≤ an{\rm lg}n
E[T(n)]≤anlgn成立。
算法导论 — 思考题7-3 另一种快速排序的分析方法
最新推荐文章于 2022-03-20 02:05:37 发布