1. 向下取整与向上取整
⌊ x ⌋ ⌊x⌋ ⌊x⌋是对 x x x向下取整,表示小于或等于 x x x的最大整数。 ⌈ x ⌉ ⌈x⌉ ⌈x⌉是对 x x x向上取整,表示大于或等于 x x x的最小整数。向下取整与向上取整具有以下规律:
(1) 对所有实数 x x x,有 x − 1 < ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ < x + 1 x-1<⌊x⌋≤x≤⌈x⌉<x+1 x−1<⌊x⌋≤x≤⌈x⌉<x+1
(2) 对任意整数 n n n,有 ⌈ n / 2 ⌉ + ⌊ n / 2 ⌋ = n ⌈n/2⌉+⌊n/2⌋=n ⌈n/2⌉+⌊n/2⌋=n
(3) 对任意实数 x ≥ 0 x ≥ 0 x≥0和整数 a , b > 0 a, b > 0 a,b>0,有
⌈ ⌈ x / a ⌉ b ⌉ = ⌈ x a b ⌉ ⌈\frac{⌈x/a⌉}{b}⌉=⌈\frac{x}{ab}⌉ ⌈b⌈x/a⌉⌉=⌈abx⌉
⌊ ⌊ x / a ⌋ b ⌋ = ⌊ x a b ⌋ ⌊\frac{⌊x/a⌋}{b}⌋=⌊\frac{x}{ab}⌋ ⌊b⌊x/a⌋⌋=⌊abx⌋
⌈ a b ⌉ ≤ a + ( b − 1 ) b ⌈\frac{a}{b}⌉≤\frac{a+(b-1)}{b} ⌈ba⌉≤ba+(b−1)
⌊ a b ⌋ ≥ a − ( b − 1 ) b ⌊\frac{a}{b}⌋≥\frac{a-(b-1)}{b} ⌊ba⌋≥ba−(b−1)
(4) 向下取整函数 f ( x ) = ⌊ x ⌋ f(x)=⌊x⌋ f(x)=⌊x⌋是单调递增的,向上取整函数 f ( x ) = ⌈ x ⌉ f(x)=⌈x⌉ f(x)=⌈x⌉也是单调递增的。
2. 模运算
对任意整数 a a a和任意正整数 n n n,模运算 a m o d n a\ {\rm mod}\ n a mod n的结果就是 a a a除以 n n n的余数,即
a m o d n = a − n ⌊ a / n ⌋ a\ {\rm mod}\ n=a-n⌊a/n⌋ a mod n=a−n⌊a/n⌋
模运算的结果满足 0 ≤ a m o d n < n 0≤a\ {\rm mod}\ n<n 0≤a mod n<n。
如果 a m o d n = b m o d n a\ {\rm mod}\ n=b\ {\rm mod}\ n a mod n=b mod n,则说明 a a a与 b b b除以 n n n的余数相同,记为 a ≡ b ( m o d n ) a≡b({\rm mod}\ n) a≡b(mod n),并称模 n n n时 a a a等价于 b b b。模运算具有以下性质:
a ≡ b ( m o d n ) ⇔ n 是 b − a 的 一 个 因 子 a≡b({\rm mod}\ n)\ \ \ \ \ ⇔\ \ \ \ \ n是b-a的一个因子 a≡b(mod n) ⇔ n是b−a的一个因子
3. 多项式
给定一个非负整数 d d d, n n n的 d d d次多项式为
p ( n ) = a 0 + a 1 n + a 2 n 2 + ⋯ + a d n d = ∑ i = 0 d a i n i p(n)=a_0+a_1 n+a_2 n^2+⋯+a_d n^d=∑_{i=0}^da_i n^i p(n)=a0+a1n+a2n2+⋯+adnd=∑i=0daini
其中,常量 a 0 , a 1 , … , a d a_0, a_1, …, a_d a0,a1,…,ad是多项式的系数,并且 a d ≠ 0 a_d ≠ 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) = Θ(n^d) p(n)=Θ(nd)。如果一个函数 f ( n ) = O ( n d ) f(n) = O(n^d) f(n)=O(nd),则称该函数是多项式有界的。
4. 指数函数
(1) 指数函数的基本性质
对所有实数 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}=\frac{1}{a} a−1=a1
( a m ) n = a m n (a^m )^n=a^{mn} (am)n=amn
a m ∙ a n = a m + n a^m∙a^n=a^{m+n} am∙an=am+n
(2) 指数函数与多项式函数比较
给定一个指数函数 f ( n ) = a n f(n) = a^n f(n)=an (其中 a > 1 a > 1 a>1),一个多项式函数 g ( n ) = n b g(n) = n^b g(n)=nb,有 l i m n → ∞ n b a n = 0 lim_{n→∞}\frac {n^b}{a^n}=0 limn→∞annb=0。据此可得, n b = o ( a n ) n^b = o(a^n) nb=o(an),这说明任意底大于 1 1 1的指数函数比任意多项式函数增长得快。
(3) 自然对数的底 e e e
自然对数的底 e = 2.71828 … e = 2.71828… 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!}+⋯=∑_{i=0}^∞\frac{x^i}{i!} ex=1+x+2!x2+3!x3+⋯=∑i=0∞i!xi
对所有实数 x x x,有 e x ≥ 1 + x e^x≥1+x ex≥1+x成立。只有当 x = 0 x = 0 x=0时,等号才成立。
当 ∣ x ∣ ≤ 1 |x|≤1 ∣x∣≤1时,可通过不等式 1 + x ≤ e x ≤ 1 + x + x 2 1+x≤e^x≤1+x+x^2 1+x≤ex≤1+x+x2来近似估计 e x e^x ex的值。当 x → 0 x→0 x→0时,用 1 + x 1+x 1+x来估计 e x e^x ex的近似值是足够精确的。
对所有实数 x x x,有 l i m n → ∞ ( 1 + x n ) n = e x lim_{n→∞}(1+\frac{x}{n})^n=e^x limn→∞(1+nx)n=ex。
5. 对数函数
本书约定下面的记号:
l g n = l o g 2 n ( 以 2 为 底 的 对 数 ) {\rm lg}\ n={\rm log}_2n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (以2为底的对数) lg n=log2n (以2为底的对数)
l n n = l o g e n ( 自 然 对 数 ) {\rm ln}\ n={\rm log}_e n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (自然对数) ln n=logen (自然对数)
l g k n = ( l g n ) k ( 对 数 的 幂 ) {\rm lg}^k n=({\rm lg}\ n)^k\ \ \ \ \ \ \ \ \ \ \ \ (对数的幂) lgkn=(lg n)k (对数的幂)
l g l g n = l g ( l g n ) ( 复 合 对 数 ) {\rm lg\ lg}\ n={\rm lg}({\rm lg}\ n)\ \ \ \ \ \ \ (复合对数) lg lg n=lg(lg n) (复合对数)
(1) 对数函数基本性质
对所有实数 a > 0 a > 0 a>0、 b > 0 b > 0 b>0、 c > 0 c > 0 c>0和 n n n,以下等式成立
a = b l o g b a a=b^{{\rm log}_ba} a=blogba
l o g c ( a b ) = l o g c a + l o g c b {\rm log}_c(ab)={\rm log}_c a+{\rm log}_c b logc(ab)=logca+logcb
l o g b a n = n l o g b a {\rm log}_ba^n=n{\rm log}_ba logban=nlogba
l o g b a = ( l o g c a ) / ( l o g c b ) {\rm log}_ba=({\rm log}_ca)/({\rm log}_cb) logba=(logca)/(logcb)
l o g b ( 1 / a ) = − l o g b a {\rm log}_b(1/a)=-{\rm log}_ba logb(1/a)=−logba
l o g b a = 1 l o g a b {\rm log}_ba=\frac{1}{{\rm log}_ab} logba=logab1
a l o g b c = c l o g b a a^{{\rm log}_bc}=c^{{\rm log}_ba} alogbc=clogba
(2) 当 ∣ x ∣ < 1 |x|<1 ∣x∣<1时, l n ( 1 + x ) {\rm ln}(1+x) ln(1+x)有级数展开
l n ( 1 + x ) = x − x 2 2 + x 3 3 − x 4 4 + x 5 5 − ⋯ {\rm ln}(1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+\frac{x^5}{5}-⋯ ln(1+x)=x−2x2+3x3−4x4+5x5−⋯
(3) 对于 x > − 1 x > -1 x>−1,还有以下不等式
x 1 + x ≤ l n ( 1 + x ) ≤ x \frac{x}{1+x}≤{\rm ln}(1+x)≤x 1+xx≤ln(1+x)≤x
(4) 如果对某个常量 k k k,有 f ( n ) = O ( l g k n ) f(n)=O({\rm lg}^kn) f(n)=O(lgkn),则称函数 f ( n ) f(n) f(n)是多对数有界的。
(5) 多对数函数与多项式函数比较
给定一个多对数函数 f ( n ) = l g b n f(n) = {\rm lg}^bn f(n)=lgbn,一个多项式函数 g ( n ) = n a g(n) = n^a g(n)=na (其中 a > 0 a > 0 a>0),有 l i m n → ∞ l g b n n a = 0 lim_{n→∞}\frac{{\rm lg}^bn}{n^a}=0 limn→∞nalgbn=0。据此可得, l g b n = o ( n a ) {\rm lg}^bn = o(n^a) lgbn=o(na),这说明任意渐近正的多项式函数都比任意多对数函数增长要快。
6. 阶乘
(1) 斯特林公式
(2) 以下渐近表达式成立
n ! = o ( n n ) n!=o(n^n) n!=o(nn)
n ! = ω ( 2 n ) n!=ω(2^n) n!=ω(2n)
l g ( n ! ) = Θ ( n l g n ) {\rm lg}(n!)=Θ(n{\rm lg}n) lg(n!)=Θ(nlgn)
(3) 对所有 n ≥ 1 n ≥ 1 n≥1,以下等式也成立
其中, 1 12 n + 1 < α n < 1 12 n \frac{1}{12n+1}<α_n<\frac{1}{12n} 12n+11<αn<12n1。
7. 多重函数
用记号 f ( i ) ( n ) f^{(i)}(n) f(i)(n)表示函数 f ( n ) f(n) f(n)重复 i i i次作用于一个初值 n n n上。 f ( i ) ( n ) f^{(i)}(n) f(i)(n)可以按照如下方式递归地定义。
例如,若 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。
8. 多重对数函数
定义多重对数函数如下:
l g ∗ n = m i n { i ≥ 0 : l g ( i ) n ≤ 1 } {\rm lg}^* n=min\{i≥0: {\rm lg}^{(i)}n≤1\} lg∗n=min{i≥0:lg(i)n≤1}
多重对数函数的意义是:对一个初值 n n n最多可以连续应用多少次对数函数,才能使得最后结果小于或等于 1 1 1。对初值 n n n最多应用了对数函数的次数,就是多重对数函数的输出。
多重对数函数是一个增长极其缓慢的函数。
l g ∗ 2 = 1 {\rm lg}^*2=1 lg∗2=1
l g ∗ 4 = 2 {\rm lg}^*4=2 lg∗4=2
l g ∗ 16 = 3 {\rm lg}^*16=3 lg∗16=3
l g ∗ 65536 = 4 {\rm lg}^*65536=4 lg∗65536=4
l g ∗ ( 2 65536 ) = 5 {\rm lg}^*(2^{65536})=5 lg∗(265536)=5
9. 斐波那契数
斐波那契数 F ( n ) F(n) F(n)按照以下递归式来定义:
斐波那契数与黄金分割率 φ φ φ及其共轭数 φ ^ \hat{φ} φ^有关。 φ φ φ和 φ ^ \hat{φ} φ^是一元二次方程 x 2 = x + 1 x^2 = x+1 x2=x+1的根,它们的值为
φ = ( 1 + 5 ) / 2 = 1.61803 ⋯ φ=(1+\sqrt{5})/2=1.61803⋯ φ=(1+5)/2=1.61803⋯
φ ^ = ( 1 − 5 ) / 2 = − 0.61803 ⋯ \hat{φ}=(1-\sqrt{5})/2=-0.61803⋯ φ^=(1−5)/2=−0.61803⋯
斐波那契数与 φ φ φ和 φ ^ \hat{φ} φ^的关系如下:
也就是说斐波那契数 F ( n ) F(n) F(n)等于 φ n / 5 φ^n/\sqrt{5} φn/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)•g(n) f(n)•g(n)是单调递增的。
略
3.2-2 证明等式(3.16)。
a l o g b c = c l o g b a ( 3.16 ) a^{{\rm log}_bc}=c^{{\rm log}_ba}\ \ \ \ \ \ \ \ \ \ \ \ (3.16) alogbc=clogba (3.16)
解
对等式两边取对数。
左边: l o g b ( a l o g b c ) = l o g b a ∙ l o g b c {\rm log}_b(a^{{\rm log}_bc})={\rm log}_ba∙{\rm log}_bc logb(alogbc)=logba∙logbc
右边: l o g b ( c l o g b a ) = l o g b a ∙ l o g b c {\rm log}_b(c^{{\rm log}_ba})={\rm log}_ba∙{\rm log}_bc logb(clogba)=logba∙logbc
可以看到,取对数后,等式两边完全相等。故 a l o g b c = c l o g b a a^{{\rm log}_bc}=c^{{\rm log}_b a} alogbc=clogba成立。
3.2-3 证明等式(3.19)。并证明 n ! = ω ( 2 n ) 且 n ! = o ( n n ) n!=ω(2^n )且n!=o(n^n ) n!=ω(2n)且n!=o(nn)。
l g ( n ! ) = Θ ( n l g n ) ( 3.19 ) {\rm lg}(n!)=Θ(n{\rm lg}n)\ \ \ \ \ \ \ \ \ \ \ \ (3.19) lg(n!)=Θ(nlgn) (3.19)
解
(1) 证明 l g ( n ! ) = Θ ( n l g n ) {\rm lg}(n!)=Θ(n{\rm lg}n) lg(n!)=Θ(nlgn)
利用斯特林公式,可以得到
上式中,高阶项为 n l g n nlgn nlgn,忽略其他低阶项,可得 l g ( n ! ) = Θ ( n l g n ) {\rm lg}(n!)=Θ(n{\rm lg}n) lg(n!)=Θ(nlgn)。
(2) 证明 n ! = ω ( 2 n ) n!=ω(2^n) n!=ω(2n)
仍然采用斯特林公式。
故 n ! = ω ( 2 n ) n!=ω(2^n ) n!=ω(2n)成立。
(3) 证明 n ! = o ( n n ) n!=o(n^n) n!=o(nn)
故 n ! = o ( n n ) n!=o(n^n ) n!=o(nn)成立。补充一下,上式的极限等于 0 0 0,是因为 “ “ “任意底大于 1 1 1的指数函数比任意多项式函数增长得快 ” ” ”,多项式函数 n 1 / 2 n^{1/2} n1/2是分子,而指数函数 e n e^n en是分母。
3.2-4 函数 ⌈ l g n ⌉ ! ⌈{\rm lg}n⌉! ⌈lgn⌉!多项式有界吗?函数 ⌈ l g l g n ⌉ ! ⌈{\rm lg lg}n⌉! ⌈lglgn⌉!多项式有界吗?
解
对于题目中的 2 2 2个函数,要直接判断它们是否多项式有界很困难。我们不妨考察任意一个多项式有界的函数 f ( n ) f(n) f(n),即 f ( n ) = O ( n k ) f(n) = O(n^k) f(n)=O(nk),其中 k k k为一个大于 0 0 0的常量。根据 O O O记号的定义,存在正常量 n 0 n_0 n0和 c c c,使得对所有 n ≥ n 0 n ≥ n_0 n≥n0,有
f ( n ) ≤ c n k f(n)≤cn^k f(n)≤cnk
对这个不等式两边取对数,得到
l g ( f ( n ) ) ≤ l g ( c n k ) = l g c + k l g n {\rm lg}(f(n))≤{\rm lg}(cn^k )={\rm lg}c+k{\rm lg}n lg(f(n))≤lg(cnk)=lgc+klgn。
可以取一个足够大的常量 c ′ c' c′,就可使得 l g c + k l g n ≤ c ′ l g n {\rm lg}c+k{\rm lg}n≤c'{\rm lg}n lgc+klgn≤c′lgn对所有 n ≥ n 0 n ≥ n_0 n≥n0成立,即 l g ( f ( n ) ) ≤ c ′ l g n {\rm lg}(f(n))≤c'{\rm lg}n lg(f(n))≤c′lgn对所有 n ≥ n 0 n ≥ n_0 n≥n0成立。由此可得 l g ( f ( n ) ) = O ( l g n ) {\rm lg}(f(n))=O({\rm lg}n) lg(f(n))=O(lgn)。
根据以上分析,可以得出以下推论。即如果一个函数 f ( n ) f(n) f(n)多项式有界,那么 f ( n ) f(n) f(n)的对数一定有渐近上界 O ( l g n ) O({\rm lg}n) O(lgn)。
f ( n ) = O ( n k ) ⇒ l g ( f ( n ) ) = O ( l g n ) f(n)=O(n^k)\ \ \ \ \ ⇒\ \ \ \ \ {\rm lg}(f(n))=O({\rm lg}n) f(n)=O(nk) ⇒ lg(f(n))=O(lgn)
那么上述推论反过来成不成立呢?即由 l g ( f ( n ) ) = O ( l g n ) {\rm lg}(f(n))=O({\rm lg}n) lg(f(n))=O(lgn),是否可以得出 f ( n ) = O ( n k ) f(n)=O(n^k) f(n)=O(nk)?
根据 l g ( f ( n ) ) = O ( l g n ) {\rm lg}(f(n))=O({\rm lg}n) lg(f(n))=O(lgn),存在正常量 n 0 n_0 n0和 k k k,使得对所有 n ≥ n 0 n ≥ n_0 n≥n0,有 l g ( f ( n ) ) ≤ k ∙ l g n = l g n k {\rm lg}(f(n))≤k∙{\rm lg}n={\rm lg}n^k lg(f(n))≤k∙lgn=lgnk。由此可得 f ( n ) ≤ n k f(n)≤n^k f(n)≤nk对所有 n ≥ n 0 n ≥ n_0 n≥n0都成立,这说明 f ( n ) = O ( n k ) f(n)=O(n^k) f(n)=O(nk)。于是下面的推论也成立。
l g ( f ( n ) ) = O ( l g n ) ⇒ f ( n ) = O ( n k ) {\rm lg}(f(n))=O({\rm lg}n)\ \ \ \ \ ⇒\ \ \ \ \ f(n)=O(n^k) lg(f(n))=O(lgn) ⇒ f(n)=O(nk)
综合以上分析, f ( n ) = O ( n k ) f(n)=O(n^k ) f(n)=O(nk)和 l g ( f ( n ) ) = O ( l g n ) {\rm lg}(f(n))=O({\rm lg}n) lg(f(n))=O(lgn)是等价的,即
f ( n ) = O ( n k ) ⇔ l g ( f ( n ) ) = O ( l g n ) f(n)=O(n^k )\ \ \ \ \ ⇔\ \ \ \ \ {\rm lg}(f(n))=O({\rm lg}n) f(n)=O(nk) ⇔ lg(f(n))=O(lgn)
下面我们用这个结论来判断函数 f 1 ( n ) = ⌈ l g n ⌉ ! f_1 (n)=⌈{\rm lg}n⌉! f1(n)=⌈lgn⌉!和 f 2 ( n ) = ⌈ l g l g n ⌉ ! f_2 (n)=⌈{\rm lg lg}n⌉! f2(n)=⌈lglgn⌉!是否多项式有界。
(1) f 1 ( n ) = ⌈ l g n ⌉ ! f_1 (n)=⌈{\rm lg}n⌉! f1(n)=⌈lgn⌉!
对函数 f 1 ( n ) f_1 (n) f1(n)取对数, l g ( f 1 ( n ) ) = l g ( ⌈ l g n ⌉ ! ) {\rm lg}(f_1 (n))={\rm lg}(⌈{\rm lg}n⌉!) lg(f1(n))=lg(⌈lgn⌉!)。根据3.2节的结论 l g ( n ! ) = Θ ( n l g n ) {\rm lg}(n!)=Θ(n{\rm lg}n) lg(n!)=Θ(nlgn),我们可以得到
l g ( ⌈ l g n ⌉ ! ) = Θ ( ⌈ l g n ⌉ ∙ l g ( ⌈ l g n ⌉ ) ) = Θ ( l g n ∙ l g l g n ) {\rm lg}(⌈{\rm lg}n⌉!)=Θ(⌈{\rm lg}n⌉∙{\rm lg}(⌈{\rm lg}n⌉))=Θ({\rm lg}n∙{\rm lg lg}n) lg(⌈lgn⌉!)=Θ(⌈lgn⌉∙lg(⌈lgn⌉))=Θ(lgn∙lglgn)
显然 Θ ( l g n ∙ l g l g n ) Θ({\rm lg}n∙{\rm lg lg}n) Θ(lgn∙lglgn)比 Θ ( l g n ) Θ({\rm lg}n) Θ(lgn)增长要快,所以 O ( l g n ) O({\rm lg}n) O(lgn)并不是 Θ ( l g n ∙ l g l g n ) Θ({\rm lg}n∙{\rm lg lg}n) Θ(lgn∙lglgn)的渐近上界,即 l g ( ⌈ l g n ⌉ ! ) ≠ O ( l g n ) {\rm lg}(⌈{\rm lg}n⌉!)≠O({\rm lg}n) lg(⌈lgn⌉!)̸=O(lgn)。根据上文的推论,有 ⌈ l g n ⌉ ! ≠ O ( n k ) ⌈{\rm lg}n⌉!≠O(n^k) ⌈lgn⌉!̸=O(nk),故 ⌈ l g n ⌉ ! ⌈{\rm lg}n⌉! ⌈lgn⌉!并不是多项式有界。
(2) f 2 ( n ) = ⌈ l g l g n ⌉ ! f_2 (n)=⌈{\rm lg lg}n⌉! f2(n)=⌈lglgn⌉!
对函数 f 2 ( n ) f_2 (n) f2(n)取对数, l g ( f 2 ( n ) ) = l g ( ⌈ l g l g n ⌉ ! ) {\rm lg}(f_2 (n))={\rm lg}(⌈{\rm lg lg}n⌉!) lg(f2(n))=lg(⌈lglgn⌉!)。同样根据3.2节的结论 l g ( n ! ) = Θ ( n l g n ) {\rm lg}(n!)=Θ(n{\rm lg}n) lg(n!)=Θ(nlgn),我们可以得到
l g ( ⌈ l g l g n ⌉ ! ) = Θ ( ⌈ l g l g n ⌉ ∙ l g ( ⌈ l g l g n ⌉ ) ) = Θ ( l g l g n ∙ l g l g l g n ) {\rm lg}(⌈{\rm lg lg}n⌉!)=Θ(⌈{\rm lg lg}n⌉∙{\rm lg}(⌈{\rm lg lg}n⌉))=Θ({\rm lg lg}n∙{\rm lg lg lg}n) lg(⌈lglgn⌉!)=Θ(⌈lglgn⌉∙lg(⌈lglgn⌉))=Θ(lglgn∙lglglgn)
这说明存在正常量 c c c和 n 0 n_0 n0,使得对所有 n ≥ n 0 n ≥ n_0 n≥n0,有 l g ( ⌈ l g l g n ⌉ ! ) ≤ c ∙ l g l g n ∙ l g l g l g n {\rm lg}(⌈{\rm lg lg}n⌉!)≤c∙{\rm lg lg}n∙{\rm lg lg lg}n lg(⌈lglgn⌉!)≤c∙lglgn∙lglglgn。因为 l g l g l g n ≤ l g l g n {\rm lg lg lg}n≤{\rm lg lg}n lglglgn≤lglgn,所以又有 l g ( ⌈ l g l g n ⌉ ! ) ≤ c ∙ ( l g l g n ) 2 {\rm lg}(⌈{\rm lg lg}n⌉!)≤c∙({\rm lg lg}n)^2 lg(⌈lglgn⌉!)≤c∙(lglgn)2。我们令 m = l g n m={\rm lg}n m=lgn,有 l g ( ⌈ l g l g n ⌉ ! ) ≤ c ∙ l g 2 m {\rm lg}(⌈{\rm lg lg}n⌉!)≤c∙{\rm lg}^2 m lg(⌈lglgn⌉!)≤c∙lg2m。利用3.2节的另一个结论 “ “ “任意多项式函数都比任意多对数函数增长要快 ” ” ”,我们有
l g ( ⌈ l g l g n ⌉ ! ) ≤ c ∙ l g 2 m = O ( m ) = O ( l g n ) {\rm lg}(⌈{\rm lg lg}n⌉!)≤c∙{\rm lg}^2 m=O(m)=O({\rm lg}n) lg(⌈lglgn⌉!)≤c∙lg2m=O(m)=O(lgn)。
根据上文的推论,有 ⌈ l g l g n ⌉ ! = O ( n k ) ⌈{\rm lg lg}n⌉!=O(n^k ) ⌈lglgn⌉!=O(nk),即 ⌈ l g l g n ⌉ ! ⌈{\rm lg lg}n⌉! ⌈lglgn⌉!是多项式有界的。
3.2-5 如下两个函数中,哪一个渐近更大些: l g ( l g ∗ n ) {\rm lg}({\rm lg}^*n) lg(lg∗n)还是 l g ∗ ( l g n ) {\rm lg}^* ({\rm lg}n) lg∗(lgn)?
解
先分析 l g ∗ ( l g n ) {\rm lg}^* ({\rm lg}n) lg∗(lgn)。 l g ∗ {\rm lg}^* lg∗的定义是连续应用对数函数的次数,由于 l g n {\rm lg}n lgn已经对 n n n应用了一次对数函数,故对 l g n {\rm lg}n lgn应用 l g ∗ {\rm lg}^* lg∗,应当比对 n n n应用 l g ∗ {\rm lg}^* lg∗要小 1 1 1,即 l g ∗ ( l g n ) = l g ∗ n − 1 {\rm lg}^* ({\rm lg}n)={\rm lg}^* n-1 lg∗(lgn)=lg∗n−1。
令 m = l g ∗ n m={\rm lg}^* n m=lg∗n,那么 l g ∗ ( l g n ) = l g ∗ n − 1 = m − 1 {\rm lg}^* ({\rm lg}n)={\rm lg}^* n-1=m-1 lg∗(lgn)=lg∗n−1=m−1,并且 l g ( l g ∗ n ) = l g m {\rm lg}({\rm lg}^* n)={\rm lg}m lg(lg∗n)=lgm。利用3.2节的结论 “ “ “任意多项式函数都比任意多对数函数增长要快 ” ” ”,可以得出 m − 1 m-1 m−1比 l g m {\rm lg}m lgm增长要快,这说明 l g ∗ ( l g n ) {\rm lg}^* ({\rm lg}n) lg∗(lgn)比 l g ( l g ∗ n ) {\rm lg} ({\rm lg^*}n) lg(lg∗n)渐近更大。
3.2-6 证明:黄金分割率 φ φ φ及其共轭数 φ ^ \hat{φ} φ^都满足方程 x 2 = x + 1 x^2 = x + 1 x2=x+1。
略
3.2-7 用归纳法证明:第 i i i个斐波那契数满足等式
其中, φ φ φ是黄金分割率且 φ ^ \hat{φ} φ^是其共轭数。
解
先考虑初始情况 i = 0 i = 0 i=0和 i = 1 i = 1 i=1。
故 F i = φ i − φ ^ i 5 F_i=\frac{φ^i-\hat{φ}^i}{\sqrt{5}} Fi=5φi−φ^i对初始情况 i = 0 i = 0 i=0和 i = 1 i = 1 i=1成立。
现在假设等式对 0 , 1 , … , i − 1 0, 1, …, i-1 0,1,…,i−1都成立,于是有
综上所述, F i = φ i − φ ^ i 5 F_i=\frac{φ^i-\hat{φ}^i}{\sqrt{5}} Fi=5φi−φ^i对所有 i ≥ 0 i ≥ 0 i≥0的整数都成立。
3.2-8 证明: k l n k = Θ ( n ) k{\rm ln}k=Θ(n) klnk=Θ(n)蕴含着 k = Θ ( n / l n n ) k=Θ(n/{\rm ln}n) k=Θ(n/lnn)。
解
k l n k = Θ ( n ) k{\rm ln}k=Θ(n) klnk=Θ(n)意味着存在正常量 c 1 c_1 c1、 c 2 c_2 c2和 n 0 n_0 n0,使得当 n ≥ n 0 n ≥ n_0 n≥n0时,有
对这个不等式取以e为底的指数,得到
即
(1) 首先证明当 n n n足够大时,有 k < n k < n k<n
注意,这里的 k k k应当理解为一个自变量为 n n n的函数,而不是一个常数。采用反证法,假设存在 k ≥ n k ≥ n k≥n。由于 e c 2 e^{c_2} ec2是常数,当 n n n足够大时,一定会有 n > e c 2 n>e^{c_2} n>ec2。我们已经假设存在 k ≥ n k ≥ n k≥n,于是有 e k + k ≥ e n + n > e n + e c 2 e^k+k≥e^n+n>e^n+e^{c_2} ek+k≥en+n>en+ec2,这与上面的不等式 e k + k ≤ e c 2 + e n e^k+k≤e^{c_2 }+e^n ek+k≤ec2+en矛盾,所以假设不成立,故当 n n n足够大时,一定有 k < n k < n k<n。
(2) 证明 k = Ω ( n / l n n ) k=Ω(n/{\rm ln}n) k=Ω(n/lnn)
现在利用(1)的结论来证明 k = Ω ( n / l n n ) k=Ω(n/{\rm ln}n) k=Ω(n/lnn)。根据不等式①,当 n n n足够大时,有 c 1 n ≤ k l n k c_1 n≤k{\rm ln}k c1n≤klnk。根据(1)的结论,当 n n n足够大时,有 k < n k < n k<n。所以当 n n n足够大时,有
故 k = Ω ( n / l n n ) k=Ω(n/{\rm ln}n) k=Ω(n/lnn)成立。
(2) 证明 k = O ( n / l n n ) k=O(n/{\rm ln}n) k=O(n/lnn)
以下分析都建立在 n n n足够大的前提下。将不等式①写为一个不等式组
将不等式④两边取对数,得到
即
将不等式⑤和⑥左边两边分别相乘得到
即
因为 l n l n k < l n k {\rm lnln}k< {\rm ln}k lnlnk<lnk,所以有 l n l n k l n k < 1 \frac {{\rm lnln}k}{{\rm ln}k}<1 lnklnlnk<1。而 l n c 1 l n k > 0 \frac{{\rm ln}c_1}{{\rm ln}k}>0 lnklnc1>0显然成立。所以有
将不等式⑧代入不等式⑦中,可以得到
由此可见,当 n n n足够大时,有 k < 2 c 2 n / l n n k<2c_2n/{\rm ln}n k<2c2n/lnn。故 k = O ( n / l n n ) k=O(n/{\rm ln}n) k=O(n/lnn)成立。
综上所述, k l n k = Θ ( n ) k{\rm ln}k=Θ(n) klnk=Θ(n)意味着 k = Θ ( n / l n n ) k=Θ(n/{\rm ln}n) k=Θ(n/lnn)。