【算法导论】第3章 函数的增长 (2)


Part I. Foundations
Chapter 3. Growth of Functions


3.2 标准记号和常用函数

单调性(monotonicity)

函数 f ( n ) f(n) f(n) 单调递增(monotonically increasing): m ≤ n ⇒ f ( m ) ≤ f ( n ) m \le n \Rightarrow f(m) \le f(n) mnf(m)f(n)
函数 f ( n ) f(n) f(n) 单调递减(monotonically decreasing): m ≤ n ⇒ f ( m ) ≥ f ( n ) m \le n \Rightarrow f(m) \ge f(n) mnf(m)f(n)
函数 f ( n ) f(n) f(n) 严格递增(strictly increasing): m < n ⇒ f ( m ) < f ( n ) m < n \Rightarrow f(m) < f(n) m<nf(m)<f(n)
函数 f ( n ) f(n) f(n) 严格递增(strictly decreasing): m < n ⇒ f ( m ) > f ( n ) m < n \Rightarrow f(m) > f(n) m<nf(m)>f(n)

下取整(floor)和上取整(ceiling)

对于任何实数 x x x,我们用 ⌊ x ⌋ \lfloor x \rfloor x(读作“ x x x 的下取整”)表示小于或等于 x x x 的最大整数,用 ⌈ x ⌉ \lceil x \rceil x(读作“ x x x的上取整”)表示大于或等于 x x x 的最小整数。 对于所有实数 x x x,有
x − 1 < ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ < x + 1 x-1 < \lfloor x \rfloor \le x \le \lceil x \rceil < x+1 x1<xxx<x+1。     (3.3)
对于任何整数 n n n,有 ⌊ n / 2 ⌋ + ⌈ n / 2 ⌉ = n \lfloor n/2 \rfloor + \lceil n/2 \rceil = n n/2+n/2=n
对任意实数 x ≥ 0 x \ge 0 x0 和整数 a , b > 0 a,b > 0 a,b>0
⌈ ⌈ x / a ⌉ b ⌉ = ⌈ x a b ⌉ \lceil \frac{\lceil x/a \rceil}{b} \rceil = \lceil \frac {x} {ab} \rceil bx/a=abx,         (3.4)
⌊ ⌊ x / a ⌋ b ⌋ = ⌊ x a b ⌋ \lfloor \frac{\lfloor x/a \rfloor}{b} \rfloor = \lfloor \frac {x} {ab} \rfloor bx/a=abx,         (3.5)
⌈ a b ⌉ ≤ a + ( b − 1 ) b \lceil \frac{a}{b} \rceil \le \frac {a+(b-1)} {b} baba+(b1),         (3.6)
⌊ a b ⌋ ≥ a − ( b − 1 ) b \lfloor \frac{a}{b} \rfloor \ge \frac {a-(b-1)} {b} baba(b1)。         (3.7)
函数 f ( x ) = ⌊ x ⌋ f(x) = \lfloor x \rfloor f(x)=x 单调递增,函数 f ( x ) = ⌈ x ⌉ f(x) = \lceil x \rceil f(x)=x 单调递增。

取模运算(modular arithmetic)

对于任意整数 a a a 和任意正整数 n n n a m o d    n a \mod n amodn 的值是商 a / n a/n a/n余数(remainder / residue):
a m o d    n = a − n ⌊ a / n ⌋ a \mod n = a - n \lfloor a/n \rfloor amodn=ana/n。         (3.8)
由此得出 0 ≤ a m o d    n < n 0 \le a \mod n < n 0amodn<n。       (3.9)
如果 ( a m o d    n ) = ( b m o d    n ) (a \mod n) = (b \mod n) (amodn)=(bmodn),那么可以写作 a ≡ b a \equiv b ab ( m o d    n ) \mod n) modn),称在模 n n n 时, a a a 等于 b b b
a ≡ b a \equiv b ab ( m o d    n ) \mod n) modn) 当且仅当 n n n b − a b-a ba 的约数。
如果模数为 n n n a a a 不等于 b b b,那么写作 a ≢ b a \not \equiv b ab ( m o d    n ) \mod n) modn)

多项式(polynomial)

给定一个非负整数 d d d n n n d d d 次多项式(polynomial in n of degree d)是具有以下形式的函数 p ( n ) p(n) p(n)
p ( n ) = ∑ i = 0 d a i n i p(n) = \sum_{i=0}^{d} a_in^i p(n)=i=0daini
其中常数 a 0 , a 1 , … , a d a_0,a_1,\dots,a_d a0,a1,,ad 是多项式的系数(coefficients),且 a d ≠ 0 a_d \ne 0 ad=0
一个多项式是渐近正的,当且仅当 a d > 0 a_d> 0 ad>0
对于一个 d d d 次的渐近正多项式 p ( n ) p(n) p(n),有 p ( n ) = Θ ( n d ) p(n) = \Theta(n^d) p(n)=Θ(nd)
对于任意实常数 a ≥ 0 a \ge 0 a0,函数 n a n^a na 单调递增;对于任意实常数 a ≤ 0 a \le 0 a0,函数 n a n^a na 单调递减。
若对于某个常数 k k k f ( n ) = O ( n k ) f(n) = O(n^k) f(n)=O(nk),则函数 f ( n ) f(n) f(n)多项式有界的(polynomially bounded)。

指数(exponential)

对任意实数 a > 0 a>0 a>0 m m m n n n,有下列恒等式:
a 0 = 1 a^0=1 a0=1 a 1 = a a^1=a a1=a a − 1 = 1 / a a^{-1}=1/a a1=1/a
( a m ) n = a m n (a^{m})^{n}=a^{mn} (am)n=amn ( a m ) n = ( a n ) m (a^{m})^{n}=(a^{n})^{m} (am)n=(an)m a m a n = a m + n a^{m}a^{n}=a^{m+n} aman=am+n
对任意 n n n a ≥ 1 a \ge 1 a1,函数 a n a^n an 关于 n n n 单调递增。
方便的情况下,假设 0 0 = 1 0^0=1 00=1
对任意实数 a a a b b b,且 a > 1 a>1 a>1,有 lim ⁡ n → ∞ n b a n = 0 \lim_{n\to\infty} \frac{n^b}{a^n} = 0 limnannb=0,     (3.10)
根据此式,得 n b = o ( a n ) n^b = o(a^n) nb=o(an)
因此,任何底数大于 1 的指数函数比任何多项式函数增长地更快。
e e e 表示自然对数函数的底数 2.71828…,对于所有实数 x x x
e x = 1 + x + x 2 2 ! + x 3 3 ! + ⋯ = ∑ i = 0 ∞ x i i ! e^x = 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+ \cdots = \sum_{i=0}^{\infty} \frac{x^i}{i!} ex=1+x+2!x2+3!x3+=i=0i!xi。     (3.11)
对于任意实数 x x x,有不等式 e x ≥ 1 + x e^x \ge 1+x ex1+x,       (3.12)
只有当 x = 0 x=0 x=0 时,等号才成立。
∣ x ∣ ≤ 1 |x| \le 1 x1 时,有近似式 1 + x ≤ e x ≤ 1 + x + x 2 1+x \le e^x \le 1+x+x^2 1+xex1+x+x2。       (3.13)
x → 0 x \to 0 x0 时,用 1 + x 1+x 1+x 来近似 e x e^x ex 的效果相当好:
e x = 1 + x + Θ ( x 2 ) e^x = 1+x+\Theta(x^2) ex=1+x+Θ(x2)
对任意的 x x x,有 lim ⁡ n → ∞ ( 1 + x n ) n = e x \lim_{n\to\infty} (1 + \frac{x}{n})^n = e^x limn(1+nx)n=ex。         (3.14)

对数(logarithm)

我们将用到下列记号:
lg ⁡ n = log ⁡ 2 n \lg n = \log_2 n lgn=log2n(以 2 为底的对数:binary logarithm),
ln ⁡ n = log ⁡ e n \ln n = \log_e n lnn=logen(自然对数:natural logarithm),
lg ⁡ k n = ( lg ⁡ n ) k \lg^k n = (\lg n)^k lgkn=(lgn)k(取幂:exponentiation),
lg ⁡ lg ⁡ n = lg ⁡ ( lg ⁡ n ) \lg \lg n = \lg(\lg n) lglgn=lg(lgn)(复合:composition)。
我们将采用一个重要的记号约定:对数函数仅作用于函数的下一项。因此, lg ⁡ n + k \lg n+k lgn+k 表示 ( lg ⁡ n ) + k (\lg n)+k (lgn)+k
如果常数 b > 1 b>1 b>1,那么函数 log ⁡ b n \log_b n logbn 关于 n > 0 n>0 n>0 严格递增。
对任意实数 a > 0 a>0 a>0 b > 0 b>0 b>0 c > 0 c>0 c>0 n n n
a = b log ⁡ b a a = b^{\log_b a} a=blogba
log ⁡ c ( a b ) = log ⁡ c a + log ⁡ c b \log_c (ab) = \log_c a + \log_c b logc(ab)=logca+logcb
log ⁡ b a n = n log ⁡ b a \log_b a^n = n\log_b a logban=nlogba
log ⁡ b a = log ⁡ c a log ⁡ c b \log_b a = \frac{\log_c a}{\log_c b} logba=logcblogca,         (3.15)
log ⁡ b 1 / a = − log ⁡ b a \log_b 1/a = -\log_b a logb1/a=logba
log ⁡ b a = 1 log ⁡ a b \log_b a = \frac {1}{\log_a b} logba=logab1
a log ⁡ b c = c log ⁡ b a a^{\log_b c} = c^{\log_b a} alogbc=clogba,         (3.16)
在上面的每个公式中,对数的底数不为 1。
∣ x ∣ < 1 |x| < 1 x<1 时, ln ⁡ ( 1 + x ) \ln(1+x) ln(1+x) 的简单级数展开为:
ln ⁡ ( 1 + x ) = x − x 2 2 + x 3 3 − x 4 4 + x 5 5 − ⋯ \ln(1+x) = x - \frac{x^2}{2} + \frac{x^3}{3} - \frac{x^4}{4} + \frac{x^5}{5} - \cdots ln(1+x)=x2x2+3x34x4+5x5
x > − 1 x>-1 x>1 时,有 x 1 + x ≤ ln ⁡ ( 1 + x ) ≤ x \frac{x}{1+x} \le \ln(1+x) \le x 1+xxln(1+x)x,         (3.17)
只有当 x = 0 x=0 x=0 时,等号成立。
若对常数 k k k,有 f ( n ) = O ( lg ⁡ k n ) f(n) = O(\lg^k n) f(n)=O(lgkn),则称函数 f ( n ) f(n) f(n)多项对数有界的(polylogarithmically bounded)。
在公式 (3.10) 中,用 lg ⁡ n \lg n lgn 代替 n n n,用 2 a 2^a 2a 代替 a a a,将多项式的增长率与多项对数的增长率联系起来:
lim ⁡ n → ∞ lg ⁡ b n ( 2 a ) lg ⁡ n = lim ⁡ n → ∞ lg ⁡ b n n a = 0 \lim_{n\to\infty} \frac{\lg^b n}{(2^a)^{\lg n}} = \lim_{n\to\infty} \frac{\lg^b n}{n^a} = 0 limn(2a)lgnlgbn=limnnalgbn=0
由此极限式,得出结论:对于任意常数 a > 0 a>0 a>0,有 lg ⁡ b n = o ( n a ) \lg^b n = o(n^a) lgbn=o(na)
因此,任意正的多项式函数比多项对数函数增长地快。

阶乘(factorial)

n ! = { 1 i f   n = 0 n ⋅ ( n − 1 ) ! i f   n > 0 n!=\left\{ \begin{array}{rcl} 1 & & {\mathrm{if} \ n=0} \\n\cdot (n-1)! & & \mathrm{if} \ n>0 \end{array} \right. n!={1n(n1)!if n=0if n>0
阶乘函数的一个弱上界是 n ! ≤ n n n! \le n^n n!nn
斯特林近似公式(Stirling’s approximation):
n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n! = \sqrt{2 \pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n})) n!=2πn (en)n(1+Θ(n1)),         (3.18)
给出了更紧确的上界和下界。
斯特林近似公式有助于证明公式 lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg (n!) = \Theta(n\lg n) lg(n!)=Θ(nlgn)。       (3.19)
对于所有 n ≥ 1 n \ge 1 n1,有 n ! = 2 π n ( n e ) n e α n n! = \sqrt{2 \pi n}(\frac{n}{e})^n e^{\alpha_n} n!=2πn (en)neαn,      (3.20)
其中, 1 12 n + 1 ≤ α n ≤ 1 12 n \frac{1}{12n+1} \le \alpha_n \le \frac{1}{12n} 12n+11αn12n1。        (3.21)

函数迭代(functional iteration)

用记号 f ( i ) ( n ) f^{(i)}(n) f(i)(n) 表示函数 f ( n ) f(n) f(n) 重复 i i i 次作用于一个初始值 n n n 上。
f ( i ) ( n ) = { n i f   i = 0 f ( f ( i − 1 ) ( n ) ) i f   i > 0 f^{(i)}(n)=\left\{\begin{array}{rcl} n & & \mathrm{if} \ i=0 \\f(f^{(i-1)}(n)) && \mathrm{if} \ i>0 \end{array}\right. f(i)(n)={nf(f(i1)(n))if i=0if i>0
例如,如果 f ( n ) = 2 n f(n)=2n f(n)=2n,那么 f ( i ) ( n ) = 2 i n f^{(i)}(n) = 2^i n f(i)(n)=2in

多重对数函数(the iterated logarithm function)

定义: lg ⁡ ∗ n = min ⁡ { i ≥ 0 : lg ⁡ ( i ) n ≤ 1 } \lg^* n = \min \{ i\ge0:\lg^{(i)} n \le 1 \} lgn=min{i0:lg(i)n1}
多重对数是一种增长很慢的函数:
lg ⁡ ∗ 2 = 1 \lg^* 2 = 1 lg2=1 lg ⁡ ∗ 4 = 2 \lg^* 4=2 lg4=2 lg ⁡ ∗ 16 = 3 \lg^* 16 = 3 lg16=3 lg ⁡ ∗ 65536 = 4 \lg^* 65536 = 4 lg65536=4 lg ⁡ ∗ ( 2 65536 ) = 5 \lg^*(2^{65536}) = 5 lg(265536)=5

斐波那契数列(Fibonacci numbers)

递归地定义:
F 0 = 0 F_0 = 0 F0=0
F 1 = 1 F_1 = 1 F1=1,                         (3.22)
F i = F i − 1 + F i − 2 F_i = F_{i-1} + F_{i-2} Fi=Fi1+Fi2   当 i ≥ 2 i \ge 2 i2 时。
斐波那契数与黄金分割率(golden ratio) ϕ \phi ϕ 及其共轭(conjugate) ϕ ^ \widehat\phi ϕ 相关,是下面方程的两个根:
x 2 = x + 1 x^2 = x +1 x2=x+1,       (3.23)
ϕ = 1 + 5 2 = 1.61803... \phi = \frac{1+\sqrt{5}}{2} = 1.61803... ϕ=21+5 =1.61803...,       (3.24)
ϕ ^ = 1 − 5 2 = − 0.61803... \widehat{\phi} = \frac{1-\sqrt{5}}{2} = -0.61803... ϕ =215 =0.61803...
特别地,有 F i = ϕ i − ϕ ^ i 5 F_i = \frac{\phi^i - \widehat\phi^i}{\sqrt5} Fi=5 ϕiϕ i,可以用归纳法证明。
因为 ∣ ϕ ^ ∣ < 1 |\widehat\phi| < 1 ϕ <1,有 ∣ ϕ ^ i ∣ 5 < 1 5 < 1 2 \frac{|\widehat\phi^i|}{\sqrt5} < \frac{1}{\sqrt5} < \frac{1}{2} 5 ϕ i<5 1<21
推出 F i = ⌊ ϕ i 5 + 1 2 ⌋ F_i = \lfloor \frac{\phi^i}{\sqrt5} + \frac{1}{2} \rfloor Fi=5 ϕi+21,       (3.25)
也就是说,第 i i i 个斐波那契数 F i F_i Fi 等于 ϕ i / 5 \phi^i / \sqrt5 ϕi/5 四舍五入后的整数 。
因此,斐波那契数呈指数增长。

练习

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 \le n_2 n1n2,则有 f ( n 1 ) ≤ f ( n 2 ) f(n_1) \le f(n_2) f(n1)f(n2) g ( n 1 ) ≤ g ( n 2 ) g(n_1) \le g(n_2) g(n1)g(n2)
f ( n 1 ) + g ( n 1 ) ≤ f ( n 2 ) + g ( n 2 ) f(n_1)+g(n_1) \le f(n_2)+g(n_2) f(n1)+g(n1)f(n2)+g(n2) f ( g ( n 1 ) ) ≤ f ( g ( n 2 ) ) f(g(n_1)) \le f(g(n_2)) f(g(n1))f(g(n2))
所以,函数 f ( n ) + g ( n ) f(n)+g(n) f(n)+g(n) f ( g ( n ) ) f(g(n)) f(g(n)) 是单调递增函数。
因为对任意 n n n,有 f ( n ) ≥ 0 f(n) \ge 0 f(n)0 g ( n ) ≥ 0 g(n) \ge 0 g(n)0
f ( n 1 ) ⋅ g ( n 1 ) ≤ f ( n 2 ) ⋅ g ( n 2 ) f(n_1)\cdot g(n_1) \le f(n_2)\cdot g(n_2) f(n1)g(n1)f(n2)g(n2)
所以, f ( n ) ⋅ g ( n ) f(n)\cdot g(n) f(n)g(n) 单调递增。

3.2-2 证明等式 (3.16)。
证: 即证明等式 a log ⁡ b c = c log ⁡ b a a^{\log_b c} = c^{\log_b a} alogbc=clogba
a log ⁡ b c = ( b log ⁡ b a ) log ⁡ b c = b log ⁡ b a ⋅ log ⁡ b c = b log ⁡ b c ⋅ log ⁡ b a = c log ⁡ b a a^{\log_b c} = (b^{\log_b a})^{\log_b c} = b^{\log_b a\cdot\log_b c} = b^{\log_b c\cdot\log_b a} = c^{\log_b a} alogbc=(blogba)logbc=blogbalogbc=blogbclogba=clogba

3.2-3 证明等式 (3.19),并证明 n ! = ω ( 2 n ) n! = \omega(2^n) n!=ω(2n) n ! = o ( n n ) n! = o(n^n) n!=o(nn)
证: 即证明等式 lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg (n!) = \Theta(n\lg n) lg(n!)=Θ(nlgn)
根据斯特林近似公式,得
lg ⁡ ( n ! ) = lg ⁡ ( 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) ) = lg ⁡ ( 2 π n ) + lg ⁡ ( n e ) n + lg ⁡ ( 1 + Θ ( 1 n ) ) = 1 2 lg ⁡ ( 2 π ) + 1 2 lg ⁡ n + n lg ⁡ n + n lg ⁡ ( 1 e ) + lg ⁡ ( 1 + Θ ( 1 n ) ) = Θ ( 1 ) + Θ ( lg ⁡ n ) + Θ ( n lg ⁡ n ) + Θ ( n ) + lg ⁡ ( 1 + Θ ( 1 n ) ) = Θ ( n lg ⁡ n ) \lg (n!) = \lg (\sqrt{2 \pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n}))) \\= \lg(\sqrt{2 \pi n}) + \lg (\frac{n}{e})^n + \lg (1+\Theta(\frac{1}{n})) \\= \frac{1}{2} \lg(2\pi) + \frac{1}{2} \lg n + n\lg n + n\lg (\frac{1}{e}) + \lg (1+\Theta(\frac{1}{n})) \\= \Theta(1) + \Theta(\lg n) + \Theta(n\lg n) + \Theta(n) + \lg (1+\Theta(\frac{1}{n})) \\=\Theta(n \lg n) lg(n!)=lg(2πn (en)n(1+Θ(n1)))=lg(2πn )+lg(en)n+lg(1+Θ(n1))=21lg(2π)+21lgn+nlgn+nlg(e1)+lg(1+Θ(n1))=Θ(1)+Θ(lgn)+Θ(nlgn)+Θ(n)+lg(1+Θ(n1))=Θ(nlgn)
因为 lim ⁡ n → ∞ n ! 2 n = lim ⁡ n → ∞ 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) 2 n = lim ⁡ n → ∞ 2 π n ( n 2 e ) n = ∞ \lim_{n \to \infty} \frac {n!} {2^n} = \lim_{n \to \infty} \frac {\sqrt{2 \pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n}))} {2^n} = \lim_{n \to \infty}\sqrt{2 \pi n} (\frac {n} {2e})^n = \infty limn2nn!=limn2n2πn (en)n(1+Θ(n1))=limn2πn (2en)n=,所以 n ! = ω ( 2 n ) n! = \omega(2^n) n!=ω(2n)
因为 lim ⁡ n → ∞ n ! n n = lim ⁡ n → ∞ 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) n n = lim ⁡ n → ∞ 2 π n e n = 0 \lim_{n \to \infty} \frac {n!} {n^n} = \lim_{n \to \infty} \frac {\sqrt{2 \pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n}))} {n^n} = \lim_{n \to \infty} \frac {\sqrt{2 \pi n}} {e^n} = 0 limnnnn!=limnnn2πn (en)n(1+Θ(n1))=limnen2πn =0,所以 n ! = o ( n n ) n! = o(n^n) n!=o(nn)

3.2-4 ★ \bigstar
函数 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! lgn! 是多项式有界的吗?函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! lglgn! 呢?
解: 函数 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! lgn! 不是多项式有界的,函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! lglgn! 是多项式有界的。

证明函数 f ( n ) f(n) f(n) 是多项式有界的,等价于证明 lg ⁡ ( f ( n ) ) = O ( lg ⁡ n ) \lg (f(n)) = O(\lg n) lg(f(n))=O(lgn)。理由如下:
① 如果 f f f 是多项式有界的,那么存在常数 c c c k k k n 0 n_0 n0,对于所有的 n ≥ n 0 n\ge n_0 nn0,有 f ( n ) ≤ c n k f(n) \le cn^k f(n)cnk
因此, lg ⁡ ( f ( n ) ) ≤ c k lg ⁡ n \lg (f(n)) \le ck \lg n lg(f(n))cklgn,因为 c c c k k k 是常数,意味着 lg ⁡ ( f ( n ) ) = O ( lg ⁡ n ) \lg (f(n)) = O(\lg n) lg(f(n))=O(lgn)
因此, lg ⁡ ( f ( n ) ) ≤ lg ⁡ ( c n k ) \lg (f(n)) \le \lg (cn^k) lg(f(n))lg(cnk),而 lg ⁡ ( c n k ) = lg ⁡ c + k lg ⁡ n \lg (cn^k) = \lg c + k\lg n lg(cnk)=lgc+klgn。当 0 < c ≤ 1 0<c \le 1 0<c1 时, lg ⁡ c ≤ 0 \lg c \le 0 lgc0,得 lg ⁡ ( f ( n ) ) ≤ k lg ⁡ n \lg (f(n)) \le k \lg n lg(f(n))klgn,因为存在常数 0 < c ≤ 1 0<c\le 1 0<c1 k k k,意味着 lg ⁡ ( f ( n ) ) = O ( lg ⁡ n ) \lg (f(n)) = O(\lg n) lg(f(n))=O(lgn)
② 相似地,如果 lg ⁡ ( f ( n ) ) = O ( lg ⁡ n ) \lg (f(n)) = O(\lg n) lg(f(n))=O(lgn),那么 f f f 是多项式有界的。

在下面的证明中,要用到两个等式:
lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg (n!) = \Theta(n\lg n) lg(n!)=Θ(nlgn)(等式 (3.19))
⌈ lg ⁡ n ⌉ = Θ ( lg ⁡ n ) \lceil \lg n \rceil = \Theta(\lg n) lgn=Θ(lgn),因为 ⌈ lg ⁡ n ⌉ ≥ lg ⁡ n \lceil \lg n \rceil \ge \lg n lgnlgn,且对于所有的 n ≥ 2 n \ge 2 n2,有 ⌈ lg ⁡ n ⌉ < lg ⁡ n + 1 ≤ 2 lg ⁡ n \lceil \lg n \rceil < \lg n + 1 \le 2\lg n lgn<lgn+12lgn

lg ⁡ ( ⌈ lg ⁡ n ⌉ ! ) = Θ ( ⌈ lg ⁡ n ⌉ lg ⁡ ( ⌈ lg ⁡ n ⌉ ) ) = Θ ( lg ⁡ n lg ⁡ lg ⁡ n ) = ω ( lg ⁡ n ) \lg (\lceil \lg n \rceil !) = \Theta(\lceil \lg n \rceil\lg (\lceil \lg n \rceil)) = \Theta(\lg n \lg \lg n) = \omega(\lg n) lg(lgn!)=Θ(lgnlg(lgn))=Θ(lgnlglgn)=ω(lgn)
因此, lg ⁡ ( ⌈ lg ⁡ n ⌉ ! ) ≠ O ( lg ⁡ n ) \lg (\lceil \lg n \rceil !) \not= O(\lg n) lg(lgn!)=O(lgn),所以 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! lgn! 不是多项式有界的。

lg ⁡ ( ⌈ lg ⁡ lg ⁡ n ⌉ ! ) = Θ ( lg ⁡ lg ⁡ n lg ⁡ lg ⁡ lg ⁡ n ) = o ( ( lg ⁡ lg ⁡ n ) 2 ) = o ( lg ⁡ 2 ( lg ⁡ n ) ) = o ( lg ⁡ n ) \lg (\lceil \lg \lg n \rceil !) = \Theta(\lg \lg n \lg \lg \lg n) = o((\lg \lg n)^2) = o(\lg^2(\lg n)) =o(\lg n) lg(lglgn!)=Θ(lglgnlglglgn)=o((lglgn)2)=o(lg2(lgn))=o(lgn)
因为任意多项对数函数都比任意正的多项式函数增长地慢,即对于任意常数 a , b > 0 a,b>0 a,b>0,有 lg ⁡ b n = o ( n a ) \lg^b n = o(n^a) lgbn=o(na)。将 n n n 替换成 lg ⁡ n \lg n lgn,令 b = 1 b=1 b=1 a = 1 a=1 a=1,得 lg ⁡ 2 ( lg ⁡ n ) = o ( lg ⁡ n ) \lg^2(\lg n) = o(\lg n) lg2(lgn)=o(lgn)。所以上面的最后一步成立。
因此, lg ⁡ ( ⌈ lg ⁡ lg ⁡ n ⌉ ! ) = O ( lg ⁡ n ) \lg (\lceil \lg \lg n \rceil !) = O(\lg n) lg(lglgn!)=O(lgn),所以 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! lglgn! 是多项式有界的。

3.2-5 ★ \bigstar
哪个在渐近上更大一些: lg ⁡ ( lg ⁡ ∗ n ) \lg (\lg^* n) lg(lgn),还是 lg ⁡ ∗ ( lg ⁡ n ) \lg^*(\lg n) lg(lgn)
解: lg ⁡ ∗ ( lg ⁡ n ) \lg^*(\lg n) lg(lgn) 在渐近上更大些。
lg ⁡ ∗ n \lg^* n lgn 的定义,得
lg ⁡ ∗ n = { 0 i f   n ≤ 1 1 + lg ⁡ ∗ ( lg ⁡ n ) i f   n > 1 \lg^* n=\left\{\begin{array}{rcl} 0 & & \mathrm{if} \ n \le 1 \\1+\lg^*(\lg n) && \mathrm{if} \ n>1 \end{array}\right. lgn={01+lg(lgn)if n1if n>1

0 < n ≤ 1 0 < n \le 1 0<n1 时, lg ⁡ ∗ n = 0 \lg^* n = 0 lgn=0 lg ⁡ ( lg ⁡ ∗ n ) \lg (\lg^* n) lg(lgn) 不存在。
n > 1 n>1 n>1 时, lg ⁡ ( lg ⁡ ∗ n ) = lg ⁡ ( 1 + lg ⁡ ∗ ( lg ⁡ n ) ) \lg (\lg^* n) = \lg(1+\lg^*(\lg n)) lg(lgn)=lg(1+lg(lgn))

1 < n ≤ 2 1<n \le 2 1<n2 时, 0 < lg ⁡ n ≤ 1 0 < \lg n \le 1 0<lgn1 lg ⁡ ∗ ( lg ⁡ n ) = 0 \lg^*(\lg n) = 0 lg(lgn)=0
n > 2 n>2 n>2 时, lg ⁡ n > 1 \lg n > 1 lgn>1 lg ⁡ ∗ ( lg ⁡ n ) = 1 + lg ⁡ ∗ ( lg ⁡ lg ⁡ n ) \lg^*(\lg n) = 1 + \lg^*(\lg\lg n) lg(lgn)=1+lg(lglgn)

f ( n ) = lg ⁡ ∗ ( lg ⁡ n ) f(n) = \lg^*(\lg n) f(n)=lg(lgn),则
lim ⁡ n → ∞ lg ⁡ ( lg ⁡ ∗ n ) lg ⁡ ∗ ( lg ⁡ n ) = lim ⁡ n → ∞ lg ⁡ ( 1 + lg ⁡ ∗ ( lg ⁡ n ) ) lg ⁡ ∗ ( lg ⁡ n ) = lim ⁡ n → ∞ lg ⁡ ( 1 + f ( n ) ) f ( n ) = 0 \lim_{n \to \infty} \frac{\lg (\lg^* n)}{\lg^*(\lg n)} = \lim_{n \to \infty} \frac{\lg(1+\lg^*(\lg n))}{\lg^*(\lg n)} = \lim_{n \to \infty} \frac{\lg(1+f(n))}{f(n)} = 0 limnlg(lgn)lg(lgn)=limnlg(lgn)lg(1+lg(lgn))=limnf(n)lg(1+f(n))=0
因为 lim ⁡ n → ∞ f ( n ) = ∞ \lim_{n \to \infty} f(n) = \infty limnf(n)=,所以上式最后一步成立。
则有 lg ⁡ ( lg ⁡ ∗ n ) = ω ( lg ⁡ ∗ ( lg ⁡ n ) ) \lg (\lg^* n) = \omega(\lg^*(\lg n)) lg(lgn)=ω(lg(lgn)),所以 lg ⁡ ∗ ( lg ⁡ n ) \lg^*(\lg n) lg(lgn) 在渐近上更大些。

3.2-6 证明黄金分割率 ϕ \phi ϕ 及其共轭数 ϕ ^ \widehat\phi ϕ 都满足等式 x 2 = x + 1 x^2 = x + 1 x2=x+1
证: ϕ = 1 + 5 2 \phi = \frac{1+\sqrt{5}}{2} ϕ=21+5 ϕ ^ = 1 − 5 2 \widehat{\phi} = \frac{1-\sqrt{5}}{2} ϕ =215
ϕ 2 = 3 + 5 2 \phi^2 = \frac{3+\sqrt5}{2} ϕ2=23+5 ϕ + 1 = 3 + 5 2 \phi+1 = \frac{3+\sqrt5}{2} ϕ+1=23+5 ,满足等式 ϕ 2 = ϕ + 1 \phi^2 = \phi + 1 ϕ2=ϕ+1
ϕ ^ 2 = 3 − 5 2 \widehat\phi^2 = \frac{3-\sqrt5}{2} ϕ 2=235 ϕ ^ + 1 = 3 − 5 2 \widehat\phi+1 = \frac{3-\sqrt5}{2} ϕ +1=235 ,满足等式 ϕ ^ 2 = ϕ ^ + 1 \widehat\phi^2 = \widehat\phi + 1 ϕ 2=ϕ +1

把一条线段分割为两部分,使较大部分与全长的比值等于较小部分与较大的比值,则这个比值即为黄金分割。其比值是 (√5-1) : 2,近似值为 0.618,通常用希腊字母 Ф 表示这个值。
x 1 = 1 − x x \frac{x}{1} = \frac{1-x}{x} 1x=x1x。1 / 0.618… = 1.618…

3.2-7 用归纳法证明:第 i i i 个斐波那契数满足等式 F i = ϕ i − ϕ ^ i 5 F_i = \frac{\phi^i - \widehat\phi^i}{\sqrt5} Fi=5 ϕiϕ i,其中 ϕ \phi ϕ 是黄金分割率, ϕ ^ \widehat\phi ϕ 是其共轭数。
证: ① 当 i = 0 i=0 i=0 时, F 0 = ϕ 0 − ϕ ^ 0 5 = 0 F_0 = \frac{\phi^0 - \widehat\phi^0}{\sqrt5} = 0 F0=5 ϕ0ϕ 0=0,命题成立。当 i = 1 i=1 i=1 时, F 1 = ϕ 1 − ϕ ^ 1 5 = 1 F_1 = \frac{\phi^1 - \widehat\phi^1}{\sqrt5} = 1 F1=5 ϕ1ϕ 1=1,命题成立。
② 假设第 i − 1 i-1 i1 个斐波那契数满足等式 F i − 1 = ϕ i − 1 − ϕ ^ i − 1 5 F_{i-1} = \frac{\phi^{i-1} - \widehat\phi^{i-1}}{\sqrt5} Fi1=5 ϕi1ϕ i1,第 i − 2 i-2 i2 个斐波那契数满足等式 F i − 2 = ϕ i − 2 − ϕ ^ i − 2 5 F_{i-2} = \frac{\phi^{i-2} - \widehat\phi^{i-2}}{\sqrt5} Fi2=5 ϕi2ϕ i2,其中, i ≥ 2 i\ge 2 i2
那么,第 i i i 个斐波那契数
F i = F i − 1 + F i − 2 = ϕ i − 1 − ϕ ^ i − 1 5 + ϕ i − 2 − ϕ ^ i − 2 5 = ( ϕ + 1 ) ⋅ ϕ i − 2 − ( ϕ ^ + 1 ) ⋅ ϕ ^ i − 2 5 = ( ϕ 2 ) ⋅ ϕ i − 2 − ( ϕ ^ 2 ) ⋅ ϕ ^ i − 2 5 = ϕ i − ϕ ^ i 5 F_i = F_{i-1} + F_{i-2} \\= \frac{\phi^{i-1} - \widehat\phi^{i-1}}{\sqrt5} + \frac{\phi^{i-2} - \widehat\phi^{i-2}}{\sqrt5} = \frac{(\phi+1)\cdot\phi^{i-2} - (\widehat\phi+1)\cdot\widehat\phi^{i-2}}{\sqrt5} \\= \frac{(\phi^2)\cdot\phi^{i-2} - (\widehat\phi^2)\cdot\widehat\phi^{i-2}}{\sqrt5} \\= \frac{\phi^i - \widehat\phi^i}{\sqrt5} Fi=Fi1+Fi2=5 ϕi1ϕ i1+5 ϕi2ϕ i2=5 (ϕ+1)ϕi2(ϕ +1)ϕ i2=5 (ϕ2)ϕi2(ϕ 2)ϕ i2=5 ϕiϕ i
上面的倒数第二步,见练习 3.2-6,有 ϕ 2 = ϕ + 1 \phi^2 = \phi + 1 ϕ2=ϕ+1 ϕ ^ 2 = ϕ ^ + 1 \widehat\phi^2 = \widehat\phi + 1 ϕ 2=ϕ +1。命题成立。
综上,第 i i i 个斐波那契数满足等式 F i = ϕ i − ϕ ^ i 5 F_i = \frac{\phi^i - \widehat\phi^i}{\sqrt5} Fi=5 ϕiϕ i

3.2-8 证明: k ln ⁡ k = Θ ( n ) k\ln k = \Theta(n) klnk=Θ(n) 可推导出 k = Θ ( n / ln ⁡ n ) k = \Theta(n/\ln n) k=Θ(n/lnn)
证: 由渐近记号的对称性,得 n = Θ ( k ln ⁡ k ) n=\Theta(k\ln k) n=Θ(klnk)
那么 ln ⁡ n = Θ ( ln ⁡ ( k ln ⁡ k ) ) = Θ ( ln ⁡ k + ln ⁡ ln ⁡ k ) = Θ ( ln ⁡ k ) \ln n = \Theta(\ln(k\ln k)) = \Theta(\ln k + \ln\ln k) = \Theta(\ln k) lnn=Θ(ln(klnk))=Θ(lnk+lnlnk)=Θ(lnk)
所以 n / ln ⁡ n = Θ ( k ln ⁡ k ) / Θ ( ln ⁡ k ) = Θ ( k ) n/\ln n = \Theta(k\ln k)/\Theta(\ln k) = \Theta(k) n/lnn=Θ(klnk)/Θ(lnk)=Θ(k)
由对称性,得 k = Θ ( n / ln ⁡ n ) k = \Theta(n / \ln n) k=Θ(n/lnn),得证。


思考题

3-1 多项式的渐近性质
p ( n ) = ∑ i = 0 d a i n i p(n) = \sum_{i=0}^{d} a_in^i p(n)=i=0daini 是一个 n n n d d d 次多项式,其中 a d > 0 a_d > 0 ad>0,令 k k k 为一个常数。利用渐近记号的定义来证明如下性质:
a. k ≥ d k \ge d kd,则 p ( n ) = O ( n k ) p(n) = O(n^k) p(n)=O(nk)
b. k ≤ d k \le d kd,则 p ( n ) = Ω ( n k ) p(n) = \Omega(n^k) p(n)=Ω(nk)
c. k = d k = d k=d,则 p ( n ) = Θ ( n k ) p(n) = \Theta(n^k) p(n)=Θ(nk)
d. k > d k > d k>d,则 p ( n ) = o ( n k ) p(n) = o(n^k) p(n)=o(nk)
e. k < d k < d k<d,则 p ( n ) = ω ( n k ) p(n) = \omega(n^k) p(n)=ω(nk)

证: p ( n ) = a 0 + a 1 n + a 2 n 2 + ⋯ + a d n d p(n) = a_0 + a_1 n + a_2 n^2 + \cdots + a_d n^d p(n)=a0+a1n+a2n2++adnd
a. 即证明,存在正常数 c c c n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ p ( n ) ≤ c n k 0 \leq p(n) \leq cn^k 0p(n)cnk
a m a x = max ⁡ ( a 0 , a 1 , a 2 , … , a d ) a_{max} = \max (a_0,a_1,a_2,\dots,a_d) amax=max(a0,a1,a2,,ad),因为 a d > 0 a_d > 0 ad>0,所以 a m a x > 0 a_{max} > 0 amax>0
所以 p ( n ) ≤ ∑ i = 0 d a m a x n i p(n) \le \sum_{i=0}^{d} a_{max}n^i p(n)i=0damaxni,当 n ≥ 1 n \ge 1 n1 时,有 ∑ i = 0 d a m a x n i ≤ d ⋅ a m a x ⋅ n d ≤ d ⋅ a m a x ⋅ n k \sum_{i=0}^{d} a_{max}n^i \le d \cdot a_{max}\cdot n^d \le d \cdot a_{max}\cdot n^k i=0damaxnidamaxnddamaxnk
所以,存在 c = d ⋅ a m a x c = d \cdot a_{max} c=damax n 0 = 1 n_0 = 1 n0=1 满足条件,得证。
b. 即证明,存在正常数 c c c n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c n k ≤ p ( n ) 0 \leq cn^k \leq p(n) 0cnkp(n)
p ( n ) ≥ a d n d p(n) \ge a_d n^d p(n)adnd,当 n ≥ 1 n \ge 1 n1 时,有 a d n d ≥ a d n k a_dn^d \ge a_dn^k adndadnk
所以,存在 c = a d c=a_d c=ad n 0 = 1 n_0=1 n0=1 满足条件,得证。
c. 即证明,存在正常数 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c 1 n k ≤ p ( n ) ≤ c 2 n k 0 \leq c_1n^k \leq p(n) \leq c_2n^k 0c1nkp(n)c2nk
由部分(a)和(b)得,存在 c 1 = a d c_1=a_d c1=ad c 2 = d ⋅ a m a x c_2=d\cdot a_{max} c2=damax n 0 = 1 n_0 = 1 n0=1 满足条件,得证。
d. 即证明,对任意正常数 c c c,存在常数 n 0 > 0 n_0>0 n0>0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ p ( n ) ≤ c n k 0 \leq p(n) \leq cn^k 0p(n)cnk
由部分(a)得,当 n ≥ 1 n \ge 1 n1 时,有 p ( n ) ≤ d ⋅ a m a x ⋅ n d ≤ d ⋅ a m a x ⋅ n k − 1 p(n) \le d \cdot a_{max}\cdot n^d \le d \cdot a_{max}\cdot n^{k-1} p(n)damaxnddamaxnk1。(因为 k − 1 ≥ d k-1 \ge d k1d
d ⋅ a m a x ⋅ n k − 1 ≤ c n k d \cdot a_{max}\cdot n^{k-1} \le cn^k damaxnk1cnk,得 n ≥ d ⋅ a m a x / c n \ge d \cdot a_{max}/c ndamax/c
所以,存在 n 0 = max ⁡ ( 1 , d ⋅ a m a x / c ) n_0 = \max(1, d \cdot a_{max}/c) n0=max(1,damax/c) 满足条件,得证。
e. 即证明,对任意正常数 c c c,存在常数 n 0 > 0 n_0>0 n0>0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c n k ≤ p ( n ) 0 \leq cn^k \leq p(n) 0cnkp(n)
n ≥ 1 n \ge 1 n1 时,有 p ( n ) ≥ a d n d ≥ a d n k + 1 p(n) \ge a_d n^d \ge a_dn^{k+1} p(n)adndadnk+1。(因为 d ≥ k + 1 d \ge k+1 dk+1
a d n k + 1 ≥ c n k a_dn^{k+1} \ge cn^k adnk+1cnk,得 n ≥ c / a d n \ge c/a_d nc/ad
所以,存在 n 0 = max ⁡ ( 1 , c / a d ) n_0 = \max(1, c/a_d) n0=max(1,c/ad) 满足条件,得证。

3-2 相对渐近增长
在下表中,对每一对表达式 ( A , B ) (A,B) (A,B),指出 A A A B B B 的哪种关系,是 O O O o o o Ω \Omega Ω ω \omega ω 或者 Θ \Theta Θ。假设 k ≥ 1 k \ge 1 k1 ϵ > 0 \epsilon >0 ϵ>0 c > 1 c>1 c>1 都是常数。在表格的空格内填“是”或“否”。

A A A     B B B O O O o o o Ω \Omega Ω ω \omega ω Θ \Theta Θ
lg ⁡ k n \lg^k n lgkn     n ϵ n^{\epsilon} nϵ
n k n^k nk     c n c^n cn
n \sqrt n n     n sin ⁡ n n^{\sin n} nsinn
2 n 2^n 2n     2 n / 2 2^{n/2} 2n/2
n lg ⁡ c n^{\lg c} nlgc     c lg ⁡ n c^{\lg n} clgn
lg ⁡ ( n ! ) \lg(n!) lg(n!)     lg ⁡ ( n n ) \lg(n^n) lg(nn)

解: 第 1 对: lg ⁡ n = o ( n ) \lg n = o(n) lgn=o(n)。(未完成)
第 2 对:任何底数大于 1 的指数函数比任何多项式函数增长地更快,即 n b = o ( a n ) n^b = o(a^n) nb=o(an),其中 a > 1 a>1 a>1
第 3 对: n sin ⁡ n n^{\sin n} nsinn 不是渐近正函数;不存在常数 n 0 n_0 n0,使得 n > n 0 n>n_0 n>n0 时,函数单调递增或单调递减。
第 4 对: lim ⁡ n → ∞ A / B = lim ⁡ n → ∞ 2 n / 2 = ∞ \lim_{n \to \infty} A/B = \lim_{n \to \infty} 2^{n/2} = \infty limnA/B=limn2n/2=
第 5 对:因为 a log ⁡ b c = c log ⁡ b a a^{\log_b c} = c^{\log_b a} alogbc=clogba,所以 n lg ⁡ c = c lg ⁡ n n^{\lg c} = c^{\lg n} nlgc=clgn
第 6 对: lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg (n!) = \Theta(n\lg n) lg(n!)=Θ(nlgn) lg ⁡ ( n n ) = Θ ( n lg ⁡ n ) \lg (n^n) = \Theta(n\lg n) lg(nn)=Θ(nlgn)

3-3 根据渐近增长率排序
a. 根据增长率对下列函数进行排序;即找出函数的一种排列 g 1 , g 2 , … , g 30 g_1,g_2,\dots,g_{30} g1,g2,,g30,满足 g 1 = Ω ( g 2 ) , g 2 = Ω ( g 3 ) , … , g 29 = Ω ( g 30 ) g_1 = \Omega(g_2), g_2 = \Omega(g_3), \dots, g_{29} = \Omega(g_{30}) g1=Ω(g2),g2=Ω(g3),,g29=Ω(g30)。将该序列划分成等价类,使得函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 在同一个等价类,当且仅当 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))
lg ⁡ ( lg ⁡ ∗ n ) \lg(\lg^* n) lg(lgn) 2 lg ⁡ ∗ n 2^{\lg^*n} 2lgn ( 2 ) lg ⁡ n (\sqrt2)^{\lg n} (2 )lgn n 2 n^2 n2 n ! n! n! ( lg ⁡ n ) ! (\lg n)! (lgn)!
( 3 2 ) n (\frac{3}{2})^n (23)n     n 3 n^3 n3     lg ⁡ 2 n \lg^2n lg2n lg ⁡ ( n ! ) \lg(n!) lg(n!) 2 2 n 2^{2^{n}} 22n n 1 / lg ⁡ n n^{1/\lg n} n1/lgn
ln ⁡ ln ⁡ n \ln \ln n lnlnn lg ⁡ ∗ n \lg^* n lgn n ⋅ 2 n n\cdot 2^n n2n n lg ⁡ lg ⁡ n n^{\lg \lg n} nlglgn ln ⁡ n \ln n lnn 1 1 1
2 lg ⁡ n 2^{\lg n} 2lgn ( lg ⁡ n ) lg ⁡ n (\lg n)^{\lg n} (lgn)lgn e n e^n en 4 lg ⁡ n 4^{\lg n} 4lgn ( n + 1 ) ! (n+1)! (n+1)! ( lg ⁡ n ) \sqrt{(\lg n)} (lgn)
lg ⁡ ∗ ( lg ⁡ n ) \lg^*(\lg n) lg(lgn) 2 2 lg ⁡ n 2^{\sqrt{2\lg n}} 22lgn n n n 2 n 2^n 2n n lg ⁡ n n \lg n nlgn 2 2 n + 1 2^{2^{n+1}} 22n+1
b. 给出非负函数 f ( n ) f(n) f(n) 的一个例子,使对任何在部分 (a) 中的 g i ( n ) g_i(n) gi(n) f ( n ) f(n) f(n) 既不是 O ( g i ( n ) ) O(g_i(n)) O(gi(n)),也不是 Ω ( g i ( n ) ) \Omega(g_i(n)) Ω(gi(n))
解: a. 2 lg ⁡ n = n 2^{\lg n} = n 2lgn=n 4 lg ⁡ n = n 2 4^{\lg n} = n^2 4lgn=n2 ( 2 ) lg ⁡ n = n (\sqrt2)^{\lg n} = \sqrt {n} (2 )lgn=n n lg ⁡ lg ⁡ n = ( lg ⁡ n ) lg ⁡ n n^{\lg \lg n} = (\lg n)^{\lg n} nlglgn=(lgn)lgn lg ⁡ ( n ! ) = Θ ( n lg ⁡ n ) \lg (n!) = \Theta(n\lg n) lg(n!)=Θ(nlgn)
排列: 2 2 n + 1 2^{2^{n+1}} 22n+1 2 2 n 2^{2^{n}} 22n ( n + 1 ) ! (n+1)! (n+1)! n ! n! n! e n e^n en n ⋅ 2 n n\cdot 2^n n2n 2 n 2^n 2n ( 3 2 ) n (\frac{3}{2})^n (23)n n 3 n^3 n3 n 2 n^2 n2 4 lg ⁡ n 4^{\lg n} 4lgn n lg ⁡ n n \lg n nlgn lg ⁡ ( n ! ) \lg(n!) lg(n!) n n n 2 lg ⁡ n 2^{\lg n} 2lgn ( 2 ) lg ⁡ n (\sqrt2)^{\lg n} (2 )lgn lg ⁡ 2 n \lg^2n lg2n ln ⁡ n \ln n lnn ln ⁡ ln ⁡ n \ln \ln n lnlnn lg ⁡ ∗ n \lg^* n lgn lg ⁡ ∗ ( lg ⁡ n ) \lg^*(\lg n) lg(lgn) lg ⁡ ( lg ⁡ ∗ n ) \lg(\lg^* n) lg(lgn) 1 1 1。(未完成)
等价类:
n n n 2 lg ⁡ n 2^{\lg n} 2lgn
n 2 n^2 n2 4 lg ⁡ n 4^{\lg n} 4lgn
( lg ⁡ n ) lg ⁡ n (\lg n)^{\lg n} (lgn)lgn n lg ⁡ lg ⁡ n n^{\lg \lg n} nlglgn
n lg ⁡ n n\lg n nlgn lg ⁡ ( n ! ) \lg (n!) lg(n!)
(未完成)
b. 一个例子: f ( n ) = sin ⁡ 2 n f(n) = \sin^2n f(n)=sin2n

3-4 渐近记号的性质
f ( n ) f(n) f(n) g ( n ) g(n) g(n) 是渐近正函数,证明或否定以下假设。
a. f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 蕴含 g ( n ) = O ( f ( n ) ) g(n) = O(f(n)) g(n)=O(f(n))
b. f ( n ) + g ( n ) = Θ ( min ⁡ ( f ( n ) , g ( n ) ) ) f(n) + g(n) = \Theta(\min(f(n),g(n))) f(n)+g(n)=Θ(min(f(n),g(n)))
c. f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 蕴含 lg ⁡ ( f ( n ) ) = O ( lg ⁡ ( g ( n ) ) ) \lg (f(n)) = O(\lg(g(n))) lg(f(n))=O(lg(g(n))),其中 lg ⁡ ( g ( n ) ) ≥ 1 \lg(g(n)) \ge 1 lg(g(n))1 f ( n ) ≥ 1 f(n) \ge 1 f(n)1 对足够大的 n n n 成立。
d. f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 蕴含 2 f ( n ) = O ( 2 g ( n ) ) 2^{f(n)} = O(2^{g(n)}) 2f(n)=O(2g(n))
e. f ( n ) = O ( ( f ( n ) ) 2 ) f(n) = O((f(n))^2) f(n)=O((f(n))2)
f. f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 蕴含 g ( n ) = Ω ( f ( n ) ) g(n) = \Omega(f(n)) g(n)=Ω(f(n))
g. f ( n ) = Θ ( f ( n / 2 ) ) f(n) = \Theta(f(n/2)) f(n)=Θ(f(n/2))
h. f ( n ) + o ( f ( n ) ) = Θ ( f ( n ) ) f(n) + o(f(n)) = \Theta(f(n)) f(n)+o(f(n))=Θ(f(n))

解: a. 假设不成立。例,设 f ( n ) = n f(n) = n f(n)=n g ( n ) = n 2 g(n) = n^2 g(n)=n2,满足 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)),而 g ( n ) ≠ O ( f ( n ) ) g(n) \not= O(f(n)) g(n)=O(f(n))
b. 假设不成立。 f ( n ) + g ( n ) = Θ ( max ⁡ ( f ( n ) , g ( n ) ) ) f(n) + g(n) = \Theta(\max(f(n),g(n))) f(n)+g(n)=Θ(max(f(n),g(n)))
c. 假设成立。
存在正常数 c c c n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \leq f(n) \leq cg(n) 0f(n)cg(n)
存在正常数 n 1 n_1 n1,使对所有 n ≥ n 1 n\ge n_1 nn1,有 f ( n ) ≥ 1 f(n) \ge 1 f(n)1,得 lg ⁡ ( f ( n ) ) ≥ 0 \lg(f(n)) \ge 0 lg(f(n))0
所以,对所有 n ≥ max ⁡ ( n 0 , n 1 ) n \ge \max(n_0,n_1) nmax(n0,n1),有 0 ≤ lg ⁡ ( f ( n ) ) ≤ c lg ⁡ ( g ( n ) ) 0 \le \lg(f(n)) \le c\lg(g(n)) 0lg(f(n))clg(g(n)),得证。
d. 假设不成立。令 f ( n ) = 2 n f(n) = 2n f(n)=2n g ( n ) = n g(n) = n g(n)=n,满足 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))
lim ⁡ n → ∞ 2 f ( n ) 2 g ( n ) = lim ⁡ n → ∞ 2 n = ∞ \lim_{n \to \infty} \frac{2^{f(n)}}{2^{g(n)}} = \lim_{n \to \infty}2^n = \infty limn2g(n)2f(n)=limn2n=。此时,有 2 f ( n ) = ω ( 2 g ( n ) ) 2^{f(n)} = \omega(2^{g(n)}) 2f(n)=ω(2g(n)) 2 f ( n ) ≠ O ( 2 g ( n ) ) 2^{f(n)} \not= O(2^{g(n)}) 2f(n)=O(2g(n))
e. 假设不成立。令 f ( n ) = 1 / n f(n) = 1/n f(n)=1/n,则 ( f ( n ) ) 2 = 1 / n 2 (f(n))^2 = 1/n^2 (f(n))2=1/n2,有 f ( n ) = ω ( ( f ( n ) ) 2 ) f(n) = \omega((f(n))^2) f(n)=ω((f(n))2)
f. 假设成立。渐近记号的转置对称性。
g. 假设不成立。令 f ( n ) = 2 n f(n) = 2^n f(n)=2n,则 f ( n / 2 ) = 2 n / 2 f(n/2) = 2^{n/2} f(n/2)=2n/2,有 f ( n ) = ω ( f ( n / 2 ) ) f(n) = \omega(f(n/2)) f(n)=ω(f(n/2))
h. 假设成立。
即证明,存在正常数 c 1 c_1 c1 c 2 c_2 c2 n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c 1 f ( n ) ≤ f ( n ) + o ( f ( n ) ) ≤ c 2 f ( n ) 0 \leq c_1f(n) \leq f(n) + o(f(n)) \leq c_2f(n) 0c1f(n)f(n)+o(f(n))c2f(n)
因为 f ( n ) f(n) f(n) 是渐近正函数,所以存在常数 m 0 m_0 m0,使对所有 n ≥ m 0 n\ge m_0 nm0,有 f ( n ) ≥ 0 f(n) \ge 0 f(n)0
h ( n ) = o ( f ( n ) ) h(n) = o(f(n)) h(n)=o(f(n))
则对任意正常数 c 3 c_3 c3,存在常数 n 1 > 0 n_1>0 n1>0,使对所有 n ≥ n 1 n \geq n_1 nn1,有 0 ≤ h ( n ) ≤ c 3 f ( n ) 0 \leq h(n) \leq c_3f(n) 0h(n)c3f(n)
所以, f ( n ) + h ( n ) ≥ f ( n ) f(n) + h(n) \ge f(n) f(n)+h(n)f(n) f ( n ) + h ( n ) ≤ ( 1 + c 3 ) f ( n ) f(n) + h(n) \le (1+c_3)f(n) f(n)+h(n)(1+c3)f(n)
所以,存在 c 1 = 1 c_1 = 1 c1=1 c 2 = 1 + c 3 c_2 = 1 + c_3 c2=1+c3 满足条件,得证。

3-5 O O O Ω \Omega Ω 的变形
某些作者定义 Ω \Omega Ω 的方式与我们略有不同,可以用 Ω ∞ \overset{\infty}{\Omega} Ω(读作“ Ω \Omega Ω 无穷大”)来表示这种定义。若存在正常数 c c c 使 f ( n ) ≥ c g ( n ) ≥ 0 f(n) \ge cg(n) \ge 0 f(n)cg(n)0 对无穷多的整数成立,则称 f ( n ) = Ω ∞ ( g ( n ) ) f(n) = \overset{\infty}{\Omega} (g(n)) f(n)=Ω(g(n))
a. 说明渐近非负的两个函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),要么 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)),要么 f ( n ) = Ω ∞ ( g ( n ) ) f(n) = \overset{\infty}{\Omega}(g(n)) f(n)=Ω(g(n)),要么二者都成立,然而用 Ω \Omega Ω 代替 Ω ∞ \overset{\infty}{\Omega} Ω 时不成立。
b. 请描述使用 Ω ∞ \overset{\infty}{\Omega} Ω 代替 Ω \Omega Ω 来刻画程序运行时间的潜在优点和缺点。

某些作者定义 O O O 的方式也略有不同,可以用 O ′ O' O 来表示这种定义。当且仅当 ∣ f ( n ) ∣ = O ( g ( n ) ) |f(n)| = O(g(n)) f(n)=O(g(n)) 时,称 f ( n ) = O ′ ( g ( n ) ) f(n) = O'(g(n)) f(n)=O(g(n))
c. 如果我们使用 O ′ O' O 代替 O O O 而仍然使用 Ω \Omega Ω,定理 3.1 的“当且仅当”的两个方向各有什么变化?

某些作者定义 O ~ \widetilde{O} O (读作 “soft-oh”)来表示略去了对数因子的 O O O
O ~ ( g ( n ) ) = { f ( n ) \widetilde{O}(g(n))=\{f(n) O (g(n))={f(n):存在正常数 c c c k k k n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) lg ⁡ k n } 0 \leq f(n) \leq cg(n)\lg^k n \} 0f(n)cg(n)lgkn}
d. 请类似地定义 Ω ~ \widetilde{\Omega} Ω Θ ~ \widetilde{\Theta} Θ ,并证明与定理 3.1 的类似关系。

解: a. 如果 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)),那么,存在正常数 c c c n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \leq f(n) \leq cg(n) 0f(n)cg(n)
如果 f ( n ) ≠ O ( g ( n ) ) f(n) \not= O(g(n)) f(n)=O(g(n)),那么,存在正常数 c 1 c_1 c1,对所有的 n n n,存在常数 n 1 > n n_1 > n n1>n,且 f ( n 1 ) > c 1 g ( n 1 ) ≥ 0 f(n_1) > c_1g(n_1) \ge 0 f(n1)>c1g(n1)0。此时, f ( n ) = Ω ∞ ( g ( n ) ) f(n) = \overset{\infty}{\Omega}(g(n)) f(n)=Ω(g(n))
f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n)) 时,二者都成立。

Ω \Omega Ω 代替 Ω ∞ \overset{\infty}{\Omega} Ω 时,令 f ( n ) = n f(n) = n f(n)=n g ( n ) = 2 + sin ⁡ n g(n) = 2 + \sin n g(n)=2+sinn,均为渐近非负函数。但是 f ( n ) ≠ O ( g ( n ) ) f(n) \not=O(g(n)) f(n)=O(g(n)),且 f ( n ) ≠ Ω ( g ( n ) ) f(n) \not= \Omega(g(n)) f(n)=Ω(g(n))

b. 优点:任意渐近非负的两个函数的关系均可由 O O O Ω ∞ \overset{\infty}{\Omega} Ω 表示。
缺点:不能明确比较两个函数的增长率的大小。

c. 定理 3.1:对任意两个函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),当且仅当 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) 时,有 f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n))
变化:对任意两个函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),当且仅当 f ( n ) = O ′ ( g ( n ) ) f(n) = O'(g(n)) f(n)=O(g(n)) ∣ f ( n ) ∣ = Ω ( g ( n ) ) |f(n)|=\Omega(g(n)) f(n)=Ω(g(n)) 时,有 ∣ f ( n ) ∣ = Θ ( g ( n ) ) |f(n)|=\Theta(g(n)) f(n)=Θ(g(n))

d. Ω ~ ( g ( n ) ) = { f ( n ) \widetilde{\Omega}(g(n))=\{f(n) Ω (g(n))={f(n):存在正常数 c c c k k k n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c g ( n ) lg ⁡ k n ≤ f ( n ) } 0 \leq cg(n)\lg^k n \leq f(n)\} 0cg(n)lgknf(n)}
Θ ~ ( g ( n ) ) = { f ( n ) \widetilde{\Theta}(g(n))=\{f(n) Θ (g(n))={f(n):存在正常数 c 1 c_1 c1 c 2 c_2 c2 k 1 k_1 k1 k 2 k_2 k2 n 0 n_0 n0,使对所有 n ≥ n 0 n \geq n_0 nn0,有 0 ≤ c 1 g ( n ) lg ⁡ k 1 n ≤ f ( n ) ≤ c 2 g ( n ) lg ⁡ k 2 n } 0 \leq c_1g(n)\lg^{k_1} n \leq f(n) \leq c_2g(n)\lg^{k_2} n \} 0c1g(n)lgk1nf(n)c2g(n)lgk2n}
定理:对任意两个函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),当且仅当 f ( n ) = O ~ ( g ( n ) ) f(n) = \widetilde{O}(g(n)) f(n)=O (g(n)) f ( n ) = Ω ~ ( g ( n ) ) f(n)=\widetilde{\Omega}(g(n)) f(n)=Ω (g(n)) 时,有 f ( n ) = Θ ~ ( g ( n ) ) f(n)=\widetilde{\Theta}(g(n)) f(n)=Θ (g(n))
根据定义即可证明。

3-6 迭代函数(iterated functions)
lg ⁡ ∗ \lg^* lg 函数中用到的迭代操作符 ∗ ^* 可用于在实数域内任何单调递增的函数 f ( n ) f(n) f(n) 上。对于一个给定的常数 c ∈ R c \in \mathbb{R} cR,定义迭代函数 f c ∗ f_c^* fc 为:
f c ∗ ( n ) = min ⁡ { i ≥ 0 : f ( i ) ( n ) ≤ c } f_c^*(n) = \min\{i \ge 0: f^{(i)}(n) \le c\} fc(n)=min{i0:f(i)(n)c}
该函数不必针对所有函数定义。换言之, f c ∗ ( n ) f_c^*(n) fc(n) 是为其自变量小于或等于 c c c,而重复应用函数 f f f 的次数。
对于下列的每函数 f ( n ) f(n) f(n) 和常数 c c c,给出 f c ∗ ( n ) f_c^*(n) fc(n) 的尽可能紧确的界。

f ( n ) f(n) f(n) c c c f c ∗ ( n ) f_c^*(n) fc(n)
n − 1 n-1 n1 0 0 0 n n n
lg ⁡ n \lg n lgn 1 1 1 lg ⁡ ∗ n \lg^* n lgn
n / 2 n/2 n/2 1 1 1 lg ⁡ n \lg n lgn
n / 2 n/2 n/2 2 2 2 lg ⁡ n \lg n lgn
n \sqrt n n 2 2 2 lg ⁡ lg ⁡ n \lg \lg n lglgn
n \sqrt n n 1 1 1 n > 1 n>1 n>1 时,不存在
n 1 / 3 n^{1/3} n1/3 2 2 2 log ⁡ 3 lg ⁡ n \log_3 \lg n log3lgn
n / lg ⁡ n n / \lg n n/lgn 2 2 2

解: f c ∗ ( n ) = { 0 i f    n ≤ c 1 + f c ∗ ( f ( n ) ) i f    n > c f_c^{*}(n) = \left\{\begin{array}{crl} 0 & \mathrm{if} \ \ n \le c \\1+ f_c^{*}(f(n)) & \mathrm{if} \ \ n > c \end{array}\right. fc(n)={01+fc(f(n))if  ncif  n>c

f c ∗ ( n ) f_c^*(n) fc(n) 的值不同时,其相应的 n n n 如下:

f c ∗ ( n ) f_c^*(n) fc(n) n − 1 0 n-1 \\ 0 n10 lg ⁡ n 1 \lg n \\ 1 lgn1 n / 2 1 n/2 \\ 1 n/21 n / 2 2 n/2 \\ 2 n/22 n 2 \sqrt n \\ 2 n 2 n 1 \sqrt n \\ 1 n 1 n 1 / 3 2 n^{1/3} \\ 2 n1/32 n / lg ⁡ n 2 n / \lg n \\ 2 n/lgn2
1 1 1 1 1 1 2 2 2 2 2 2 4 4 4 4 4 4 8 8 8 4 4 4
2 2 2 2 2 2 4 4 4 4 4 4 8 8 8 16 16 16 512 512 512 16 16 16
3 3 3 3 3 3 16 16 16 8 8 8 16 16 16 256 256 256 51 2 3 512^3 5123-
4 4 4 4 4 4 65536 65536 65536 16 16 16 32 32 32 65536 65536 65536--
5 5 5 5 5 5 2 65536 2^{65536} 265536 32 32 32 64 64 64 6553 6 2 65536^2 655362--
6 6 6 6 6 6- 64 64 64 128 128 128---

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值