算法导论第3章习题解析

3.1-1:

证明:由题意可知 , f(n),g(n) 渐进非负 , 则存在 n>0 ,使得当 nn 时, f(n)0,g(n)0 同时成立.

h(n)=max(f(n),g(n)) .那么 , h(n) 可以表示为:

h(n)=|f(n)g(n)|+g(n)+f(n)2
此题要求证明 , c1>0,c2>0 , 使得当 nn0 时,
0c1(f(n)+g(n))h(n)c2(f(n)+g(n))
成立.

注意到 :

12(f(n)+g(n))|f(n)g(n)|+g(n)+f(n)2f(n)+g(n)

所以取 c1=12,c2=1,n0=n , 可使得当 nn0 时 ,

0c1(f(n)+g(n))h(n)c2(f(n)+g(n))

即 : max(f(n),g(n))=Θ(f(n)+g(n)) 成立 , 从而得证.

3.1-2:

证明:取 n0=2|a| ,则当 nn0 ,即 n2|a| 时,我们有:

n2an2 ,从而有 n2n+a3n2 .

则, (12)bnb(n+a)b(32)bnb 对于任意 nn0 均成立.

所以,可取 c1=(12)b c2=(32)b n0=2|a| ,当 nn0 时,

c1nb(n+a)bc2nb

成立,即 (n+a)b=Θ(nb) ,得证.

3.1-3:

因为 O(n2) 描述的是算法运行时间的上界,而“至少”描述的是算法的运行时间的下界,因此“算法 A 的运行时间至少是 O(n) ”这一表述是无意义的。

3.1-4:

2n+1=O(2n) 成立,而 22n=O(2n) 不成立

3.1-5:

证明:先证明充分性

f(n)=O(g(n)) 可知:

存在正常数 c n0,使得对所有 nn0 ,有 0f(n)cg(n) .

又由 f(n)=Ω(g(n)) 可知:

存在正常数 c n0 ,使得对所有 nn0 ,有 0cg(n)f(n) .

综上,存在正常数 c1=c c2=c ,使得当 nmax(n0,n0)) 时,下式

cg(n)f(n)cg(n) 成立,即 f(n)=Θ(g(n)) 成立.

再证明必要性:

f(n)=Θ(g(n)) 可知,存在正常数 c1,c2,n0 使得当 nn0 时,下式

0c1g(n)f(n)c2g(n) 成立,即 f(n)=O(g(n)) f(n)=Ω(g(n)) .

综上,得证.

3.1-6:

证明:其最坏情况运行时间为 O(g(n)) ,则 f(n)O(g(n)) ,其最好情况的运行时间为 Ω(g(n)) ,则 f(n)=Ω(g(n)) 由 3.1-5 的证明方法可以证明本题.

3.1-7:

本题可用反证法来证明:

证明:假设集合 A=o(g(n))w(g(n)) 不为空,那么存在 f(n)A ,满足:

对于任意正常量 c10 ,存在常量 n00 ,使得对所有 nn0 ,有 0f(n)cg(n) ;同时对于任意常量 c20 ,存在常量 n00 ,使得对所有 nn0 ,有 0cg(n)f(n) .

那么当 nmax(n0,n0) ,有 c2g(n)<f(n)<c1g(n) ,因为 c1c2 可以是任意正常量,那么当 c1=c2=c (其中 c 为任意常量),满足条件的 f(n) 并不存在,所以集合 A 必为空.

3.1-8:
略.

3.2-1:

证明:由题意可知,f(n) g(n) 单调递增,则取 n1 n2 ,当满足 n1n2 时,有

f(n1)f(n2) g(n1)g(n2) ,则 f(n1)+g(n1)f(n2)+g(n2) f(g(n1))f(g(n2)) .

所以 f(n)+g(n)f(g(n)) 为单调增函数,如果 f(n) g(n) 都为非负函数,那么有:

0f(n1)f(n2) 0g(n1)g(n2) ,从而有 0f(n1)g(n1)f(n2)g(n2) .因此

f(n)g(n) 也是增函数.

3.2-2:

证明:令 n=logbcc=bn ,则 clogba=bnlogba=an=alogbc ,得证.

3.2-3:

证明:(1) 先证明 lg(n!)=Θ(nlgn) .

由斯特林渐进公式,我们有:

n!=2πn(ne)neαn,(112n+1<αn<112n)

对于上式左边的乘数因子 eαn ,当 n 时, eαn1 ,从而 n!2πn(ne)n ,此时,我们有:

lg(n!)lg(2πn(ne)n)
=lg(2πn)+lg(ne)n
=12lg(2π)+12lg(n)+nlg(n)nlg(e)
=Θ(1)+Θ(lg(n))+Θ(nlg(n))Θ(n)
=Θ(nlg(n))

得证.

(2) 证明 n!=o(nn) .

显然,当 n>1 时, n(n1)21<nnnnnn 成立,所以 n!=o(nn) .

(3) 证明 n!=w(2n) .

与证明 (2) 类似,显然当 n4 时, n!>222n2=2n ,所以 n!=w(2n)

3.2-4:

(1). 先来考察 lgn!

如果 f(n) 是多项式有界的,那么存在 c0,k0,n00 ,对所有的 nn0 ,有 f(n)cnk ,此时,我

们有:

lg(f(n))lg(cnk)=O(lgn)

反之亦然.

由 3.2-3, lg(n!)=Θ(nlg(n)) ,又 nnn+12n ,所以 n=Θ(n)

对于 lgn! ,我们有:

lg(lgn!)=Θ(lgnlg(lg(n)))=Θ(lgnlg(lgn))=w(lgn)

从而, lg(lgn)O(lgn) ,所以, lgn! 不是多项式有界的.

(2) 再来考察 lg(lgn)! ,在渐进意义下, lg(lg(lgn)!)lg(n) ,即 lg(lg(lgn)!)=O(lg(n)) ,所以 lg(lgn)! 是多项式有界的.

3.2-5:

lg(n) 表示作用到 n lg 函数的次数,从而使得其结果小于等于0.

lgn=x ,则 lg(lgn)=lg(x) lg(lg(n))=x1 .

在渐进意义下, x1lg(x) ,所以 lg(lg(n)) 的渐进大于 lg(lg(n)) .

3.2-6:

3.2-7:

根据定义:

ϕ=1+52,ϕ^=152

而斐波那契数定义如下:
Fi=01Fi1+Fi2i=0i=1i2

(1)基本情况:

F0=ϕ0ϕ0^5=0
F1=ϕ1ϕ1^5=1

满足
Fi=ϕiϕi^5

(2)归纳:

假设 k2 ,当 i=k,i=k1 时, Fi=ϕiϕi^5 成立,那么当 i=k+1 时,根据斐波那契数定义,有:

Fk+1=Fk+Fk1=ϕkϕk^5+ϕk1ϕk1^5=(ϕk+ϕk)(ϕk^+ϕk1^)5=ϕk1(ϕ+1)ϕk1^(ϕ^+1)5=ϕk+1ϕ2ϕk1^ϕ2^5=ϕk+1ϕk+1^5

即: Fk+1=ϕk+1ϕk+1^5 ,从而得证.

3.2-8:

klnk=Θ(n) 可知,存在常量 c1 c2 n0>0 ,当 nn0 时,有:

0c1nklnkc2n
这里假设 n0e ,从而 lnn>1 ,进一步有:
c1nlnnklnklnnc2nlnn(1).
如果对不等式 c1nklnkc2 的各项同时取对数,则有:
ln(c1n)ln(klnk)ln(c2n)
进一步有:
lnc1+lnnlnk+lnlnklnc2+lnn
如果 k 足够大,lnk+lnlnk<2lnk,从而有:
lnc1+lnn<2lnk
lnc12lnn+12<lnklnn
12k<klnklnn(2).
同时,因为 lnk+lnlnk>lnk ,从而又有:
lnk<lnc2+lnn
lnklnn<lnc2lnn+1
lnklnn<2
klnklnn<2k
(1),(2) 有:
12k<klnklnnc2nlnnk<2c2nlnn(4)
(1),(3) 有:
c1nlnnklnklnn<2kk>c1n2lnn(5)
(4),(5) 有:
c22nlnn<k<2c2nlnn
根据 Θ 记号的定义,
k=Θ(nlnn).

思考题:

3-1:

(a): kd

p(n)=i=0dainii=0d|ai|ni(n0)i=0d|ai|nk(n1)

根据 O 记号定义,取 n0=1,c=di=0|ai|,则当 nn0 ,有 0p(n)cnk

所以 p(n)O(nk) 成立.

(b): kd

cnkcnd,n1

如果有 cnddi=0(aini) ,那么也就有 cnkdi=0(aini) ,从而可根据 O 记号的定义来证明 p(n)=Ω(nk).

cndi=0d(aind)=i=0d1(aini)+adnd
cndi=0d1(aini)+adnd(1)

(1) 中,令 c=ad2 ,并代入 (1) 式,则有:

adnd2i=0d1(aini)+adnd
0i=0d1(aini)+adnd2
i=0d1(aini)adnd2(2)

由于:

i=0d1(aini)=i=0d1(aini)i=0d1(|ai|ni)(i=0d1|ai|)nd1

所以,只要有

(i=0d1|ai|)nd1adnd2(3)

成立,那么 (2) 式也就成立,由 (3)

nd1i=0|ai|ad2

所以,当 c=ad2 nmax{d1i=0|ai|ad2,1} cnkdi=0aini=p(n) ,进一步有 p(n)=Ω(nk)

(c). k=d

(a) 部分可知,取 n0=1,c1=di=0|ai|, 则当 nn0 ,有 0p(n)c1nk .

(b) 部分可知,取 n0=max{1,d1|ai|i=0ad2},c2=ad2 则当 nn0 ,有 c2nkp(n)c2nk.

综上, p(n)=Θ(nk)

(d). k>d .

, c>0, n0(c),使:

p(n)=i=0daini<cnk,nn0. (1)
成立。由于:
p(n)=i=0daini(i=0d|ai|)nd, (n1)
所以只要
(i=0d|ai|)nd<cnk. (2)
成立,那么 (1) 式就成立. 由 (2) 式,有:
ndi=0|ai|ckd
 c>0,
n>n0=max{1,(di=0|ai|c)1kd}
时,就有 p(n)<cnk,, p(n)=o(nk).

(e). k<d .

 c>0  n0>0( c)使

cnk<p(n)=i=0daini
(b)
i=0d(aini)>(ad2nd),n>max{1,d1i=0|ai|ad/2}>cnkadndk2c>cnk,n>(2cad)kd

n0=max{1,d1i=0|ai|ad/2,(2cad)kd}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值