CLRS第十章思考题

来源:互联网 发布:php的进程是什么 编辑:程序博客网 时间:2024/05/20 06:08

思考题10-1

未排序的单链表 已排序的单链表 未排序的双向链表 已排序的双向链表 SEARCH(L,k) O(n) O(n) O(n) O(n) INSERT(L,x) O(1) O(n) O(1) O(n) DELETE(L,x) O(n) O(n) O(1) O(1) SUCCESSOR(L,x) O(1) O(1) O(1) O(1) PREDECESSOR(L,x) O(n) O(n) O(1) O(1) MINIMUM(L) O(n) O(1) O(n) O(1) MAXIMUM(L) O(n) O(n) O(n) O(n)

思考题10-2

链表是排序 链表不是排序 不排序,不相交 MAKE-HEAP O(1) O(1) O(1) INSERT O(n) O(1) O(1) MINIMUM O(1) O(n) O(n) EXTRACT-MIN O(1) O(n) O(n) UNION O(n1+n2) O(1) O(1)

思考题10-3

a) 因为两个算法中的RANDOM(1,n)产生的序列相同,所以当Compact-List-Search中的 while 经过 t 次迭代,Compact-List-Search' 的返回值与Compact-List-Search相同,且执行for, while 循环的总次数至少为 t

b) 由于Compact-List-Search'要么在 t 次循环中找到元素,要么从位置 i 到关键字 k 之间距离 Xt,期望运行时间 O(t+E[Xt])

c) 距离至少是 r 的概率和距离小于 r 的概率一样,当 t=1 时,距离小于 k 的概率是 nrn,因此:

Pr{Xtr}=(nrn)t=(1rn)t

使用 (C.25)有:
E[Xt]=r=1Pr{Xtr}=r=1nPr{Xtr}r=1n(1rn)t

d)

r=0n1rtn0xtdx=nt+1t+1

e)

E[Xt]=r=1n(1rn)t=r=0n1(rn)t=1ntr=0n1rt1ntnt+1t+1=nt+1

f) 期望运行时间:

O(t+E[Xt])=O(t+n/(t+1))=O(t+n/t)

g) 由于Compact-List-Search最小化运行时间,又 f) 得到的 O(t+n/t),当 t=n/tt=n 时可得到最小值,这使得运行期望是 O(n)

h) 如果有相同的关键字,随机会大量重复判断一些无用的值,使得渐进时间复杂度没有改进。

0 0
原创粉丝点击