练习 2-2 解答

Problem 1 (教材习题 3.2-2)

证明:alog⁡bc=clog⁡baa^{\log_b c} = c^{\log_b a} 。

Solution

证明:因为

ln⁡alog⁡bc=log⁡bcln⁡a=ln⁡cln⁡bln⁡a=ln⁡aln⁡bln⁡c=log⁡baln⁡c=ln⁡clog⁡ba\begin{aligned}
\ln{a^{\log_b c}} & = \log_b c\ln a = \frac{\ln c}{\ln b} \ln a \
& = \frac{\ln a}{\ln b} \ln c = \log_b a\ln c\
& = \ln{c^{\log_b a}}
\end{aligned}

所以 alog⁡bc=clog⁡baa^{\log_b c} = c^{\log_b a} 。

Problem 2 (教材习题 3.2-3)

证明 log⁡(n!)=Θ(nlog⁡n)\log(n!) = \Theta(n\log n) ,并证明 n!=ω(2n)n! = \omega(2^n) 且 n!=o(nn)n! = o(n^n) 。

Solution

证明:根据斯特林近似公式(见第2讲PPT第10页,教材3.2节),有:

log⁡(n!)=log⁡(2πn(ne)n(1+Θ(1n)))=12log⁡(2πn)+nlog⁡n−nlog⁡e+log⁡(1+Θ(1n))\begin{aligned}
\log(n!) &= \log(\sqrt{2\pi n}(\frac{n}{e})^n(1 + \Theta(\frac{1}{n})))\
&= \frac12\log(2\pi n) + n\log n - n \log e + \log(1 + \Theta(\frac1n))
\end{aligned}

其中最高阶项是 nlog⁡nn \log n ,所以 log⁡(n!)=Θ(nlog⁡n)\log(n!) = \Theta(n\log n) 。

lim⁡n→∞2nn!=lim⁡n→∞12πn(1+Θ(1n))(2en)n≤lim⁡n→∞(2en)n≤lim⁡n→∞(12)n,n≥4e=0\begin{aligned}
\lim_{n \to \infty}\frac{2^n}{n!} &= \lim_{n \to \infty} \frac{1}{\sqrt{2\pi n}(1+\Theta(\frac1n))} (\frac{2e}{n})^n \le \lim_{n \to \infty} (\frac{2e}{n})^n\
&\le \lim_{n \to \infty} (\frac12)^n ,n \ge 4e \
&= 0
\end{aligned}

于是 lim⁡n→∞2nn!=0\lim\limits_{n \to \infty}\frac{2^n}{n!} = 0 ,则 n!=ω(2n)n! = \omega(2^n) 。

lim⁡n→∞nnn!=lim⁡n→∞12πn(1+Θ(1n))en≥lim⁡n→∞enc⋅n,c is a constant=∞\begin{aligned}
\lim_{n \to \infty}\frac{n^n}{n!} &= \lim_{n \to \infty} \frac{1}{\sqrt{2\pi n}(1+\Theta(\frac1n))} e^n \
&\ge \lim_{n\to\infty} \frac{e^n}{c\cdot n}, c \text{ is a constant}\
&= \infty
\end{aligned}

于是 lim⁡n→∞nnn!=∞\lim\limits_{n \to \infty}\frac{n^n}{n^!} = \infty ,则 n!=o(nn)n! = o(n^n) 。

Problem 3 (教材习题 3.2-4)

函数 ⌈log⁡n⌉!\lceil\log n\rceil! 多项式有界吗?函数 ⌈log⁡log⁡n⌉!\lceil\log\log n\rceil! 多项式有界吗?

Solution
  1. 函数 ⌈log⁡n⌉!\lceil\log n\rceil! 不是多项式有界的。

证明:反证法。假设 ⌈log⁡n⌉!\lceil\log n\rceil! 是多项式有界的,则存在常数 c,a,n0c, a, n_0 ,使得当 n≥n0n \ge n_0 时, ⌈log⁡n⌉!≤cna\lceil\log n\rceil! \le cn^a 恒成立。特别地,考虑 n=2k,k∈Nn = 2^k, k\in\mathbb{N} 的情况,有 ⌈k⌉!≤c(2a)k\lceil k\rceil! \le c(2^a)^k ,这与阶乘并不是指数有界是矛盾的。

阶乘不是指数有界的这件事情可以通过问题2中类似的方式证明: n!=ω(an)n! = \omega(a^n) 。

  1. 函数 ⌈log⁡log⁡n⌉!\lceil\log\log n\rceil! 是多项式有界的。

证明:不失一般性,令 n=22kn = 2^{2^k} ,则有

⌈log⁡log⁡n⌉!=k!=∏i=1ki≤∏i=1k22i−1=2∑i=1k2i−1=22k−1≤22k=n\lceil\log\log n\rceil! = k! = \prod_{i = 1}^{k} i \le \prod_{i = 1}^{k} 2^{2^{i - 1}} = 2^{\sum\limits_{i = 1}^{k} 2^{i - 1}} = 2^{2^k - 1} \le 2^{2^k} = n

于是, ⌈log⁡log⁡n⌉!\lceil\log\log n\rceil! 是多项式有界的。

Problem 4 (教材习题 3.2-5)

如下两个函数中,哪一个渐近更大些:log⁡(log⁡∗n)\log(\log^* n) 还是 log⁡∗(log⁡n)\log^*(\log n) ?

Solution

注意到 log⁡∗(2n)=1+log⁡∗n\log^*(2^n) = 1 + \log^* n ,则:

lim⁡n→∞log⁡(log⁡∗n)log⁡∗(log⁡n)=lim⁡n→∞log⁡(log⁡∗(2n))log⁡∗(log⁡(2n))(换元:n→2n)=lim⁡n→∞log⁡(log⁡∗n+1)log⁡∗n=lim⁡n→∞log⁡(n+1)n(换元:log⁡∗n→n)=lim⁡n→∞1n+1(洛必达法则)=0\begin{aligned}
\lim_{n\to\infty} \frac{\log(\log^* n)}{\log^*(\log n)} &= \lim_{n\to\infty} \frac{\log(\log^* (2^n))}{\log^*(\log (2^n))} (\text{换元:} n \to 2^n ) \
&= \lim_{n\to\infty} \frac{\log(\log^n + 1)}{\log^ n} \
&= \lim_{n\to\infty} \frac{\log(n + 1)}{n} (\text{换元:} \log^* n \to n)
&= \lim_{n\to\infty} \frac{1}{n + 1} (\text{洛必达法则}) \
&= 0
\end{aligned}

从而 log⁡(log⁡∗n)=o(log⁡∗(log⁡n))\log(\log^* n) = o(\log^*(\log n)) , log⁡∗(log⁡n)\log^*(\log n) 渐近更大些。

Problem 5 (教材习题 3.2-8)

证明: kln⁡k=Θ(n)⇒k=Θ(n/ln⁡n)k\ln k = \Theta(n) \Rightarrow k = \Theta(n / \ln n) 。

Solution

证明:下面的讨论都是在 nn 和 kk 充分大的情况下。

由 kln⁡k=Θ(n)k\ln k = \Theta(n) 有 c1n≤kln⁡k≤c2nc_1 n \le k\ln k \le c_2 n 。

于是 kln⁡kc2≤n≤kln⁡kc1\frac{k\ln k}{c_2}\le n\le \frac{k\ln k}{c_1} ,

从而 ln⁡k+ln⁡(2)k−ln⁡c2≤ln⁡n≤ln⁡k+ln⁡(2)k−ln⁡c1\ln k + \ln^{(2)} k - \ln c_2 \le \ln n \le \ln k + \ln^{(2)} k - \ln c_1 。

不难发现 ln⁡n=Θ(ln⁡k)\ln n = \Theta(\ln k) ,不妨设 c3ln⁡k≤ln⁡n≤c4ln⁡kc_3 \ln k \le \ln n \le c_4 \ln k ,于是

kln⁡kc2c4ln⁡k≤nln⁡n≤kln⁡kc1c3ln⁡k\frac{\frac{k\ln k}{c_2}}{c_4 \ln k} \le \frac{n}{\ln n} \le \frac{\frac{k\ln k}{c_1}}{c_3 \ln k}

即 kc2c4≤n/ln⁡n≤kc1c3\frac{k}{c_2c_4} \le n / \ln n \le \frac{k}{c_1c_3} ,简单变形有:

c1c3(n/ln⁡n)≤k≤c2c4(n/ln⁡n)c_1c_3 (n /\ln n) \le k \le c_2c_4 (n / \ln n)

因此 k=Θ(n/ln⁡n)k = \Theta(n / \ln n) 。