【算法导论】第4章 分而治之 (2)


Introduction to Algorithms - Third Edition
Part I. Foundations
Chapter 4. Divide-and-Conquer


4.3 代换法求解递归式

两个步骤:

  1. 猜测解的形式。
  2. 用数学归纳法求出常数,证明解是有效的。
做一个好的猜测

① 将在章节 4.4 中介绍的递归树,可以用来帮助猜测。
② 如果递归式与以前见过的类似,那么可猜测该递归式有相似的解。
③ 先证明递归式的较松的上下界,然后再缩小不确定性区间。

一些细微问题

有时我们或许能猜出递归式解的渐近界,但用数学归纳法证明失败。通常,问题在于归纳假设不够强,无法证明其确切的界。遇到这种情况时,可以减去一个低阶项来修改所猜测的界,以使证明顺利进行。
考虑递归式: T ( n ) = T ( ⌊ n / 2 ⌋ ) + T ( ⌈ n / 2 ⌉ ) + 1 T(n) = T(\lfloor n/2 \rfloor) + T( \lceil n/2 \rceil) + 1 T(n)=T(n/2)+T(n/2)+1
猜测它的解为 T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n),即要证明对适当选择的常数 c c c,有 T ( n ) ≤ c n T(n) \le cn T(n)cn
用猜测的界对递归式作替换,得 T ( n ) ≤ c ⌊ n / 2 ⌋ + c ⌈ n / 2 ⌉ + 1 ≤ c n + 1 T(n) \le c\lfloor n/2 \rfloor + c\lceil n/2 \rceil + 1 \le cn +1 T(n)cn/2+cn/2+1cn+1
由此引不出 T ( n ) ≤ c n T(n) \le cn T(n)cn,无论 c c c 选择何值。
为了证明 T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n) 是正确的,需要作一个更强的归纳假设: T ( n ) ≤ c n − d T(n) \le cn - d T(n)cnd,其中 d d d 是一个常数。
T ( n ) ≤ ( c ⌊ n / 2 ⌋ − d ) + ( c ⌈ n / 2 ⌉ − d ) + 1 ≤ c n − 2 d + 1 ≤ c n − d T(n) \le (c\lfloor n/2 \rfloor - d) + (c\lceil n/2 \rceil - d) + 1 \le cn - 2d +1 \le cn -d T(n)cn/2d)+(cn/2d)+1cn2d+1cnd,只要 d ≥ 1 d \ge 1 d1

避免陷阱

使用渐近符号很容易出错。例,递归式 T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n T(n) = 2T(\lfloor n/2 \rfloor) + n T(n)=2T(n/2)+n 中,可能错误地“证明” T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)
假设 T ( n ) ≤ c n T(n) \le cn T(n)cn,证明 T ( n ) ≤ 2 ( c ⌊ n / 2 ⌋ ) + n ≤ c n + n = O ( n ) T(n) \le 2(c\lfloor n/2 \rfloor) + n \le cn + n = O(n) T(n)2(cn/2)+ncn+n=O(n) ⟸ \Longleftarrow 错!!
因为 c c c 是一个常数。
错误在于没有证明归纳假设的准确形式,即 T ( n ) ≤ c n T(n) \le cn T(n)cn

改变变量

有时,对一个未知的递归式作一些代数变换,可得到一个与我们之前见过类似的递归式。
例,考虑递归式 T ( n ) = 2 T ( ⌊ n ⌋ ) + lg ⁡ n T(n) = 2T(\lfloor \sqrt n \rfloor) + \lg n T(n)=2T(n )+lgn
通过改变变量,简化这个递归式。为方便起见,不考虑值的截取整数问题。
m = lg ⁡ n m = \lg n m=lgn,有 T ( 2 m ) = 2 T ( n m / 2 ) + m T(2^m) = 2T( n^{m/2} ) + m T(2m)=2T(nm/2)+m
S ( m ) = T ( 2 m ) S(m) = T(2^m) S(m)=T(2m),得到新的递归式 S ( m ) = 2 S ( m / 2 ) + m S(m) = 2S(m/2) + m S(m)=2S(m/2)+m
新递归式的解为 S ( m ) = O ( m lg ⁡ m ) S(m) = O(m \lg m) S(m)=O(mlgm)。将 S ( m ) S(m) S(m) 代回 T ( n ) T(n) T(n),有
T ( n ) = T ( 2 m ) = S ( m ) = O ( m lg ⁡ m ) = O ( lg ⁡ n lg ⁡ lg ⁡ n ) T(n) = T(2^m) = S(m) = O(m \lg m) = O(\lg n \lg\lg n) T(n)=T(2m)=S(m)=O(mlgm)=O(lgnlglgn)

练习

4.3-1 证明 T ( n ) = T ( n − 1 ) + n T(n) = T(n-1) + n T(n)=T(n1)+n 的解是 O ( n 2 ) O(n^2) O(n2)
证: 即证明存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n 2 T(n) \le cn^2 T(n)cn2
替换递归式,得 T ( n ) ≤ c ( n − 1 ) 2 + n = c n 2 + n − 2 c n + c ≤ c n 2 T(n) \le c(n-1)^2 + n = cn^2 + n -2cn + c \le cn^2 T(n)c(n1)2+n=cn2+n2cn+ccn2
存在 n 0 ≥ 1 n_0\ge 1 n01 c ≥ n 2 n − 1 c \ge \frac{n}{2n-1} c2n1n,上式最后一步成立,即证。

4.3-2 证明 T ( n ) = T ( ⌈ n / 2 ⌉ ) + 1 T(n) = T(\lceil n/2 \rceil) + 1 T(n)=T(n/2)+1 的解是 O ( lg ⁡ n ) O(\lg n) O(lgn)
证: 即证明存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c lg ⁡ n T(n) \le c\lg n T(n)clgn。替换递归式,得
T ( n ) ≤ c lg ⁡ ( ⌈ n / 2 ⌉ ) + 1 ≤ c lg ⁡ ( ( n + 1 ) / 2 ) + 1 = c lg ⁡ ( n + 1 ) − c + 1 ≤ c lg ⁡ n T(n) \le c\lg(\lceil n/2 \rceil) + 1 \le c\lg((n+1)/2)+1 = c\lg(n+1) -c + 1 \le c\lg n T(n)clg(n/2)+1clg((n+1)/2)+1=clg(n+1)c+1clgn。  (1)
n ≥ 4 n\ge4 n4 时, lg ⁡ ( n + 1 ) − lg ⁡ n = lg ⁡ ( n + 1 n ) = lg ⁡ ( 1 + 1 / n ) ≤ lg ⁡ ( 5 / 4 ) < 0.33 < 1 / 2 \lg(n+1) - \lg n = \lg(\frac{n+1}{n}) = \lg(1+1/n) \le \lg(5/4) < 0.33 < 1/2 lg(n+1)lgn=lg(nn+1)=lg(1+1/n)lg(5/4)<0.33<1/2
此时, c lg ⁡ ( n + 1 ) − c + 1 ≤ c ( lg ⁡ n + 1 / 2 ) − c + 1 = c lg ⁡ n + 1 − c / 2 c\lg(n+1) -c + 1 \le c(\lg n + 1/2) - c +1 = c\lg n + 1 - c/2 clg(n+1)c+1c(lgn+1/2)c+1=clgn+1c/2
所以,存在 n 0 ≥ 4 n_0\ge 4 n04 c ≥ 2 c \ge 2 c2,(1) 式最后一步成立,即证。

4.3-3 我们知道 T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n T(n) = 2T(\lfloor n/2 \rfloor) + n T(n)=2T(n/2)+n 的解是 O ( n lg ⁡ n ) O(n\lg n) O(nlgn)。证明这个给递归式的解也是 Ω ( n lg ⁡ n ) \Omega(n \lg n) Ω(nlgn) 。得出结论:该递归式的解为 Θ ( n lg ⁡ n ) \Theta(n \lg n) Θ(nlgn)
证: 即证明存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≥ c n lg ⁡ n T(n) \ge cn \lg n T(n)cnlgn。替换递归式,得
T ( n ) ≥ 2 ( c ⌊ n / 2 ⌋ lg ⁡ ( ⌊ n / 2 ⌋ ) ) + n ≥ c ( n − 1 ) lg ⁡ ( ( n − 1 ) / 2 ) + n = c ( n − 1 ) lg ⁡ ( n − 1 ) − c ( n − 1 ) + n = c n lg ⁡ ( n − 1 ) − c lg ⁡ ( n − 1 ) − c n + n + c ≥ c n lg ⁡ ( n − 1 ) − c lg ⁡ n − c n + n + c ≥ c n lg ⁡ n T(n) \ge 2(c\lfloor n/2 \rfloor \lg (\lfloor n/2 \rfloor)) + n \ge c(n-1) \lg ((n-1)/2) +n \\= c(n-1)\lg (n-1) -c(n-1) + n =cn\lg(n-1) -c\lg(n-1) -cn +n+c \\\ge cn\lg(n-1) -c\lg n-cn +n+c \ge cn\lg n T(n)2(cn/2lg(n/2))+nc(n1)lg((n1)/2)+n=c(n1)lg(n1)c(n1)+n=cnlg(n1)clg(n1)cn+n+ccnlg(n1)clgncn+n+ccnlgn
n ≥ 2 n\ge2 n2 时, lg ⁡ ( n − 1 ) − lg ⁡ n = lg ⁡ ( n − 1 n ) = lg ⁡ ( 1 − 1 / n ) ≥ lg ⁡ ( 1 / 2 ) = − 1 \lg(n-1) - \lg n = \lg(\frac{n-1}{n}) = \lg(1-1/n) \ge \lg(1/2) = -1 lg(n1)lgn=lg(nn1)=lg(11/n)lg(1/2)=1
此时, c n lg ⁡ ( n − 1 ) − c lg ⁡ n − c n + n + c ≥ c n lg ⁡ n − c lg ⁡ n − 2 c n + n + c cn\lg(n-1) -c\lg n -cn +n+c \ge cn\lg n -c\lg n -2cn+n+c cnlg(n1)clgncn+n+ccnlgnclgn2cn+n+c
存在 n 0 ≥ 2 n_0\ge 2 n02 0 < c ≤ n 2 n + lg ⁡ n − 1 0 <c \le \frac{n}{2n+\lg n-1} 0<c2n+lgn1n,上式最后一步成立,所以 T ( n ) = Ω ( n lg ⁡ n ) T(n) = \Omega(n\lg n) T(n)=Ω(nlgn),即证。

4.3-4 证明:通过作不同的归纳假设,对递归式(4.19)我们可以克服在证明边界条件 T ( 1 ) = 1 T(1) = 1 T(1)=1 时的困难,而无需调整归纳证明中的边界情况。
证: 递归式 (4.19): T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n T(n) = 2T(\lfloor n/2 \rfloor) + n T(n)=2T(n/2)+n。其解为 T ( n ) = O ( n lg ⁡ n ) T(n) = O(n \lg n) T(n)=O(nlgn)
归纳假设:存在常数 c c c,当 n ≥ 1 n \ge 1 n1 时,有 T ( n ) ≤ c n lg ⁡ ( n + 1 ) T(n) \le cn \lg (n+1) T(n)cnlg(n+1)
替换递归式,得 T ( n ) ≤ 2 ( c ⌊ n / 2 ⌋ lg ⁡ ( ⌊ n / 2 ⌋ + 1 ) ) + n ≤ c n lg ⁡ ( ( n + 2 ) / 2 ) + n = c n lg ⁡ ( n + 2 ) − c n + n ≤ c n lg ⁡ ( n + 2 ) ≤ c n lg ⁡ ( n + 1 ) T(n) \le 2(c\lfloor n/2 \rfloor \lg (\lfloor n/2 \rfloor+1)) + n \le cn \lg ((n+2)/2) +n = cn\lg (n+2) -cn + n \le cn\lg (n+2) \le cn \lg(n+1) T(n)2(cn/2lg(n/2+1))+ncnlg((n+2)/2)+n=cnlg(n+2)cn+ncnlg(n+2)cnlg(n+1)
c ≥ 1 c \ge 1 c1 时,上式成立,所以 T ( n ) = O ( n lg ⁡ ( n + 1 ) ) T(n) = O(n\lg(n+1)) T(n)=O(nlg(n+1))
h ( n ) = n lg ⁡ ( n + 1 ) h(n) = n\lg(n+1) h(n)=nlg(n+1),则 h ( 1 ) = 1 ≥ T ( 1 ) h(1) = 1 \ge T(1) h(1)=1T(1)。边界条件满足归纳假设。
因为 n lg ⁡ ( n + 1 ) = Θ ( n lg ⁡ n ) n\lg(n+1) = \Theta(n\lg n) nlg(n+1)=Θ(nlgn),根据渐近符号的传递性,得 T ( n ) = O ( n lg ⁡ n ) T(n) = O(n\lg n) T(n)=O(nlgn)

4.3-5 证明合并排序算法的“准确”递归式 (4.3) 的解为 Θ ( n lg ⁡ n ) \Theta(n\lg n) Θ(nlgn)
证: 递归式 (4.3) 为:
T ( n ) = { Θ ( 1 ) if  n = 1 , T ( ⌈ n / 2 ⌉ ) + T ( ⌊ n / 2 ⌋ ) + Θ ( n ) if  n > 1. T(n) = \begin{cases} \Theta(1) &\text{if } n=1, \\ T(\lceil n/2 \rceil) + T(\lfloor n/2 \rfloor) + \Theta(n) &\text{if } n >1. \end{cases} T(n)={Θ(1)T(n/2)+T(n/2)+Θ(n)if n=1,if n>1.
f ( n ) = Θ ( n ) f(n) = \Theta(n) f(n)=Θ(n),则存在正常数 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,有 c 1 n ≤ f ( n ) ≤ c 2 n c_1n \le f(n) \le c_2n c1nf(n)c2n

先证 T ( n ) = Ω ( n lg ⁡ n ) T(n) = \Omega(n\lg n) T(n)=Ω(nlgn),即证存在常数 c c c n 1 n_1 n1,当 n > n 1 n>n_1 n>n1 时,有 T ( n ) ≥ c n lg ⁡ n T(n) \ge cn\lg n T(n)cnlgn
T ( n ) = T ( ⌈ n / 2 ⌉ ) + T ( ⌊ n / 2 ⌋ ) + f ( n ) ≥ 2 T ( ⌊ n / 2 ⌋ ) + f ( n ) ≥ 2 ( c ⌊ n / 2 ⌋ lg ⁡ ( ⌊ n / 2 ⌋ ) ) + f ( n ) ≥ c n lg ⁡ ( n / 2 ) + f ( n ) = c n lg ⁡ n − c n + f ( n ) ≥ c n lg ⁡ n T(n) = T(\lceil n/2 \rceil) + T(\lfloor n/2 \rfloor) + f(n) \ge 2T(\lfloor n/2 \rfloor) + f(n) \ge 2(c\lfloor n/2 \rfloor \lg (\lfloor n/2 \rfloor)) + f(n) \\ \ge cn\lg(n/2) + f(n) = cn\lg n - cn + f(n) \ge cn \lg n T(n)=T(n/2)+T(n/2)+f(n)2T(n/2)+f(n)2(cn/2lg(n/2))+f(n)cnlg(n/2)+f(n)=cnlgncn+f(n)cnlgn
存在常数 c = c 1 c = c_1 c=c1 n 1 > n 0 n_1 > n_0 n1>n0,上式最后一步成立,即证。

再证 T ( n ) = O ( n lg ⁡ n ) T(n) = O(n\lg n) T(n)=O(nlgn),即证存在常数 c c c n 2 n_2 n2,当 n > n 2 n>n_2 n>n2 时,有 T ( n ) ≤ c n lg ⁡ n T(n) \le cn\lg n T(n)cnlgn
T ( n ) = T ( ⌈ n / 2 ⌉ ) + T ( ⌊ n / 2 ⌋ ) + f ( n ) ≤ 2 T ( ⌈ n / 2 ⌉ ) + f ( n ) ≤ 2 ( c ⌈ n / 2 ⌉ lg ⁡ ( ⌈ n / 2 ⌉ ) ) + f ( n ) ≤ c ( n + 1 ) lg ⁡ ( ( n + 1 ) / 2 ) + c 2 n = c n lg ⁡ ( n + 1 ) + c lg ⁡ ( n + 1 ) − c ( n + 1 ) + c 2 n ≤ c n lg ⁡ n T(n) = T(\lceil n/2 \rceil) + T(\lfloor n/2 \rfloor) + f(n) \le 2T(\lceil n/2 \rceil) + f(n) \le 2(c\lceil n/2 \rceil \lg (\lceil n/2 \rceil)) + f(n) \\ \le c(n+1)\lg((n+1)/2) +c_2n = cn\lg(n+1) + c\lg(n+1) - c(n+1) + c_2n \\ \le cn\lg n T(n)=T(n/2)+T(n/2)+f(n)2T(n/2)+f(n)2(cn/2lg(n/2))+f(n)c(n+1)lg((n+1)/2)+c2n=cnlg(n+1)+clg(n+1)c(n+1)+c2ncnlgn。    (2)
n ≥ 4 n\ge4 n4 时, lg ⁡ ( n + 1 ) ≤ lg ⁡ n + 1 \lg(n+1) \le \lg n+1 lg(n+1)lgn+1
此时, c n lg ⁡ ( n + 1 ) + c lg ⁡ ( n + 1 ) − c ( n + 1 ) + c 2 n ≤ c n lg ⁡ n + c lg ⁡ ( n + 1 ) − c + c 2 n cn\lg(n+1) + c\lg(n+1) - c(n+1) + c_2n \le cn\lg n +c\lg(n+1)-c+c_2n cnlg(n+1)+clg(n+1)c(n+1)+c2ncnlgn+clg(n+1)c+c2n
存在 n 2 ≥ max ⁡ ( n 0 , 4 ) n_2 \ge \max(n_0,4) n2max(n0,4) c ≥ c 2 n 1 − lg ⁡ ( n + 1 ) c \ge \frac{c_2n}{1-\lg(n+1)} c1lg(n+1)c2n,(2) 式最后一步成立,即证。

综上,所求解为 T ( n ) = Θ ( n lg ⁡ n ) T(n) = \Theta(n\lg n) T(n)=Θ(nlgn)

4.3-6 证明 T ( n ) = 2 T ( ⌊ n / 2 ⌋ + 17 ) + n T(n) = 2T(\lfloor n/2 \rfloor + 17) + n T(n)=2T(n/2+17)+n 的解是 O ( n lg ⁡ n ) O(n\lg n) O(nlgn)
证: 即证明存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n lg ⁡ n T(n) \le cn\lg n T(n)cnlgn。替换递归式,得
T ( n ) ≤ 2 c ( ⌊ n / 2 ⌋ + 17 ) lg ⁡ ( ⌊ n / 2 ⌋ + 17 ) + n ≤ ( c n + 34 c ) lg ⁡ ( n / 2 + 17 ) + n = c n lg ⁡ ( n + 34 ) + 34 c lg ⁡ ( n + 34 ) − c n − 34 c + n T(n) \le 2c(\lfloor n/2 \rfloor+17)\lg(\lfloor n/2 \rfloor+17) + n \le (cn + 34c)\lg(n/2+17) + n\\ =cn\lg(n+34) +34c\lg(n+34) - cn-34c+n T(n)2c(n/2+17)lg(n/2+17)+n(cn+34c)lg(n/2+17)+n=cnlg(n+34)+34clg(n+34)cn34c+n
n ≥ 34 n \ge 34 n34 时, lg ⁡ ( n + 34 ) − lg ⁡ n = lg ⁡ n + 34 n = lg ⁡ ( 1 + 34 n ) ≤ 1 \lg(n+34) - \lg n = \lg\frac{n+34}{n} = \lg(1+\frac{34}{n}) \le 1 lg(n+34)lgn=lgnn+34=lg(1+n34)1
此时, c n lg ⁡ ( n + 34 ) + 34 c lg ⁡ ( n + 34 ) − c n − 34 c + n ≤ c n ( lg ⁡ n + 1 ) + 34 c lg ⁡ ( n + 34 ) − c n − 34 c + n = c n lg ⁡ n + 34 c lg ⁡ ( n + 34 ) − 34 c + n cn\lg(n+34) +34c\lg(n+34) - cn-34c+n \\ \le cn(\lg n+1) + 34c\lg(n+34) - cn-34c+n = cn\lg n + 34c\lg(n+34) -34c + n cnlg(n+34)+34clg(n+34)cn34c+ncn(lgn+1)+34clg(n+34)cn34c+n=cnlgn+34clg(n+34)34c+n
存在 n 0 ≥ 1 n_0\ge 1 n01 c ≥ n 34 ( 1 − lg ⁡ ( n + 34 ) ) c \ge \frac{n}{34(1-\lg(n+34))} c34(1lg(n+34))n,上式最后一步成立,即证。

4.3-7 使用章节 4.5 的主方法,可以证明递归式 T ( n ) = 4 T ( n / 3 ) + n T(n) = 4T(n/3) + n T(n)=4T(n/3)+n 的解是 T ( n ) = Θ ( n log ⁡ 3 4 ) T(n) = \Theta ( n ^ { \log_3 {4} }) T(n)=Θ(nlog34)。证明假设 T ( n ) ≤ c n log ⁡ 3 4 T(n) \le cn^{\log_3 {4}} T(n)cnlog34 的替换证明是不成立的。再说明如何减去一个低阶项使替换证明成立。
证: 1.27 > log ⁡ 3 4 > 1.26 > 1 1.27 > \log_3 {4} > 1.26 > 1 1.27>log34>1.26>1
归纳假设:对任意常数 c c c,存在常数 n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≥ c n log ⁡ 3 4 T(n) \ge cn^{\log_3 4} T(n)cnlog34。替换递归式,得
T ( n ) ≥ 4 c ( n / 3 ) log ⁡ 3 4 + n = 4 c n log ⁡ 3 4 ⋅ ( 1 / 3 ) log ⁡ 3 4 + n = c n log ⁡ 3 4 + n ≥ c n log ⁡ 3 4 T(n) \ge 4c(n/3)^{\log_3 4} + n = 4cn^{\log_3 4} \cdot (1/3)^{\log_3 4} + n= cn^{\log_3 4} + n \ge cn^{\log_3 4} T(n)4c(n/3)log34+n=4cnlog34(1/3)log34+n=cnlog34+ncnlog34
所以,假设 T ( n ) ≤ c n log ⁡ 3 4 T(n) \le cn^{\log_3 {4}} T(n)cnlog34 的替换证明是不成立的。

归纳假设:存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n log ⁡ 3 4 − d n − 1 T(n) \le cn^{\log_3 4} - dn^{-1} T(n)cnlog34dn1,其中常数 d > 0 d>0 d>0
替换递归式,得
T ( n ) ≤ 4 c ( n / 3 ) log ⁡ 3 4 − d ( n / 3 ) − 1 + n = c n log ⁡ 3 4 − d ( n / 3 ) − 1 + n ≤ c n log ⁡ 3 4 − d n − 1 T(n) \le 4c(n/3)^{\log_3 4} -d(n/3)^{-1} + n = cn^{\log_3 4} -d(n/3)^{-1} + n \le cn^{\log_3 4} - dn^{-1} T(n)4c(n/3)log34d(n/3)1+n=cnlog34d(n/3)1+ncnlog34dn1
d ≥ n 2 / 2 d \ge n^2 / 2 dn2/2 时,上式最后一步成立,即证。

4.3-8 使用章节 4.5 的主方法,可以证明递归式 T ( n ) = 4 T ( n / 2 ) + n 2 T(n) = 4T(n/2) + n^2 T(n)=4T(n/2)+n2 的解是 T ( n ) = Θ ( n 2 ) T(n) = \Theta ( n^2) T(n)=Θ(n2)。证明假设 T ( n ) ≤ c n 2 T(n) \le cn^2 T(n)cn2 的替换证明是不成立的。再说明如何减去一个低阶项使替换证明成立。
证: 归纳假设:对任意常数 c c c,存在常数 n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≥ c n 2 T(n) \ge cn^2 T(n)cn2。替换递归式,得
T ( n ) ≥ 4 c ( n / 2 ) 2 + n 2 = c n 2 + n 2 ≥ c n 2 T(n) \ge 4c(n/2)^2 + n^2 = cn^2 + n^2 \ge cn^2 T(n)4c(n/2)2+n2=cn2+n2cn2
所以,假设 T ( n ) ≤ c n 2 T(n) \le cn^2 T(n)cn2 的替换证明是不成立的。

归纳假设:存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n 2 − d n − 1 T(n) \le cn^2 - dn^{-1} T(n)cn2dn1,其中常数 d > 0 d>0 d>0
替换递归式,得
T ( n ) ≤ 4 c ( n / 2 ) 2 − d ( n / 2 ) − 1 + n 2 = c n 2 − d ( n / 2 ) − 1 + n 2 ≤ c n 2 − d n − 1 T(n) \le 4c(n/2)^2 -d(n/2)^{-1} + n^2 = cn^2 -d(n/2)^{-1} + n^2 \le cn^2 - dn^{-1} T(n)4c(n/2)2d(n/2)1+n2=cn2d(n/2)1+n2cn2dn1
d ≥ n 3 d \ge n^3 dn3 时,上式最后一步成立,即证。

4.3-9 通过改变变量的方法求解递归式 T ( n ) = 3 T ( n ) + log ⁡ n T(n) = 3T(\sqrt{n}) + \log n T(n)=3T(n )+logn。得到的解应当是渐近紧确的。不必担心值是否为整数。
解: m = log ⁡ n m = \log n m=logn,则有 T ( 1 0 m ) = 3 T ( 1 0 m / 2 ) + m T(10^m) = 3T(10^{m/2}) + m T(10m)=3T(10m/2)+m
S ( m ) = T ( 1 0 m ) S(m) = T(10^m) S(m)=T(10m),得到新递归式 S ( m ) = 3 S ( m / 2 ) + m S(m) = 3S(m/2) + m S(m)=3S(m/2)+m
新递归式的解为 S ( m ) = Θ ( m lg ⁡ 3 ) S(m) = \Theta(m^{\lg 3}) S(m)=Θ(mlg3)。(待确定)
S ( m ) S(m) S(m) 代回 T ( n ) T(n) T(n),有 T ( n ) = T ( 1 0 m ) = S ( m ) = Θ ( m lg ⁡ 3 ) = Θ ( ( log ⁡ n ) lg ⁡ 3 ) T(n) = T(10^m) = S(m) = \Theta(m^{\lg 3}) = \Theta((\log n)^{\lg 3}) T(n)=T(10m)=S(m)=Θ(mlg3)=Θ((logn)lg3)


4.4 递归树方法求解递归式

在递归树中,每个结点表示递归函数调用集合中一个子问题的代价。
递归树适合来生成一个好的猜测,然后可以通过替换方法来验证。但是,如果在绘制递归树和计算代价时非常仔细,可以使用递归树作为递归解的直接证明。

练习

4.4-1 使用递归树来确定递归式 T ( n ) = 3 T ( ⌊ n / 2 ⌋ ) + n T(n) = 3T(\lfloor n/2 \rfloor) + n T(n)=3T(n/2)+n 的一个好的渐近上界。用代换法证明你的答案。
解: 下面递归树有 lg ⁡ n + 1 \lg n + 1 lgn+1 层。最后一层的代价为 Θ ( 3 lg ⁡ n ) = Θ ( n lg ⁡ 3 ) \Theta(3^{\lg n}) = \Theta(n^{\lg3}) Θ(3lgn)=Θ(nlg3)
递归树
把所有层次的代价加起来,得到整个树的代价:
T ( n ) = n + 3 2 n + ( 3 2 ) 2 n + ⋯ + ( 3 2 ) lg ⁡ n − 1 n + Θ ( n lg ⁡ 3 ) = ∑ i = 0 lg ⁡ n − 1 ( 3 2 ) i n + Θ ( n lg ⁡ 3 ) = ( 3 / 2 ) lg ⁡ n − 1 ( 3 / 2 ) − 1 n + Θ ( n lg ⁡ 3 ) = 2 ⋅ n lg ⁡ 3 − 2 n + Θ ( n lg ⁡ 3 ) = Θ ( n lg ⁡ 3 ) T(n) = n + \frac{3}{2}n + (\frac{3}{2})^2n + \dots + (\frac{3}{2})^{\lg n - 1}n + \Theta(n^{\lg3}) = \sum_{i=0}^{\lg n - 1} (\frac{3}{2})^i n + \Theta(n^{\lg3}) \\ =\frac{(3/2)^{\lg n} - 1}{(3/2) -1}n + \Theta(n^{\lg3}) =2\cdot n^{\lg 3} - 2n + \Theta(n^{\lg3}) \\ =\Theta(n^{\lg 3}) T(n)=n+23n+(23)2n++(23)lgn1n+Θ(nlg3)=i=0lgn1(23)in+Θ(nlg3)=(3/2)1(3/2)lgn1n+Θ(nlg3)=2nlg32n+Θ(nlg3)=Θ(nlg3)
猜测: T ( n ) = O ( n lg ⁡ 3 ) T(n) = O(n^{\lg3}) T(n)=O(nlg3)
证明:假设存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n lg ⁡ 3 − d n − 1 T(n) \le cn^{\lg 3} - dn^{-1} T(n)cnlg3dn1,其中,常数 d > 0 d>0 d>0
替换递归式,得
T ( n ) ≤ 3 c ( ⌊ n / 2 ⌋ ) lg ⁡ 3 − d ( ⌊ n / 2 ⌋ ) − 1 + n ≤ 3 c ( n / 2 ) lg ⁡ 3 − d ( n / 2 ) − 1 + n = c n lg ⁡ 3 − 2 d n − 1 + n ≤ c n lg ⁡ 3 − d n − 1 T(n) \le 3c(\lfloor n/2 \rfloor)^{\lg3} -d(\lfloor n/2 \rfloor)^{-1} + n \le 3c(n/2)^{\lg3} - d(n/2)^{-1} + n \\ = cn^{\lg3} - 2dn^{-1} + n \le cn^{\lg 3} - dn^{-1} T(n)3c(n/2)lg3d(n/2)1+n3c(n/2)lg3d(n/2)1+n=cnlg32dn1+ncnlg3dn1
d ≥ n 2 d \ge n^2 dn2 时,上式最后一步成立。即证。

4.4-2 使用递归树来确定递归式 T ( n ) = T ( n / 2 ) + n 2 T(n) = T(n/2) + n^2 T(n)=T(n/2)+n2 的一个好的渐近上界。用代换法证明你的答案。
解: 递归树有 lg ⁡ n + 1 \lg n + 1 lgn+1 层。每层代价如下:
第 0 层: n 2 n^2 n2
第 1 层: ( n 2 ) 2 = 1 4 n 2 (\frac{n}{2})^2 = \frac{1}{4}n^2 (2n)2=41n2
第 2 层: 1 4 ( n 2 ) 2 = ( 1 4 ) 2 n \frac{1}{4}(\frac{n}{2})^2 = (\frac{1}{4})^2n 41(2n)2=(41)2n
……
lg ⁡ n \lg n lgn 层: T ( 1 ) T(1) T(1)
把所有层次的代价加起来,得到整个树的代价:
T ( n ) = n 2 + 1 4 n 2 + ( 1 4 ) 2 n 2 + ⋯ + ( 1 4 ) lg ⁡ n − 1 n 2 + Θ ( 1 ) = ∑ i = 0 lg ⁡ n − 1 ( 1 4 ) i n 2 + Θ ( 1 ) = ( 1 / 4 ) lg ⁡ n − 1 ( 1 / 4 ) − 1 n 2 + Θ ( 1 ) = 4 3 ( 1 − 1 / n 2 ) n 2 + Θ ( 1 ) = 4 3 n 2 − 4 3 + Θ ( 1 ) = Θ ( n 2 ) T(n) = n^2 + \frac{1}{4}n^2 + (\frac{1}{4})^2n^2 + \dots + (\frac{1}{4})^{\lg n - 1}n^2 + \Theta(1) = \sum_{i=0}^{\lg n - 1} (\frac{1}{4})^i n^2 + \Theta(1) \\ =\frac{(1/4)^{\lg n} - 1}{(1/4) -1} n^2 + \Theta(1) = \frac{4}{3}(1-1/n^2)n^2 + \Theta(1) = \frac{4}{3}n^2 - \frac{4}{3} + \Theta(1) \\ =\Theta(n^2) T(n)=n2+41n2+(41)2n2++(41)lgn1n2+Θ(1)=i=0lgn1(41)in2+Θ(1)=(1/4)1(1/4)lgn1n2+Θ(1)=34(11/n2)n2+Θ(1)=34n234+Θ(1)=Θ(n2)
猜测: T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)
证明:假设存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n 2 T(n) \le cn^2 T(n)cn2。替换递归式,得
T ( n ) ≤ c ( n / 2 ) 2 + n 2 = 1 4 c n 2 + n 2 ≤ c n 2 T(n) \le c(n/2)^2 + n^2 = \frac{1}{4}cn^2 + n^2 \le cn^2 T(n)c(n/2)2+n2=41cn2+n2cn2
c ≥ 4 / 3 c \ge 4/3 c4/3 时,上式最后一步成立。即证。

4.4-3 使用递归树来确定递归式 T ( n ) = 4 T ( n / 2 + 2 ) + n T(n) = 4T(n/2+2) + n T(n)=4T(n/2+2)+n 的一个好的渐近上界。用代换法证明你的答案。
解: 每层代价如下:
第 0 层: n n n
第 1 层: 4 ( n / 2 + 2 ) = 2 n + 8 = 2 n + 8 × 1 4(n/2+2) = 2n + 8 = 2n + 8 \times 1 4(n/2+2)=2n+8=2n+8×1
第 2 层: 16 ( ( n / 2 + 2 ) / 2 + 2 ) = 16 ( n / 4 + 3 ) = 4 n + 48 = 4 n + 16 × 3 16((n/2+2)/2+2) = 16(n/4 + 3) = 4n+48 = 4n + 16 \times 3 16((n/2+2)/2+2)=16(n/4+3)=4n+48=4n+16×3
第 3 层: 64 ( ( n / 4 + 3 ) / 2 + 2 ) = 64 ( n / 8 + 7 / 2 ) = 8 n + 224 = 8 n + 32 × 7 64((n/4+3)/2 + 2) = 64(n/8 + 7/2) = 8n + 224 = 8n + 32 \times 7 64((n/4+3)/2+2)=64(n/8+7/2)=8n+224=8n+32×7
第 4 层: 256 ( ( n / 8 + 7 / 2 ) / 2 + 2 ) = 256 ( n / 16 + 15 / 4 ) = 16 n + 960 = 16 n + 64 × 15 256((n/8+7/2)/2+2) = 256(n/16 + 15/4) = 16n + 960 = 16n + 64 \times 15 256((n/8+7/2)/2+2)=256(n/16+15/4)=16n+960=16n+64×15
……
i i i 层:每个结点的代价为 n / 2 i + 2 i − 1 2 i − 2 n/2^i+ \frac{2^i-1}{2^{i-2}} n/2i+2i22i1,有 4 i 4^i 4i 个结点,总代价为 2 i n + 2 i + 2 ⋅ ( 2 i − 1 ) 2^i n + 2^{i+2}\cdot (2^i-1) 2in+2i+2(2i1).

n ≤ 4 n \le 4 n4 时,运用递归式会无限循环,单个结点的代价趋于 4。
此时,运行子问题的基本程序,不使用递归程序。

T ( 5 ) = Θ ( 1 ) T(5) = \Theta(1) T(5)=Θ(1) 是最小子问题运行时间。
求解 n / 2 i + 2 i − 1 2 i − 2 = 5 n/2^i+ \frac{2^i-1}{2^{i-2}} = 5 n/2i+2i22i1=5,得 i = lg ⁡ ( n − 4 ) i = \lg(n-4) i=lg(n4)。所以递归树一共有 lg ⁡ ( n − 4 ) + 1 \lg(n-4) + 1 lg(n4)+1 层。
lg ⁡ ( n − 4 ) \lg(n-4) lg(n4) 层:有 4 lg ⁡ ( n − 4 ) 4^{\lg(n-4)} 4lg(n4) 个结点,每个结点的代价为 T ( 5 ) T(5) T(5)。这层总代价为 Θ ( 4 lg ⁡ ( n − 4 ) ) \Theta(4^{\lg(n-4)}) Θ(4lg(n4))
把所有层次的代价加起来,得到整个树的代价:
T ( n ) = ∑ i = 0 lg ⁡ ( n − 4 ) − 1 ( 2 i n + 2 i + 2 ⋅ ( 2 i − 1 ) ) + Θ ( 4 lg ⁡ ( n − 4 ) ) = ∑ i = 0 lg ⁡ ( n − 4 ) − 1 2 i n + ∑ i = 0 lg ⁡ ( n − 4 ) − 1 4 i + 1 − ∑ i = 0 lg ⁡ ( n − 4 ) − 1 2 i + 2 + Θ ( ( n − 4 ) 2 ) = 2 lg ⁡ ( n − 4 ) − 1 2 − 1 n + 4 ⋅ 4 lg ⁡ ( n − 4 ) − 1 4 − 1 − 4 ⋅ 2 lg ⁡ ( n − 4 ) − 1 2 − 1 + Θ ( n 2 ) = ( n − 5 ) n + 4 3 ( ( n − 4 ) 2 − 1 ) − 4 ( n − 5 ) + Θ ( n 2 ) = Θ ( n 2 ) T(n) = \sum_{i=0}^{\lg(n-4)-1} (2^i n + 2^{i+2}\cdot (2^i-1) )+ \Theta(4^{\lg(n-4)}) \\ =\sum_{i=0}^{\lg(n-4)-1}2^i n + \sum_{i=0}^{\lg(n-4)-1} 4^{i+1} - \sum_{i=0}^{\lg(n-4)-1}2^{i+2} + \Theta((n-4)^2) \\ =\frac{2^{\lg(n-4)} - 1}{2-1}n + 4\cdot\frac{4^{\lg(n-4)} - 1}{4-1} - 4\cdot\frac{2^{\lg(n-4)} - 1}{2-1} + \Theta(n^2) \\ =(n-5)n + \frac{4}{3}((n-4)^2-1) -4(n-5) + \Theta(n^2) \\ =\Theta(n^2) T(n)=i=0lg(n4)1(2in+2i+2(2i1))+Θ(4lg(n4))=i=0lg(n4)12in+i=0lg(n4)14i+1i=0lg(n4)12i+2+Θ((n4)2)=212lg(n4)1n+4414lg(n4)14212lg(n4)1+Θ(n2)=(n5)n+34((n4)21)4(n5)+Θ(n2)=Θ(n2).

猜测: T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)
证明:假设存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c n 2 − d n − 1 T(n) \le cn^2 - dn^{-1} T(n)cn2dn1,其中,常数 d > 0 d > 0 d>0
替换递归式,得
T ( n ) ≤ 4 c ( n / 2 + 2 ) 2 − d ( n / 2 + 2 ) − 1 + n = c n 2 + 8 c n + 16 − 2 d / ( n + 4 ) + n ≤ c n 2 − d n − 1 T(n) \le 4c(n/2+2)^2 - d(n/2+2)^{-1} + n = cn^2 + 8cn + 16 - 2d/(n+4) + n \le cn^2 -dn^{-1} T(n)4c(n/2+2)2d(n/2+2)1+n=cn2+8cn+162d/(n+4)+ncn2dn1
n 0 > 4 n_0 > 4 n0>4 d > n 3 + 20 n 2 + 64 n n − 4 d > \frac{n^3+20n^2+64n}{n-4} d>n4n3+20n2+64n 0 < c ≤ ( d − 64 ) n − 4 d − n 3 − 20 n 2 8 n 2 ( n + 4 ) 0 < c \le \frac{(d-64)n-4d -n^3-20n^2}{8n^2(n+4)} 0<c8n2(n+4)(d64)n4dn320n2 时,上式最后一步成立。即证。

4.4-4 使用递归树来确定递归式 T ( n ) = 2 T ( n − 1 ) + 1 T(n) = 2T(n-1) + 1 T(n)=2T(n1)+1 的一个好的渐近上界。用代换法证明你的答案。
解: 递归树有 n n n 层。每层代价如下:
第 0 层:1
第 1 层:2
第 2 层:4
……
n − 1 n-1 n1 层: 2 n − 1 T ( 1 ) 2^{n-1}T(1) 2n1T(1)
把所有层次的代价加起来,得到整个树的代价:
T ( n ) = 1 + 2 + 4 + ⋯ + 2 n − 2 + Θ ( 2 n − 1 ) = ∑ i = 0 n − 2 2 i + Θ ( 2 n − 1 ) = 2 n − 1 − 1 2 − 1 + Θ ( 2 n − 1 ) = 2 n − 1 − 1 + Θ ( 2 n − 1 ) = Θ ( 2 n ) T(n) = 1 + 2 + 4 + \dots + 2^{n-2} + \Theta(2^{n-1}) \\ =\sum_{i=0}^{n-2}2^{i} + \Theta(2^{n-1}) = \frac{2^{n-1} - 1}{2-1} + \Theta(2^{n-1}) \\ =2^{n-1} -1 + \Theta(2^{n-1}) \\ =\Theta(2^n) T(n)=1+2+4++2n2+Θ(2n1)=i=0n22i+Θ(2n1)=212n11+Θ(2n1)=2n11+Θ(2n1)=Θ(2n).

猜测: T ( n ) = O ( 2 n ) T(n) = O(2^n) T(n)=O(2n)
证明:假设存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c ⋅ 2 n − d n − 1 T(n) \le c\cdot2^n - dn^{-1} T(n)c2ndn1,其中,常数 d > 0 d>0 d>0
替换递归式,得
T ( n ) ≤ 2 c ⋅ 2 n − 1 − d ( n − 1 ) − 1 + 1 = c ⋅ 2 n − d / ( n − 1 ) + 1 ≤ c ⋅ 2 n − d / n T(n) \le 2c\cdot 2^{n-1} - d(n-1)^{-1} + 1 = c\cdot 2^n -d/(n-1) + 1 \le c\cdot 2^n - d/n T(n)2c2n1d(n1)1+1=c2nd/(n1)+1c2nd/n
d ≥ n ( n − 1 ) d \ge n(n-1) dn(n1) 时,上式最后一步成立。即证。

4.4-5 使用递归树来确定递归式 T ( n ) = T ( n − 1 ) + T ( n / 2 ) + n T(n) = T(n-1) + T(n/2) + n T(n)=T(n1)+T(n/2)+n 的一个好的渐近上界。用代换法证明你的答案。
解: (?)
第 0 行: n n n
第 1 行: ( n − 1 ) + n 2 = 3 2 n − 1 (n-1)+ \frac{n}{2} = \frac{3}{2}n-1 (n1)+2n=23n1
第 2 行: ( ( n − 2 ) + n − 1 2 ) + ( n 2 − 1 + n 4 ) = 9 4 n − 7 2 = ( 3 2 n − 1 ) − 2 + ( 3 2 n − 1 ) / 2 ((n-2)+\frac{n-1}{2}) + (\frac{n}{2}-1+\frac{n}{4}) = \frac{9}{4}n - \frac{7}{2} =(\frac{3}{2}n -1)-2+(\frac{3}{2}n -1)/2 ((n2)+2n1)+(2n1+4n)=49n27=(23n1)2+(23n1)/2
第 3 行: ( n − 3 ) + n − 2 2 + ( n − 1 2 − 1 + n − 1 4 ) + ( n 2 − 2 + ( n 2 − 1 ) / 2 ) + ( n 4 − 1 ) + n 8 = 27 8 n − 37 4 = ( 9 4 n − 7 2 ) − 4 + ( 9 4 n − 7 2 ) / 2 (n-3) + \frac{n-2}{2} + (\frac{n-1}{2}-1 + \frac{n-1}{4}) + (\frac{n}{2}-2 + (\frac{n}{2}-1)/2) + (\frac{n}{4}-1) + \frac{n}{8} = \frac{27}{8}n - \frac{37}{4} = (\frac{9}{4}n - \frac{7}{2})-4 + (\frac{9}{4}n - \frac{7}{2})/2 (n3)+2n2+(2n11+4n1)+(2n2+(2n1)/2)+(4n1)+8n=827n437=(49n27)4+(49n27)/2
第 4 行: ( 27 8 n − 37 4 ) − 8 + ( 27 8 n − 37 4 ) / 2 = 81 16 n − 175 8 (\frac{27}{8}n - \frac{37}{4})-8 + (\frac{27}{8}n - \frac{37}{4})/2 = \frac{81}{16}n -\frac{175}{8} (827n437)8+(827n437)/2=1681n8175
……
i i i 行: 3 i 2 i n − S ( i ) \frac{3^i}{2^i}n - S(i) 2i3inS(i)

第 2 - 4 行减去的常数:
2 + 3 / 2 2+3/2 2+3/2
4 + 3 / 2 ( 2 + 3 / 2 ) = 4 + 2 ⋅ 3 / 2 + ( 3 / 2 ) 2 4+3/2(2+3/2) = 4 +2\cdot3/2+(3/2)^2 4+3/2(2+3/2)=4+23/2+(3/2)2
8 + 3 / 2 ( 4 + 3 / 2 ( 2 + 3 / 2 ) ) = 8 + 4 ⋅ 3 / 2 + 2 ⋅ ( 3 / 2 ) 2 + ( 3 / 2 ) 3 8+3/2(4+3/2(2+3/2)) = 8+4\cdot3/2+2\cdot(3/2)^2 + (3/2)^3 8+3/2(4+3/2(2+3/2))=8+43/2+2(3/2)2+(3/2)3
i i i 行减去的常数:
S ( i ) = 2 i − 1 + 2 i − 2 ⋅ ( 3 / 2 ) + ⋯ + 2 ⋅ ( 3 / 2 ) i − 2 + ( 3 / 2 ) i − 1 S(i) = 2^{i-1}+2^{i-2}\cdot(3/2) + \cdots + 2\cdot(3/2)^{i-2} + (3/2)^{i-1} S(i)=2i1+2i2(3/2)++2(3/2)i2+(3/2)i1

所以,第 i i i 行的代价为:
3 i 2 i n − S ( i ) ≤ ( 3 2 ) i n − 2 i − 1 \frac{3^i}{2^i}n - S(i) \le (\frac{3}{2})^{i}n - 2^{i-1} 2i3inS(i)(23)in2i1
递归树的层数为 n n n
把所有层次的代价加起来,得到整个树的代价:
T ( n ) ≤ n + 3 2 n + ( 3 2 ) 2 n + ⋯ + ( 3 2 ) n − 1 n − ( 1 + 2 + 2 2 + ⋯ + 2 n − 2 ) = ∑ i = 0 n − 1 ( 3 2 ) i − ∑ i = 0 n − 2 2 i = 2 ( ( 3 2 ) n − 1 ) n − ( 2 n − 1 − 1 ) = O ( ( 3 2 ) n n ) T(n) \le n+\frac{3}{2}n + (\frac{3}{2})^2n + \cdots + (\frac{3}{2})^{n-1}n - (1+2 + 2^2 + \cdots + 2^{n-2}) \\ =\sum_{i=0}^{n-1}(\frac{3}{2})^i - \sum_{i=0}^{n-2}2^i \\ =2((\frac{3}{2})^n-1)n - (2^{n-1} - 1) \\ =O((\frac{3}{2})^nn) T(n)n+23n+(23)2n++(23)n1n(1+2+22++2n2)=i=0n1(23)ii=0n22i=2((23)n1)n(2n11)=O((23)nn)

猜测: T ( n ) = O ( ( 3 2 ) n n ) T(n) = O((\frac{3}{2})^nn) T(n)=O((23)nn)
证明:假设存在常数 c c c n 0 n_0 n0,当 n ≥ n 0 n \ge n_0 nn0 时,有 T ( n ) ≤ c ⋅ ( 3 2 ) n n T(n) \le c\cdot(\frac{3}{2})^nn T(n)c(23)nn
替换递归式,得
T ( n ) ≤ c ( 3 2 ) n − 1 ( n − 1 ) + c ⋅ ( 3 2 ) n / 2 ⋅ n 2 + n = c ( 3 2 ) n − 1 n − c ( 3 2 ) n − 1 + c ⋅ ( 3 2 ) n / 2 ⋅ n 2 + n ≤ c ⋅ ( 3 2 ) n n T(n) \le c(\frac{3}{2})^{n-1}(n-1) + c\cdot(\frac{3}{2})^{n/2}\cdot\frac{n}{2} + n = c(\frac{3}{2})^{n-1}n -c(\frac{3}{2})^{n-1} + c\cdot(\frac{3}{2})^{n/2}\cdot\frac{n}{2} + n \le c\cdot(\frac{3}{2})^nn T(n)c(23)n1(n1)+c(23)n/22n+n=c(23)n1nc(23)n1+c(23)n/22n+nc(23)nn
c ≥ n / ( ( 3 2 ) n − 1 − ( 3 2 ) n / 2 ⋅ n 2 ) c \ge n/((\frac{3}{2})^{n-1}-(\frac{3}{2})^{n/2}\cdot\frac{n}{2}) cn/((23)n1(23)n/22n) 时,上式最后一步成立。即证。

4.4-6 使用递归树证明递归式 T ( n ) = T ( n / 3 ) + T ( 2 n / 3 ) + c n T(n) = T(n/3) + T(2n/3) + cn T(n)=T(n/3)+T(2n/3)+cn 的解为 Ω ( n lg ⁡ n ) \Omega(n\lg n) Ω(nlgn),其中 c c c 是常数。
证: 树的深度为 log ⁡ 3 / 2 n \log_{3/2}n log3/2n
第 0 层的代价为 c n cn cn
log ⁡ 3 n \log_3n log3n 层每层的代价均为 c n cn cn
所以整个树的代价至少是: c n ⋅ log ⁡ 3 n = c n lg ⁡ n lg ⁡ 3 = Θ ( n lg ⁡ n ) cn\cdot \log_3n = cn\frac{\lg n}{\lg3} = \Theta(n\lg n) cnlog3n=cnlg3lgn=Θ(nlgn)
所以, T ( n ) = Ω ( n lg ⁡ n ) T(n) = \Omega(n\lg n) T(n)=Ω(nlgn)

4.4-7 画出 T ( n ) = 4 T ( ⌊ n / 2 ⌋ ) + c n T(n) = 4T(\lfloor n/2 \rfloor) + cn T(n)=4T(n/2)+cn 的递归树,其中 c c c 是常数,给出解的渐近紧确界。用代换法证明你给出的界。
解: 树的深度为 lg ⁡ n \lg n lgn。每层代价为:
第 0 层: c n cn cn
第 1 层: 4 ( c n / 2 ) = 2 c n 4(cn/2) = 2cn 4(cn/2)=2cn
第 2 层: 4 2 ⋅ ( c n / 2 2 ) = 4 c n 4^2\cdot (cn/2^2) = 4cn 42(cn/22)=4cn
……
i i i 层: 4 i ⋅ ( c n / 2 i ) = c n ⋅ 2 i 4^i \cdot (cn/2^i) = cn\cdot 2^i 4i(cn/2i)=cn2i

把所有层次的代价加起来,得到整个树的代价:
T ( n ) = c n ⋅ ∑ i = 0 lg ⁡ n − 1 2 i = c n ( 2 lg ⁡ n − 1 ) = c n 2 − c n = Θ ( n 2 ) T(n) = cn\cdot \sum_{i=0}^{\lg n-1}2^i = cn(2^{\lg n}-1) = cn^2 - cn = \Theta(n^2) T(n)=cni=0lgn12i=cn(2lgn1)=cn2cn=Θ(n2)

使用代换法分别证明 T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2) T ( n ) = Ω ( n 2 ) T(n) = \Omega(n^2) T(n)=Ω(n2)
证明过程略。

4.4-8 使用递归树确定递归式 T ( n ) = T ( n − a ) + T ( a ) + c n T(n) = T(n-a) + T(a) + cn T(n)=T(na)+T(a)+cn 的渐近紧确解,其中常数 a ≥ 1 a \ge 1 a1 c > 0 c>0 c>0
解: T ( a ) = b T(a) = b T(a)=b 是最小子问题运行时间,其中 b b b 是常量。
n − a i = a n-ai = a nai=a,得 i = n / a − 1 i = n/a-1 i=n/a1,所以递归树有 n / a n/a n/a 层。
递归树的每层代价如下:
第 0 层: c n cn cn
第 1 层: c ( n − a ) + b = c n − c a + b c(n-a)+b = cn-ca+b c(na)+b=cnca+b
第 2 层: c ( n − 2 a ) + 2 b = c n − 2 c a + 2 b c(n-2a)+2b = cn-2ca + 2b c(n2a)+2b=cn2ca+2b
……
i i i 层: c n − c a ⋅ i + b ⋅ i cn-ca\cdot i+b\cdot i cncai+bi

把所有层次的代价加起来,得到整个树的代价:
T ( n ) = c n ⋅ ( n / a ) + ( b − c a ) ∑ i = 0 n / a − 1 i = c n 2 / a + ( b − c a ) n / a ( n / a − 1 ) 2 = ( c / 2 a + b / 2 a 2 ) ⋅ n 2 + ( c / 2 − b / 2 a ) ⋅ n = Θ ( n 2 ) T(n) = cn\cdot(n/a) + (b-ca)\sum_{i=0}^{n/a-1}i \\ =cn^2/a + (b-ca)\frac{n/a(n/a-1)}{2} \\ =(c/2a+b/2a^2)\cdot n^2 +(c/2-b/2a)\cdot n \\ =\Theta(n^2) T(n)=cn(n/a)+(bca)i=0n/a1i=cn2/a+(bca)2n/a(n/a1)=(c/2a+b/2a2)n2+(c/2b/2a)n=Θ(n2)

4.4-9 使用递归树确定递归式 T ( n ) = T ( α n ) + T ( ( 1 − α ) n ) + c n T(n) = T(\alpha n) + T((1-\alpha)n) + cn T(n)=T(αn)+T((1α)n)+cn 的渐近紧确解,其中常数 0 < α < 1 0 < \alpha < 1 0<α<1 c > 0 c>0 c>0
解: 不妨设 α ≥ 1 − α \alpha \ge 1-\alpha α1α,则有 0 < 1 − α ≤ 1 / 2 0 < 1-\alpha \le 1/2 0<1α1/2 1 / 2 ≤ α < 1 1/2 \le \alpha < 1 1/2α<1
递归树
递归树的前 log ⁡ 1 / ( 1 − α ) n \log_{1/(1-\alpha)}n log1/(1α)n 层是完全递归树,每层代价为 c n cn cn,所以猜测 Ω ( n log ⁡ 1 / ( 1 − α ) n ) = Ω ( n lg ⁡ n ) \Omega(n \log_{1/(1-\alpha)}n) = \Omega(n\lg n) Ω(nlog1/(1α)n)=Ω(nlgn)
递归树有 log ⁡ 1 / α n \log_{1/\alpha}n log1/αn 层,每层代价 ≤ c n \le cn cn,所以猜测 O ( n log ⁡ 1 / α n ) = O ( n lg ⁡ n ) O(n\log_{1/\alpha}n) = O(n\lg n) O(nlog1/αn)=O(nlgn)

现在使用替换法证明 T ( n ) = Θ ( n lg ⁡ n ) T(n) = \Theta(n\lg n) T(n)=Θ(nlgn)
为了证明上界,需要证明存在常数 d > 0 d>0 d>0,有 T ( n ) ≤ d n lg ⁡ n T(n) \le dn\lg n T(n)dnlgn
T ( n ) = T ( α n ) + T ( ( 1 − α ) n ) + c n ≤ d α n lg ⁡ ( α n ) + d ( 1 − α ) n lg ⁡ ( ( 1 − α ) n ) + c n = d α n lg ⁡ α + d α n lg ⁡ n + d ( 1 − α ) n lg ⁡ ( 1 − α ) + d ( 1 − α ) n lg ⁡ n + c n = d n lg ⁡ n + d n ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) + c n ≤ d n lg ⁡ n T(n) = T(\alpha n) + T((1-\alpha)n) + cn \\ \le d\alpha n \lg(\alpha n) + d(1-\alpha)n\lg((1-\alpha)n) + cn \\ =d\alpha n\lg\alpha + d\alpha n\lg n + d(1-\alpha)n\lg(1-\alpha) + d(1-\alpha)n\lg n + cn \\ =dn\lg n + dn(\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)) + cn \\ \le dn\lg n T(n)=T(αn)+T((1α)n)+cndαnlg(αn)+d(1α)nlg((1α)n)+cn=dαnlgα+dαnlgn+d(1α)nlg(1α)+d(1α)nlgn+cn=dnlgn+dn(αlgα+(1α)lg(1α))+cndnlgn
如果 d n ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) + c n ≤ 0 dn(\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)) + cn \le 0 dn(αlgα+(1α)lg(1α))+cn0,这个条件等于
d ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) ≤ − c d(\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)) \le -c d(αlgα+(1α)lg(1α))c
因为 1 / 2 ≤ α < 1 1/2 \le \alpha < 1 1/2α<1 0 < 1 − α ≤ 1 / 2 0 < 1-\alpha \le 1/2 0<1α1/2,则有 lg ⁡ α < 0 \lg \alpha < 0 lgα<0 lg ⁡ ( 1 − α ) < 0 \lg(1-\alpha) < 0 lg(1α)<0
所以 d ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) < 0 d(\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)) < 0 d(αlgα+(1α)lg(1α))<0
所以 d ≥ − c α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) d \ge \frac{-c}{\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)} dαlgα+(1α)lg(1α)c
右边的分数是一个正的常数,所以只要 d d d 的值大于等于这个分数就足够了。

为了证明下界,需要证明存在常数 d > 0 d>0 d>0,有 T ( n ) ≥ d n lg ⁡ n T(n) \ge dn\lg n T(n)dnlgn
可以使用与上界相同的证明,将 ≥ \ge 替换 ≤ \le ,我们得到的要求是
0 < d ≤ − c α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) 0 < d \le \frac{-c}{\alpha\lg\alpha + (1-\alpha)\lg(1-\alpha)} 0<dαlgα+(1α)lg(1α)c
综上所述,得 T ( n ) = Θ ( n lg ⁡ n ) T(n) = \Theta(n\lg n) T(n)=Θ(nlgn)


4.5 主方法求解递归式

主方法提供了求解如下形式的递归式的“食谱”方法:
T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n),    (4.20)
其中,常数 a ≥ 1 a \ge 1 a1 b > 1 b > 1 b>1 f ( n ) f(n) f(n) 是渐近正函数。

主定理

主方法依赖于下面的定理。

定理 4.1(主定理)
a ≥ 1 a \ge 1 a1 b > 1 b > 1 b>1 为常数,设 f ( n ) f(n) f(n) 是一个常数,设 T ( n ) T(n) T(n) 由递归式
T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n) T(n)=aT(n/b)+f(n)
对非负整数定义。其中 n / b n/b n/b 解释为 ⌊ n / b ⌋ \lfloor n/b \rfloor n/b ⌈ n / b ⌉ \lceil n/b \rceil n/b。那么 T ( n ) T(n) T(n) 有下面的渐近界:

  1. 若存在常数 ϵ > 0 \epsilon > 0 ϵ>0,有 f ( n ) = O ( n log ⁡ b a − ϵ ) f(n) = O(n^{\log_b a - \epsilon}) f(n)=O(nlogbaϵ),则 T ( n ) = Θ ( n log ⁡ b a ) T(n) = \Theta(n^{\log_b a}) T(n)=Θ(nlogba)
  2. f ( n ) = Θ ( n log ⁡ b a ) f(n) = \Theta(n^{\log_b a}) f(n)=Θ(nlogba),则 T ( n ) = Θ ( n log ⁡ b a lg ⁡ n ) T(n) = \Theta(n^{\log_b a}\lg n) T(n)=Θ(nlogbalgn)
  3. 若存在常数 ϵ > 0 \epsilon > 0 ϵ>0,有 f ( n ) = Ω ( n log ⁡ b a + ϵ ) f(n) = \Omega(n^{\log_b a + \epsilon}) f(n)=Ω(nlogba+ϵ),且存在常数 c < 1 c < 1 c<1,对所有足够大的 n n n,有 a f ( n / b ) ≤ c f ( n ) af(n/b) \le cf(n) af(n/b)cf(n),则 T ( n ) = Θ ( f ( n ) ) T(n) = \Theta(f(n)) T(n)=Θ(f(n))
练习

4.5-1 使用主方法给出下列递归式的紧确渐近界。
a. T ( n ) = 2 T ( n / 4 ) + 1 T(n) = 2T(n/4) + 1 T(n)=2T(n/4)+1
b. T ( n ) = 2 T ( n / 4 ) + n T(n) = 2T(n/4) + \sqrt{n} T(n)=2T(n/4)+n
c. T ( n ) = 2 T ( n / 4 ) + n T(n) = 2T(n/4) + n T(n)=2T(n/4)+n
d. T ( n ) = 2 T ( n / 4 ) + n 2 T(n) = 2T(n/4) + n^2 T(n)=2T(n/4)+n2
解: a = 2 a = 2 a=2 b = 4 b=4 b=4,所以 n log ⁡ b a = n log ⁡ 4 2 = n 1 / 2 = n n^{\log_b a} = n^{\log_4 2} = n^{1/2} = \sqrt{n} nlogba=nlog42=n1/2=n
a. f ( n ) = 1 f(n)=1 f(n)=1,因为存在 ϵ = 1 / 4 \epsilon = 1/4 ϵ=1/4,有 f ( n ) = O ( n 1 / 2 − ϵ ) f(n) = O(n^{1/2 - \epsilon}) f(n)=O(n1/2ϵ),情况 ① 适用,所以 T ( n ) = Θ ( n ) T(n) = \Theta(\sqrt{n}) T(n)=Θ(n )
b. f ( n ) = n f(n) = \sqrt{n} f(n)=n ,情况 ② 适用,因为 f ( n ) = Θ ( n ) f(n) = \Theta(\sqrt{n}) f(n)=Θ(n ),所以 T ( n ) = n lg ⁡ n T(n) = \sqrt{n}\lg n T(n)=n lgn
c. f ( n ) = n f(n) = n f(n)=n,存在 ϵ = 1 / 2 \epsilon = 1/2 ϵ=1/2,有 f ( n ) = Ω ( n 1 / 2 + ϵ ) f(n) = \Omega(n^{1/2+\epsilon}) f(n)=Ω(n1/2+ϵ)
且对于足够大的 n n n,有 a f ( n / b ) = 2 ( n / 4 ) = ( 1 / 2 ) n ≤ ( 1 / 2 ) f ( n ) af(n/b) = 2(n/4) = (1/2)n \le (1/2)f(n) af(n/b)=2(n/4)=(1/2)n(1/2)f(n),存在 c = 1 / 2 c = 1/2 c=1/2
因此,情况 ③ 适用,所以 T ( n ) = Θ ( n ) T(n) = \Theta(n) T(n)=Θ(n)
d. f ( n ) = n 2 f(n) = n^2 f(n)=n2,存在 ϵ = 1 \epsilon = 1 ϵ=1,有 f ( n ) = Ω ( n 1 / 2 + ϵ ) f(n) = \Omega(n^{1/2+\epsilon}) f(n)=Ω(n1/2+ϵ)
且对于足够大的 n n n,有 a f ( n / b ) = 2 ( n / 4 ) 2 = ( 1 / 8 ) n 2 ≤ ( 1 / 8 ) f ( n ) af(n/b) = 2(n/4)^2 = (1/8)n^2 \le (1/8)f(n) af(n/b)=2(n/4)2=(1/8)n2(1/8)f(n),存在 c = 1 / 8 c = 1/8 c=1/8
因此,情况 ③ 适用,所以 T ( n ) = Θ ( n 2 ) T(n) = \Theta(n^2) T(n)=Θ(n2)

4.5-2 Caesar 教授想要开发一个比 Strassen 算法渐近更快的矩阵相乘算法。他的算法将使用分治方法,将每个矩阵分割成 n / 4 × n / 4 n/4 \times n/4 n/4×n/4 的子矩阵,分割和结合步骤花费 Θ ( n 2 ) \Theta(n^2) Θ(n2) 时间。为了打败 Strassen 算法,他需要确定他的算法需要创建多少个子问题。如果他的算法创建 a a a 个子问题,那么运行时间 T ( n ) T(n) T(n) 的递归式为 T ( n ) = a T ( n / 4 ) + Θ ( n 2 ) T(n) = aT(n/4) + \Theta(n^2) T(n)=aT(n/4)+Θ(n2)。Caesar 教授的算法要比 Strassen 算法渐近更快, a a a 的最大整数值是多少?
解: Strassen 算法的运行时间为 S ( n ) = Θ ( n lg ⁡ 7 ) S(n) = \Theta(n^{\lg7}) S(n)=Θ(nlg7) 2.80 < lg ⁡ 7 < 2.81 2.80 < \lg7 < 2.81 2.80<lg7<2.81
使用主方法解递归式 T ( n ) = a T ( n / 4 ) + Θ ( n 2 ) T(n) = aT(n/4) + \Theta(n^2) T(n)=aT(n/4)+Θ(n2),比较 n 2 n^{2} n2 n log ⁡ 4 a n^{\log_4 a} nlog4a
a. 如果 log ⁡ 4 a = 2 \log_4 a = 2 log4a=2,符合情况②, T ( n ) = Θ ( n 2 lg ⁡ n ) T(n) = \Theta(n^2\lg n) T(n)=Θ(n2lgn)。此时, a = 16 a = 16 a=16 T ( n ) = o ( n lg ⁡ 7 ) T(n) = o(n^{\lg7}) T(n)=o(nlg7)。(因为 lg ⁡ n = o ( n 0.8 ) \lg n = o(n^{0.8}) lgn=o(n0.8)
b. 如果 log ⁡ 4 a < 2 \log_4 a < 2 log4a<2,符合情况③, T ( n ) = Θ ( n 2 ) T(n) = \Theta(n^2) T(n)=Θ(n2)。此时, a < 16 a < 16 a<16 T ( n ) = o ( n lg ⁡ 7 ) T(n) = o(n^{\lg7}) T(n)=o(nlg7)
c. 如果 log ⁡ 4 a > 2 \log_4 a > 2 log4a>2,符合情况①, T ( n ) = Θ ( n log ⁡ 4 a ) T(n) = \Theta(n^{\log_4 a}) T(n)=Θ(nlog4a)。此时, a > 16 a > 16 a>16。当 log ⁡ 4 a < lg ⁡ 7 \log_4a < \lg7 log4a<lg7 时, a < 49 a<49 a<49 T ( n ) = o ( n lg ⁡ 7 ) T(n) = o(n^{\lg7}) T(n)=o(nlg7) a a a 的最大值为 48。
综上, a a a 的最大整数值为 48,比 Strassen 算法渐近更快。

4.5-3 使用主方法证明二分递归式 T ( n ) = T ( n / 2 ) + Θ ( 1 ) T(n) = T(n/2) + \Theta(1) T(n)=T(n/2)+Θ(1) 的解是 T ( n ) = Θ ( lg ⁡ n ) T(n) = \Theta(\lg n) T(n)=Θ(lgn)。(见练习 2.3-5 二分查找的描述。)
证: a = 1 a=1 a=1 b = 2 b=2 b=2 f ( n ) = Θ ( 1 ) f(n) = \Theta(1) f(n)=Θ(1)。所以有 n log ⁡ b a = n log ⁡ 2 1 = n 0 = 1 n^{\log_ba} = n^{\log_2 1} = n^0 = 1 nlogba=nlog21=n0=1
情况②适用,因为 f ( n ) = Θ ( 1 ) f(n) = \Theta(1) f(n)=Θ(1),所以 T ( n ) = Θ ( lg ⁡ n ) T(n) = \Theta(\lg n) T(n)=Θ(lgn)

4.5-4 主方法可以应用到递归式 T ( n ) = 4 T ( n / 2 ) + n 2 lg ⁡ n T(n) = 4T(n/2) + n^2\lg n T(n)=4T(n/2)+n2lgn 吗?为什么?给出一个该递归式的渐近上界。
解: 不可以。
a = 4 a = 4 a=4 b = 2 b = 2 b=2 f ( n ) = n 2 lg ⁡ n f(n) = n^2\lg n f(n)=n2lgn。所以, n log ⁡ b a = n log ⁡ 2 4 = n 2 n^{\log_ba} = n^{\log_2 4} = n^2 nlogba=nlog24=n2
f ( n ) f(n) f(n) 渐近大于 n 2 n^2 n2,不符合情况①和②。
对于情况③,对于任何正常数 ϵ \epsilon ϵ,比值 f ( n ) / n log ⁡ b a = lg ⁡ n f(n)/n^{\log_ba} = \lg n f(n)/nlogba=lgn 渐近小于 n ϵ n^{\epsilon} nϵ。所以, f ( n ) f(n) f(n) 多项式小于 n log ⁡ b a n^{\log_b a} nlogba
因此,这个递归式落入情况②和③之间。该递归式与主定理中的 3 个方法均不符合。、

使用递归树方法猜测递归树的渐近上界。
一共有 lg ⁡ n \lg n lgn 层。每层代价如下:
第 1 层: n 2 lg ⁡ n n^2\lg n n2lgn
第 2 层: 4 ( n / 2 ) 2 lg ⁡ ( n / 4 ) = n 2 lg ⁡ ( n / 4 ) = n 2 ( lg ⁡ n − 2 ) 4(n/2)^2\lg(n/4) = n^2 \lg(n/4) = n^2(\lg n - 2) 4(n/2)2lg(n/4)=n2lg(n/4)=n2(lgn2)
……
i i i 层: n 2 lg ⁡ ( n / ( 2 i ) ) = n 2 ( lg ⁡ n − i ) n^2 \lg(n/(2^i)) = n^2(\lg n - i) n2lg(n/(2i))=n2(lgni)

将所有层次的代价加起来,得 T ( n ) ≤ n 2 lg ⁡ n ⋅ lg ⁡ n T(n) \le n^2 \lg n \cdot \lg n T(n)n2lgnlgn
给出渐近上界: O ( n 2 lg ⁡ 2 n ) O(n^2 \lg^2n) O(n2lg2n)

4.5-5 ★ \bigstar 考虑正则条件 a f ( n / b ) ≤ c f ( n ) af(n/b) \le cf(n) af(n/b)cf(n),其中常数 c < 1 c < 1 c<1,这是主定理情况3 的部分。给出一个例子,满足以下情况:常数 a ≥ 1 a\ge1 a1 b > 1 b>1 b>1,一个满足主定理情况3 中除了正则条件外所有条件的函数 f ( n ) f(n) f(n)
解: 例子: f ( n ) = 2 T ( n / 2 ) + 2 n f(n) =2T(n/2) + 2^n f(n)=2T(n/2)+2n

a = 2 a = 2 a=2 b = 2 b = 2 b=2 f ( n ) = 2 n f(n) = 2^{n} f(n)=2n,所以 n log ⁡ b a = n log ⁡ 2 2 = n n^{\log_ba} = n^{\log_2 2} = n nlogba=nlog22=n
a f ( n / b ) = 2 ⋅ 2 n − 1 = 2 n > c ⋅ 2 n = c ⋅ f ( n ) af(n/b) = 2\cdot 2^{n-1} = 2^{n} > c\cdot 2^n = c\cdot f(n) af(n/b)=22n1=2n>c2n=cf(n),对于所有的 c < 1 c<1 c<1。不满足正则条件,符合题意。

存在常数 ϵ > 0 \epsilon > 0 ϵ>0,有 f ( n ) = 2 n = Ω ( n 1 + ϵ ) f(n) = 2^n = \Omega(n^{1+\epsilon}) f(n)=2n=Ω(n1+ϵ),因为对任意实数 a > 1 a > 1 a>1 b b b,有 n b = o ( a n ) n^b = o(a^n) nb=o(an)
所以满足主定理情况3 中除正则条件外的所有条件,符合题意。


学习笔记目录:【算法导论】目录

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值