CLRS第十二章思考题

来源:互联网 发布:c语言按钮 编辑:程序博客网 时间:2024/06/11 15:17

思考题12-1

a) 由于与 x 相同关键字的结点 y 会插入到 x 的右边,所以当所有关键字都相同的时候,会形成一条单链表,此时的渐进性能是 O(n2)

b) 对于交替插入,渐进性能是 O(nlgn)

c) 渐进性能 O(n)

d) 最坏情况下就是形成单链表,因此是 O(n2),平均情况是 O(nlgn)

思考题12-2

先对集合 S 插入到基数树中,然后先序遍历即可对 S 实现按字典排序。
正确性:
1) 任何一个结点都是它子孙结点的前缀,由规则 2 知先序遍历是正确的;
2) 一个结点的左子孙在其右子孙之前是因为,左子孙、右子孙和父结点相同的序列之后的下一个字符,左孩子是 0 而右孩子是 1,由规则 1 知是正确的。

时间复杂度:
1) 每个字符串插入所需时间与它的长度成比例,总是字符长度是 n
2) 先序遍历时间复杂度是 O(n)

思考题12-3

a) 由于定义就是 P(T)=xTd(x,T),然后除以总结点数 n 就是平均深度;

b) 对于左子树中的任意结点 x,我们有 d(x,TL)=d(x,T)1,同样,对右子树有 d(x,TR)=d(x,T)1,这样对于一个有 n 个结点的树 T 可得:

P(T)=P(TL)+P(TR)+n1

c) 现在随机构建一个二叉搜索树,先从 n 个元素中随机选一个插入到树中变为根结点,然后剩下的 n1 个结点就会变成根结点的左或右子树,类似于 b) 我们得到:

P(n)=1ni=0n1(P(i)+P(ni1)+n1)

d)

P(n)=1ni=0n1(P(i)+P(ni1)+n1)=1ni=0n1(P(i)+P(ni1))+1ni=0n1(n1)=1ni=0n1P(i)+1nj=0n1P(j)+n1=2nk=0n1P(k)+Θ(n)

e) 用替换法来证明,首先猜测 P(n)anlgn+b

P(n)=2nk=1n1P(k)+Θ(n)2nk=1n1(aklgk+b)+Θ(n)=2ank=1n1klgk+2bn(n1)+Θ(n)

下面证明 k=1n1klgk12n2lgn18n2
k=1n1klgk=k=12n1klgk+k=2nn1klgkk=12n1klgn2+k=2nn1klgn=k=12n1klg(n1)+k=2nn1klgn=lgnk=1n1kk=12n1klgnn(n1)2(n/21)n2212n2lgn18n2n2

利用上式得:
P(n)2an(12n2lgn18n2)+2bn(n1)+Θ(n)anlgna4n+2b+Θ(n)=anlgn+b+(Θ(n)+ba4n)anlgn+b

f) 注意到一旦一个元素 x 被作为一颗树的根,其他的元素都要和 x 比较然后插入到树中。对于快排,一旦选定了主元,其他元素都要和主元进行比较。所以二叉搜索树中的非叶结点都对应着快排中的主元。

思考题12-4

此题略。

0 0
原创粉丝点击