算法导论4.5 Exercises 答案

4.5-1

a

$a=2,b=4,f(n)=1,\log _b a=\dfrac{1}{2}$

因此根据第一个条件,$T(n)=\Theta(n^{\frac{1}{2}})=\Theta(\sqrt{n})$

b

$a=2,b=4,f(n)=\sqrt{n},\log _b a=\dfrac{1}{2}$

因此根据第二个条件,得到$k=0$,最终$T(n)=\Theta(n^{\frac{1}{2}}\lg ^1 n)=\Theta(\sqrt{n}\cdot \lg n)$

c

$a=2,b=4,f(n)=\sqrt{n}\lg^2 n,\log _b a=\dfrac{1}{2}$

因此根据第二个条件,得到$k=2$,最终$T(n)=\Theta(n^{\frac{1}{2}}\lg ^3 n)=\Theta(\sqrt{n}\cdot \lg^3 n)$

d

$a=2,b=4,f(n)=n,\log _b a=\dfrac{1}{2}$

因此根据第三个条件,可以构造出$c=\dfrac{1}{2}$,最终$T(n)=\Theta(n)$

e

$a=2,b=4,f(n)=n^2,\log _b a=\dfrac{1}{2}$

因此根据第三个条件,可以构造出$c=\dfrac{1}{8}$,最终$T(n)=\Theta(n^2)$

4.5-2

新设计的算法的运行时间递推式为$T(n)=aT(n/4)+\Theta(n^2)$。

假设运用主定理的第一个条件,那么其时间复杂度为$\Theta(n^{\log_4 a})$。那么如果要比Strassen算法快,那么就有$\log _4 a<\lg 7$,最终得到$a<49$,即$a=48$。

4.5-3

$a=1,b=2,f(n)=\Theta(1),\log _b a=0$

因此根据第二个条件,得到$k=0$,最终$T(n)=\Theta(n^{0}\lg ^1 n)=\Theta(\lg n)$

4.5-4

化简后,问题变成证明$\forall c<1,\exists n_0>0,\forall n\ge n_0,\lg (n/2)\le c\lg n$都不成立。

即证明$\forall c<1,\exists n_0>0,\forall n\ge n_0,(1-c)\lg n-1>0$均成立。

令$f(n)=(1-c)\lg n-1$。那么$f’(n)=\dfrac{1}{(1-c)\cdot\ln 2\cdot n}$。由于$1-c>0$,因此$f’(n)>0$,故$f(n)$是单调递增的。

那么构造出$n_0=\left\lceil2^{1/(1-c)}\right\rceil+1$,对于$\forall n\ge n_0,f(n)\ge 0$均成立。原结论得证。

为了方便证明,假设$a\ge 1$(因为子问题的个数不能是$0\sim 1$直接的小数。)由于$\epsilon > 0$,因此$\lg n=o(n^{\log _b a+\epsilon})$,故不满足题目中的条件。

4.5-5

可以发现,$0\le\lceil x\rceil - x<1$总成立,因此函数$f(n)=2^{\lceil\lg n\rceil}$总满足$n\le f(n) < 2n$,不难发现有$f(n)="\Theta(n)$。也就是说,存在$a\ge" 1,b>1,\epsilon>0$使得$f(n)=\Omega(n^{\log _b a+\epsilon})$成立,即只需要满足$\log_b a+\epsilon \le 1$即可。由于要求$\epsilon>0$,因此只需要构造出来的$a< b$即可。

为证明$a=2,b=3$时不满足正则条件,那么只需要证明存在无数个充分大的$n,2\cdot 2^{\lceil \lg n/3\rceil}>2^{\lceil \lg n\rceil}$成立即可。

经过代数转换后,最终也就是证明$\lceil \lg n-\lg (2/3) \rceil-\lceil\lg n\rceil>0$即可。

可以发现,对于所有正整数$m$,如果正整数$n\in\left[\dfrac{2^{m+1}}{3},2^m\right)$,那么上面的不等式便成立。这样的$n$有无穷多个,并且充分大。

只要$c$取的足够小(逼近但大于$1$),那么存在无数个充分大的$n,2\cdot 2^{\lceil \lg n/3\rceil}>c\cdot2^{\lceil \lg n\rceil}$成立。

因此,当$a=2,b=3$时,不存在$c<1$使得对于所有充分大的$n,af(n/b)\le cf(n)$都成立。此时不满足该正则条件。而$\epsilon$仅需要满足$\log_b a+\epsilon \le 1$。那么可以取$\epsilon=1-\log_3 2$。