[关闭]
@rg070836rg 2015-10-17T09:22:22.000000Z 字数 1711 阅读 1419

算法概论作业2.2

算法概论作业


2.3

(a)

由题解,假定对于某个常数c,有O(n)cn
T(n)=3T(n/2)+O(n)
那么有

T(n)3T(n/2)+cn3[3T(n/4)+cn/2]+cn=9T(n/4)+3cn/2+cn9[3T(n/8)+cn/4]+3cn/2+cn=27T(n/8)+9cn/4+3cn/2+cn

从而,通项公式为:
T(n)3kT(n/2k)+i=0k1(3/2)icn

很明显,k=log2n


(b)

由题解,假定对于某个常数c,有O(1)c
T(n)=T(n1)+O(1)
那么有

T(n)T(n1)+cT(n2)+2cT(n3)+3c

从而,通项公式为:
T(n)T(nk)+kc

很明显,k=n
所以,
T(n)=O(n)


2.4

首先,介绍求解递归式的几个方法:
1 主方法
1.gif-28.5kB
2 替代法

  1. 猜测解的形式。
  2. 通过推导验证。
  3. 解出常数。

3 递归树方法
4 递推法


算法A:

T(n)=5T(n/2)+O(n)
很明显,递归式满足主定理模式,a=5,b=2,f(n)=n
logba=log25,
log25>1,
T(n)=O(nlog25)


算法B:

T(n)=2T(n1)+O(1)
采用递推法,

T(n)2T(n1)+c22T(n2)+2c23T(n3)+3c2nT(1)+nc

所以,T(n)=O(2n)


算法C:

T(n)=9T(n/3)+O(n3)
很明显,递归式满足主定理模式,a=9,b=3,f(n)=n3
logba=log39=2,
n2<n3,
T(n)=O(n3)


当n足够大时,很明显Ta(n)<Tc(n)<Tb(n)
所以算法A最优。


2.5

a)用递推法很快可以求出

T(n)=O(nlog32)

b)用主方法

T(n)=O(nlog45)

c)用主方法
T(n)=O(nlogn)

d)用主方法
T(n)=O(n2logn)

e)用主方法
T(n)=O(n3logn)

f)用替代法,由于前面是log25,
T(n)=O(n3/2logn)

g)用递推法

T(n)=O(n)

h) 用递推法
T(n)=O(nc+1)

i) 用递推法
T(n)=O(cn)

j)用递推法
T(n)=O(2n)

k)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注