算法概论作业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=0k−1(3/2)icn
很明显,
k=log2n
(b)
由题解,假定对于某个常数c,有O(1)≤c
且T(n)=T(n−1)+O(1)
那么有
T(n)≤≤≤…T(n−1)+cT(n−2)+2cT(n−3)+3c
从而,通项公式为:
T(n)≤T(n−k)+kc
很明显,
k=n
所以,
T(n)=O(n)
2.4
首先,介绍求解递归式的几个方法:
1 主方法
2 替代法
猜测解的形式。
通过推导验证。
解出常数。
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(n−1)+O(1)
采用递推法,
T(n)≤≤≤…≤2T(n−1)+c22T(n−2)+2c23T(n−3)+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)