基础知识
算法分析
我们先来求解一个排序问题:
输入: n n n个数的一个序列 ⟨ a 1 , a 2 , ⋯   , a n ⟩ \langle a_1,a_2,\cdots,a_n\rangle ⟨a1,a2,⋯,an⟩。
输出: 输入序列的一个排列 ⟨ a 1 ′ , a 2 ′ , ⋯   , a n ′ ⟩ \langle a_1',a_2',\cdots,a_n'\rangle ⟨a1′,a2′,⋯,an′⟩,满足 a 1 ′ ≤ a 2 ′ ≤ ⋯ a n ′ a_1'\leq a_2'\leq \cdots a_n' a1′≤a2′≤⋯an′。
插入排序的算法伪代码如下:
for j = 2 j=2 j=2 to j j j. l e n g t h length length
- k e y = A key=A key=A[ j j j]
- // Insert A A A[ j j j] into the sorted sequence A A A[ 1.. j − 1 1..j-1 1..j−1]
- i = j − 1 i=j-1 i=j−1
- while
i
>
0
i>0
i>0 and
A
A
A[
i
i
i]
>
k
e
y
>key
>key
- A [ i + 1 ] = A [ i ] A[i+1]=A[i] A[i+1]=A[i]
- i = i − 1 i=i-1 i=i−1
- A [ i + 1 ] = k e y A[i+1]=key A[i+1]=key
为分析这个算法的时间代价,我们假定第 i i i行所需的时间代价为 c i c_i ci。我们首先给出这个过程中每条语句的执行时间和执行次数。其中, t j t_j tj表示对于特定的 j j j执行while循环的次数。
伪代码 | 代价 | 次数 |
---|---|---|
for j = 2 j=2 j=2 to j j j. l e n g t h length length | c 1 c_1 c1 | n n n |
k e y = A key=A key=A[ j j j] | c 2 c_2 c2 | n − 1 n-1 n−1 |
// Insert A A A[ j j j] into the sorted sequence A A A[ 1.. j − 1 1..j-1 1..j−1] | 0 0 0 | n − 1 n-1 n−1 |
i = j − 1 i=j-1 i=j−1 | c 4 c_4 c4 | n − 1 n-1 n−1 |
while i > 0 i>0 i>0 and A A A[i] > k e y >key >key | c 5 c_5 c5 | ∑ j = 2 n t j \sum_{j=2}^n t_j ∑j=2ntj |
A [ i + 1 ] = A [ i ] A[i+1]=A[i] A[i+1]=A[i] | c 6 c_6 c6 | ∑ j = 2 n ( t j − 1 ) \sum_{j=2}^n (t_j-1) ∑j=2n(tj−1) |
i = i − 1 i=i-1 i=i−1 | c 7 c_7 c7 | ∑ j = 2 n ( t j − 1 ) \sum_{j=2}^n (t_j-1) ∑j=2n(tj−1) |
A [ i + 1 ] = k e y A[i+1]=key A[i+1]=key | c 8 c_8 c8 | n − 1 n-1 n−1 |
总运行时间 T ( n ) T(n) T(n)为代价与次数之积求和,得:
T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ∑ j = 2 n t j + c 6 ∑ j = 2 n ( t j − 1 ) + c 7 ∑ j = 2 n ( t j − 1 ) + c 8 ( n − 1 ) T(n)=c_1 n+c_2 (n-1)+c_4 (n-1)+c_5 \sum_{j=2}^n t_j +c_6\sum_{j=2}^n (t_j-1)+c_7\sum_{j=2}^n (t_j-1)+c_8(n-1) T(n)=c1n+c2(n−1)+c4(n−1)+c5j=2∑ntj+c6j=2∑n(tj−1)+c7j=2∑n(tj−1)+c8(n−1)
当输入的数组已排好序时,则出现最佳情况,此时 t j = 1 t_j=1 tj=1。从而
T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ( n − 1 ) + c 8 ( n − 1 ) = ( c 1 + c 2 + c 4 + c 5 + c 8 ) n − ( c 2 + c 4 + c 5 + c 8 ) \begin{aligned} T(n) & = c_1 n+c_2(n-1)+c_4(n-1)+c_5(n-1)+c_8(n-1)\\ & = (c_1+c_2+c_4+c_5+c_8)n-(c_2+c_4+c_5+c_8) \end{aligned} T(n)=c1n+c2(n−1)+c4(n−1)+c5(n−1)+c8(n−1)=(c1+c2+c4+c5+c8)n−(c2+c4+c5+c8)
可将该运行时间表示为 a n + b an+b an+b,因此,它是 n n n的线性函数。
当输入的数组已反向排序时,则出现最坏情况。此时, t j = j t_j=j tj=j。利用以下公式:
∑ j = 2 n j = n ( n + 1 ) 2 − 1 ∑ j = 2 n ( j − 1 ) = n ( n − 1 ) 2 \sum_{j=2}^n j=\frac{n(n+1)}{2}-1\\ \sum_{j=2}^n (j-1)=\frac{n(n-1)}{2} j=2∑nj=2n(n+1)−1j=2∑n(j−1)=2n(n−1)
可得
T ( n ) = c 1 n + c 2 ( n − 1 ) + c 4 ( n − 1 ) + c 5 ( n ( n + 1 ) 2 − 1 ) + c 6 ( n ( n − 1 ) 2 ) + c 7 ( n ( n − 1 ) 2 ) + c 8 ( n − 1 ) = ( c 5 + c 6 + c 7 2 ) n 2 + ( c 1 + c 2 + c 4 + c 5 − c 6 − c 7 2 + c 8 ) n − ( c 2 + c 4 + c 5 + c 8 ) \begin{aligned} T(n) &= c_1 n+c_2(n-1)+c_4(n-1)+c_5(\frac{n(n+1)}{2}-1)+c_6(\frac{n(n-1)}{2})+c_7(\frac{n(n-1)}{2})+c_8(n-1)\\ &=(\frac{c_5+c_6+c_7}{2})n^2+(c_1+c_2+c_4+\frac{c_5-c_6-c_7}{2}+c_8)n-(c_2+c_4+c_5+c_8) \end{aligned} T(n)=c1n+c2(n−1)+c4(n−1)+c5(2n(n+1)−1)+c6(2n(n−1))+c7(2n(n−1))+c8(n−1)=(2c5+c6+c7)n2+(c1+c2+c4+2c5−c6−c7+c8)n−(c2+c4+c5+c8)
可将该运行时间表示为 a n 2 + b n + c an^2+bn+c an2+bn+c,因此,它是 n n n的二次函数。
当忽略低阶项 b n + c bn+c bn+c和常量系数 a a a时,只剩下因子 n 2 n^2 n2,记为 Θ ( n 2 ) \Theta(n^2) Θ(n2)。
Θ \Theta Θ记号
我们使用 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))表示以下函数的集合:
Θ ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 1 、 c 2 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \Theta(g(n))=\lbrace f(n):存在正常量c_1、c_2和n_0,使得对所有n\geq n_0,有0\leq c_1 g(n) \leq f(n) \leq c_2 g(n) \rbrace Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
因为 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))是一个集合,所以可以记“ f ( n ) ∈ Θ ( g ( n ) ) f(n)\in \Theta(g(n)) f(n)∈Θ(g(n))”。但是,我们通常记 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n))以表达相同的概念。
练习
3.1-1 假设 f ( n ) f(n) f(n)与 g ( n ) g(n) g(n)都是渐进非负函数(当 n n n足够大时非负的函数)。使用 Θ \Theta Θ记号的基本定义来证明 max ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) \max(f(n),g(n))=\Theta(f(n)+g(n)) max(f(n),g(n))=Θ(f(n)+g(n))。
证明: 根据 Θ \Theta Θ记号的基本定义,要找到 c 1 c_1 c1使得 c 1 ( f ( n ) + g ( n ) ) ≤ max ( f ( n ) , g ( n ) ) c_1 (f(n)+g(n)) \leq \max(f(n),g(n)) c1(f(n)+g(n))≤max(f(n),g(n))。
不妨设 n n n足够大时, f ( n ) ≤ g ( n ) f(n)\leq g(n) f(n)≤g(n),则将不等式放缩得到 c 1 ( f ( n ) + g ( n ) ) ≤ c 1 ( g ( n ) + g ( n ) ) ≤ max ( f ( n ) , g ( n ) ) c_1 (f(n)+g(n)) \leq c_1 (g(n)+g(n)) \leq \max(f(n),g(n)) c1(f(n)+g(n))≤c1(g(n)+g(n))≤max(f(n),g(n)),即
2 c 1 g ( n ) ≤ max ( f ( n ) , g ( n ) ) 2c_1 g(n) \leq \max(f(n),g(n)) 2c1g(n)≤max(f(n),g(n))
又根据 max \max max的定义,
g ( n ) ≤ max ( f ( n ) , g ( n ) ) g(n) \leq \max(f(n),g(n)) g(n)≤max(f(n),g(n))
所以取
c 1 = 1 2 c_1=\frac{1}{2} c1=21
即可。
根据 Θ \Theta Θ记号的基本定义,要找到 c 2 c_2 c2使得 max ( f ( n ) , g ( n ) ) ≤ c 2 ( f ( n ) + g ( n ) ) \max(f(n),g(n)) \leq c_2 (f(n)+g(n)) max(f(n),g(n))≤c2(f(n)+g(n))。显然,
max ( f ( n ) , g ( n ) ) ≤ f ( n ) + g ( n ) \max(f(n),g(n)) \leq f(n)+g(n) max(f(n),g(n))≤f(n)+g(n)
所以取
c 2 = 1 c_2=1 c2=1
即可。
3.1-2 求证:对任意实常量 a a a和 b b b,其中 b > 0 b>0 b>0,有
( n + a ) b = Θ ( n b ) (n+a)^b=\Theta(n^b) (n+a)b=Θ(nb)
证明: n n n足够大时,
c 1 n b ≤ ( n + a ) b c 1 ≤ ( n + a n ) b c 1 ≤ ( 1 + a n ) b \begin{aligned} c_1n^b & \leq (n+a)^b \\ c_1 & \leq (\frac{n+a}{n})^b\\ c_1 & \leq (1+\frac{a}{n})^b \end{aligned} c1nbc1c1≤(n+a)b≤(nn+a)b≤(1+na)b
所以取
c 1 = { 1 ( a ≥ 0 ) ( 1 + a n 0 ) b ( a < 0 , n 0 为 正 整 数 且 a n 0 < 1 ) c_1=\left. \begin{cases} 1 & (a\geq 0) \\ (1+\frac{a}{n_0})^b & (a<0,n_0为正整数且\frac{a}{n_0}<1)\\ \end{cases} \right. c1={1(1+n0a)b(a≥0)(a<0,n0为正整数且n0a<1)
即可。
c 2 n b ≥ ( n + a ) b c 2 ≥ ( n + a n ) b c 2 ≥ ( 1 + a n ) b \begin{aligned} c_2n^b & \geq (n+a)^b \\ c_2 & \geq (\frac{n+a}{n})^b\\ c_2 & \geq (1+\frac{a}{n})^b \end{aligned} c2nbc2c2≥(n+a)b≥(nn+a)b≥(1+na)b
所以取
c 2 = { ( 1 + a ) b ( a ≥ 0 ) 1 ( a < 0 ) c_2=\left. \begin{cases} (1+a)^b & (a\geq0)\\ 1&(a<0) \end{cases}\right. c2={(1+a)b1(a≥0)(a<0)
即可。
3.1-4 2 n + 1 = O ( 2 n ) 2^{n+1}=O(2^n) 2n+1=O(2n)成立吗? 2 2 n = O ( 2 n ) 2^{2n}=O(2^n) 22n=O(2n)成立吗?其中,
O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) } O(g(n))=\lbrace f(n):存在正常量c和n_0,使得对所有n\geq n_0,有0\leq f(n) \leq c g(n) \rbrace O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}
解: 2 n + 1 = 2 × 2 n = O ( 2 n ) 2^{n+1}=2\times2^n= O(2^n) 2n+1=2×2n=O(2n)成立。
2 2 n = 2 n × 2 n 2^{2n}=2^n\times2^n 22n=2n×2n,对于任意常数 c c c,总存在 N N N,当 n > N n>N n>N时,有 2 n > c 2^n>c 2n>c,从而 2 2 n = 2 n × 2 n > c × 2 n 2^{2n}=2^n\times 2^n>c\times 2^n 22n=2n×2n>c×2n。因此不成立。
3.2-1 求证:若 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)是单调递增的函数,则函数 f ( n ) + g ( n ) f(n)+g(n) f(n)+g(n)和 f ( g ( n ) ) f(g(n)) f(g(n))也是单调递增的。此外,若 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)是非负的,则 f ( n ) ⋅ g ( n ) f(n)\cdot g(n) f(n)⋅g(n)是单调递增的。
证明: 设 n 1 > n 2 n_1>n_2 n1>n2,则
f ( n 1 ) + g ( n 1 ) > f ( n 2 ) + g ( n 1 ) > f ( n 2 ) + g ( n 2 ) f(n_1)+g(n_1)>f(n_2)+g(n_1)>f(n_2)+g(n_2) f(n1)+g(n1)>f(n2)+g(n1)>f(n2)+g(n2)
g ( n 1 ) > g ( n 2 ) ⇒ f ( g ( n 1 ) ) > f ( g ( n 2 ) ) g(n_1)>g(n_2)\Rightarrow f(g(n_1))>f(g(n_2)) g(n1)>g(n2)⇒f(g(n1))>f(g(n2))
f ( n 1 ) ⋅ g ( n 1 ) > f ( n 2 ) ⋅ g ( n 1 ) > f ( n 2 ) ⋅ g ( n 2 ) f(n_1)\cdot g(n_1)>f(n_2)\cdot g(n_1)>f(n_2)\cdot g(n_2) f(n1)⋅g(n1)>f(n2)⋅g(n1)>f(n2)⋅g(n2)
3.2-2 求证: a log b c = c l o g b a a^{\log_b c}=c^{log_b a} alogbc=clogba。
证明: a log b c = a l o g a c l o g a b = c 1 l o g a b = c l o g b a a^{\log_b c}=a^{\frac{log_a c}{log_a b}}=c^{\frac{1}{log_a b}}=c^{log_b a} alogbc=alogablogac=clogab1=clogba
3.2-3(1) 求证: lg ( n ! ) = Θ ( n lg n ) \lg(n!)=\Theta(n\lg n) lg(n!)=Θ(nlgn)
斯特劳林公式: n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn(en)n(1+Θ(n1))
证明: 如下
lg ( n ! ) = lg ( 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) ) = 1 2 lg ( 2 π ) − lg e ⋅ n + ( 1 2 + n ) lg n + lg ( 1 + Θ ( 1 n ) ) \begin{aligned} \lg(n!)&=\lg(\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})))\\ &=\frac{1}{2}\lg(2\pi)-\lg \mathrm{e}\cdot n+(\frac{1}{2}+n)\lg n+\lg(1+\Theta(\frac{1}{n})) \end{aligned} lg(n!)=lg(2πn(en)n(1+Θ(n1)))=21lg(2π)−lge⋅n+(21+n)lgn+lg(1+Θ(n1))
其中最高阶项为 n lg n n\lg n nlgn,因此 lg ( n ! ) = Θ ( n lg n ) \lg(n!)=\Theta(n\lg n) lg(n!)=Θ(nlgn)。
3.2-3(2) 求证: n ! = ω ( 2 n ) n!=\omega(2^n) n!=ω(2n),其中,
ω ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) < f ( n ) } \omega(g(n))=\lbrace f(n):对任意正常量c>0,存在常量n_0>0,使得对所有n\geq n_0,有0\leq c g(n) < f(n) \rbrace ω(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤cg(n)<f(n)}
证明: 如下。
n ! = 1 × 2 × 3 × 4 × ⋯ × n c ⋅ 2 n = 2 × 2 × 2 × 2 × ⋯ × 2 × c \begin{aligned} n!&=1\times 2\times 3\times 4 \times \cdots \times n\\ c\cdot 2^n &=2\times 2\times 2\times 2\times \cdots \times 2\times c \end{aligned} n!c⋅2n=1×2×3×4×⋯×n=2×2×2×2×⋯×2×c
取 n > max { 4 , c 2 } n>\max\lbrace4,c^2\rbrace n>max{4,c2},此时,
n ! = 24 × ⋯ × n > 24 × ⋯ × max { 2 , c } × max { 2 , c } c ⋅ 2 n = 16 × ⋯ × 2 × c \begin{aligned} n!&=24 \times \cdots \times n\\ &>24 \times \cdots \times \max\lbrace2, c\rbrace \times \max\lbrace2, c\rbrace\\ c\cdot 2^n &=16\times \cdots \times 2\times c \end{aligned} n!c⋅2n=24×⋯×n>24×⋯×max{2,c}×max{2,c}=16×⋯×2×c
上式中, n ! n! n!的每一项因子均大于 c ⋅ 2 n c\cdot 2^n c⋅2n的因子,因此 n ! > c ⋅ 2 n n!>c\cdot 2^n n!>c⋅2n。
3.2-3(3) 求证: n ! = o ( n n ) n!=o(n^n) n!=o(nn),其中,
o ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) < c g ( n ) } o(g(n))=\lbrace f(n):对任意正常量c>0,存在常量n_0>0,使得对所有n\geq n_0,有0\leq f(n) < c g(n) \rbrace o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}
证明: 不妨设 c < 1 c<1 c<1,取 n > 1 c n>\frac{1}{c} n>c1,此时,
n ! = 1 × 2 × 3 × 4 × ⋯ × n = n × 2 × 3 × 4 × ⋯ × 1 c ⋅ n n = n × n × n × n × ⋯ × n × c > n × n × n × n × ⋯ × 1 \begin{aligned} n!&=1\times 2\times 3\times 4 \times \cdots \times n\\ &=n\times 2\times 3\times 4\times \cdots\times 1 \\ c\cdot n^n &=n\times n\times n\times n\times \cdots \times n\times c\\ &>n\times n\times n\times n\times \cdots \times 1 \end{aligned} n!c⋅nn=1×2×3×4×⋯×n=n×2×3×4×⋯×1=n×n×n×n×⋯×n×c>n×n×n×n×⋯×1
上式中, n ! n! n!的每一项因子均小于 c ⋅ n n c\cdot n^n c⋅nn的因子,因此 n ! < c ⋅ n n n!<c\cdot n^n n!<c⋅nn。
3.2-4(1) 函数 ⌈ lg n ⌉ ! \lceil\lg n\rceil! ⌈lgn⌉!多项式有界吗?已知:
n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn(en)n(1+Θ(n1))
解: 如下。
⌈ lg n ⌉ ! = 2 π ⌈ lg n ⌉ ( ⌈ lg n ⌉ e ) ⌈ lg n ⌉ ( 1 + Θ ( 1 ⌈ lg n ⌉ ) ) ≥ 2 π lg n ( lg n e ) lg n ≥ ( lg n e ) lg n = e lg n ln ( lg n e ) > e ln n ln ( lg n e ) = n ln ( lg n e ) \begin{aligned} \lceil\lg n\rceil!&=\sqrt{2\pi \lceil\lg n\rceil}(\frac{\lceil\lg n\rceil}{\mathrm{e}})^{\lceil\lg n\rceil}(1+\Theta(\frac{1}{\lceil\lg n\rceil}))\\ &\geq\sqrt{2\pi \lg n}(\frac{\lg n}{\mathrm{e}})^{\lg n}\\ &\geq(\frac{\lg n}{\mathrm{e}})^{\lg n}\\ &=\mathrm{e}^{\lg n\ln(\frac{\lg n}{\mathrm{e}})}\\ &>\mathrm{e}^{\ln n\ln(\frac{\lg n}{\mathrm{e}})}\\ &=n^{\ln(\frac{\lg n}{\mathrm{e}})} \end{aligned} ⌈lgn⌉!=2π⌈lgn⌉(e⌈lgn⌉)⌈lgn⌉(1+Θ(⌈lgn⌉1))≥2πlgn(elgn)lgn≥(elgn)lgn=elgnln(elgn)>elnnln(elgn)=nln(elgn)
若对于任意正常数 c , k c,k c,k,有足够大的 n n n使得 f ( n ) ≤ c n k f(n)\leq cn^k f(n)≤cnk,则
lg f ( n ) ≤ lg c + k lg n = O ( lg n ) \begin{aligned} \lg f(n)&\leq \lg c+k\lg n\\ &=O(\lg n) \end{aligned} lgf(n)≤lgc+klgn=O(lgn)
又
lg ( n ln ( lg n e ) ) = ln ( lg n e ) lg n = ω ( lg n ) \lg(n^{\ln(\frac{\lg n}{\mathrm{e}})})=\ln(\frac{\lg n}{\mathrm{e}})\lg n=\omega(\lg n) lg(nln(elgn))=ln(elgn)lgn=ω(lgn)
所以函数 ⌈ lg n ⌉ ! \lceil\lg n\rceil! ⌈lgn⌉!多项式无界。
3.2-4(2) 函数 ⌈ lg lg n ⌉ ! \lceil\lg\lg n\rceil! ⌈lglgn⌉!多项式有界吗?已知:
n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n!=\sqrt{2\pi n}(\frac{n}{\mathrm{e}})^n(1+\Theta(\frac{1}{n})) n!=2πn(en)n(1+Θ(n1))
解: 如下。
⌈ lg lg n ⌉ ! = 2 π ⌈ lg lg n ⌉ ( ⌈ lg lg n ⌉ e ) ⌈ lg lg n ⌉ ( 1 + Θ ( 1 ⌈ lg lg n ⌉ ) ) ≤ 2 π ( lg lg n + 1 ) ( ( lg lg n + 1 ) e ) ( lg lg n + 1 ) × 2 \begin{aligned} \lceil\lg\lg n\rceil!&=\sqrt{2\pi \lceil\lg\lg n\rceil}(\frac{\lceil\lg\lg n\rceil}{\mathrm{e}})^{\lceil\lg\lg n\rceil}(1+\Theta(\frac{1}{\lceil\lg\lg n\rceil}))\\ &\leq\sqrt{2\pi (\lg\lg n+1)}(\frac{(\lg\lg n+1)}{\mathrm{e}})^{(\lg\lg n+1)}\times 2\\ \end{aligned} ⌈lglgn⌉!=2π⌈lglgn⌉(e⌈lglgn⌉)⌈lglgn⌉(1+Θ(⌈lglgn⌉1))≤2π(lglgn+1)(e(lglgn+1))(lglgn+1)×2
lg ( ⌈ lg lg n ⌉ ! ) ≤ lg 2 + lg 2 π ( lg lg n + 1 ) + ( lg lg n + 1 ) ( lg ( lg lg n + 1 ) − lg e ) = O ( lg lg n ⋅ lg lg lg n ) = o ( lg lg n ⋅ lg lg n ) = o ( lg 2 lg n ) = o ( lg n ) = o ( n ) \begin{aligned} \lg(\lceil\lg\lg n\rceil!)&\leq \lg2+\lg\sqrt{2\pi (\lg\lg n+1)}+(\lg\lg n+1)(\lg(\lg\lg n+1)-\lg \mathrm{e})\\ &=O(\lg\lg n\cdot \lg\lg\lg n)\\ &=o(\lg\lg n\cdot \lg\lg n)\\ &=o(\lg^2\lg n)\\ &=o(\lg n)\\ &=o(n) \end{aligned} lg(⌈lglgn⌉!)≤lg2+lg2π(lglgn+1)+(lglgn+1)(lg(lglgn+1)−lge)=O(lglgn⋅lglglgn)=o(lglgn⋅lglgn)=o(lg2lgn)=o(lgn)=o(n)
因此函数 ⌈ lg lg n ⌉ ! \lceil\lg\lg n\rceil! ⌈lglgn⌉!多项式有界。
3.2-5 如下两个函数中,哪一个渐进更大些: lg ( lg ∗ n ) \lg(\lg^* n) lg(lg∗n)还是 lg ∗ ( lg n ) \lg^* (\lg n) lg∗(lgn)?
解: 如下。
lg ∗ ( lg n ) = lg ∗ n − 1 = Θ ( lg ∗ n ) = ω ( lg ( lg ∗ n ) ) \lg^* (\lg n)=\lg^* n-1=\Theta(\lg^* n)=\omega(\lg(\lg^* n)) lg∗(lgn)=lg∗n−1=Θ(lg∗n)=ω(lg(lg∗n))
因此 lg ∗ ( lg n ) \lg^* (\lg n) lg∗(lgn)渐进更大些。
3.2-7 用归纳法证明:第 i i i个斐波那契数满足等式
F i = ϕ i − ϕ ^ i 5 F_i=\frac{\phi^i - \hat{\phi}^i}{\sqrt{5}} Fi=5ϕi−ϕ^i
其中 ϕ \phi ϕ是黄金分割率且 ϕ ^ \hat{\phi} ϕ^是其共轭数。
解: 先验证第1、2个斐波那契数满足等式。
F 1 = ϕ − ϕ ^ 5 = 5 5 = 1 F 2 = ϕ 2 − ϕ ^ 2 5 = 1 + 2 5 + 5 4 − 1 − 2 5 + 5 4 5 = 1 \begin{aligned} F_1&=\frac{\phi - \hat{\phi}}{\sqrt{5}}=\frac{\sqrt{5}}{\sqrt{5}}=1\\ F_2&=\frac{\phi^2 - \hat{\phi}^2}{\sqrt{5}}=\frac{\frac{1+2\sqrt{5}+5}{4}-\frac{1-2\sqrt{5}+5}{4}}{\sqrt{5}}=1 \end{aligned} F1F2=5ϕ−ϕ^=55=1=5ϕ2−ϕ^2=541+25+5−41−25+5=1
若 F i − 2 F_{i-2} Fi−2、 F i − 1 F_{i-1} Fi−1满足等式,则
F i = F i − 2 + F i − 1 = ϕ i − 2 − ϕ ^ i − 2 5 + ϕ i − 1 − ϕ ^ i − 1 5 = ϕ i − 2 ( ϕ + 1 ) − ϕ ^ i − 2 ( ϕ ^ + 1 ) 5 = ϕ i − 2 ϕ 2 − ϕ ^ i − 2 ϕ ^ 2 5 = ϕ i − ϕ ^ i 5 \begin{aligned} F_i&=F_{i-2}+F_{i-1}\\ &=\frac{\phi^{i-2} - \hat{\phi}^{i-2}}{\sqrt{5}}+\frac{\phi^{i-1} - \hat{\phi}^{i-1}}{\sqrt{5}}\\ &=\frac{\phi^{i-2}(\phi+1)-\hat{\phi}^{i-2}(\hat{\phi}+1)}{\sqrt{5}}\\ &=\frac{\phi^{i-2}\phi^2-\hat{\phi}^{i-2}\hat{\phi}^2}{\sqrt{5}}\\ &=\frac{\phi^i-\hat{\phi}^i}{\sqrt{5}} \end{aligned} Fi=Fi−2+Fi−1=5ϕi−2−ϕ^i−2+5ϕi−1−ϕ^i−1=5ϕi−2(ϕ+1)−ϕ^i−2(ϕ^+1)=5ϕi−2ϕ2−ϕ^i−2ϕ^2=5ϕi−ϕ^i
3.2-8 求证: k ln k = Θ ( n ) k\ln k=\Theta(n) klnk=Θ(n)蕴含着 k = Θ ( n ln n ) k=\Theta(\frac{n}{\ln n}) k=Θ(lnnn)。
证明: k ln k = Θ ( n ) k\ln k=\Theta(n) klnk=Θ(n),即:
n = Θ ( k ln k ) ln n = Θ ( ln ( k ln k ) ) = Θ ( ln k + ln ln k ) = Θ ( ln k ) n ln n = Θ ( k ln k ) Θ ( ln k ) = Θ ( k ln k ln k ) = Θ ( k ) \begin{aligned} n&=\Theta(k\ln k)\\ \ln n&=\Theta(\ln(k\ln k))\\ &=\Theta(\ln k+\ln\ln k)\\ &=\Theta(\ln k)\\ \frac{n}{\ln n}&=\frac{\Theta(k\ln k)}{\Theta(\ln k)}=\Theta(\frac{k\ln k}{\ln k})=\Theta(k) \end{aligned} nlnnlnnn=Θ(klnk)=Θ(ln(klnk))=Θ(lnk+lnlnk)=Θ(lnk)=Θ(lnk)Θ(klnk)=Θ(lnkklnk)=Θ(k)
即
k = Θ ( n ln n ) k=\Theta(\frac{n}{\ln n}) k=Θ(lnnn)