CMU 15-751 课程第三课笔记。

接上回 CMU 15-751 CS Theory Toolkit Lecture 2 - Basic Asymptotics

同样照抄参考了 Lecture Note

今天学习的是阶乘和二项式系数的渐进分析,这两种的出现频率非常高,因此我们很有必要熟悉他们的渐进方法。这也是我们做更多渐进分析的练习的机会。

阶乘(Factorials)

n!=2Θ(nlogn)n! = 2^{\Theta(n\log n)}

阶乘我们非常熟悉,n!=n(n1)(n2)21=i=1nin! = n(n-1)(n-2)\dots 2\cdot 1 = \prod_{i=1}^n i

那我们如何分析 n!n! 的渐进性呢?

首先,我们显然有

n!=n(n1)(n2)21nnnn=nn\begin{aligned} n! &= n(n-1)(n-2)\dots 2\cdot 1\\ &\leq n\cdot n\cdots n \cdot n = n^n \end{aligned}

这是 n!n! 我们可以确定的一个上界,尽管这个上界可以说宽松得过分。

想要计算 n!n! 的下界,我们可以只取前 n2\lceil\frac n2\rceil 项,对这些项应该都大于 n2\frac n2,对它们都取 n2\lceil\frac n2\rceil 的下界,得到

n!=n(n1)(n2)21n2n2n2(n2times)=(n2)n2(n2)n/2\begin{aligned} n! &= n(n-1)(n-2)\dots 2\cdot 1\\ &\geq \lceil\frac n2\rceil\cdot\lceil\frac n2\rceil\cdots\lceil\frac n2\rceil\quad (\lceil\frac n2\rceil\text{times})\\ &= \left(\lceil\frac n2\rceil\right)^{\lceil\frac n2\rceil} \geq \left(\frac n2\right)^{n / 2} \end{aligned}

上面的讨论是建立在 nn 是偶数的基础上的,但是在 nn 是奇数的时候这也是成立的,这很容易看出来。

这样,我们就得到了一个仍然不宽松的下界,且把上下界都统一为 nnn^n 的形式。

但是我们如何比较 n!n! 的上下界呢?即使形式类似,(n2)n/2\left(\frac n2\right)^{n / 2}nnn^n 的大小实际上也相差甚远。

对于这样的很大很长的连乘式,对它们不断取对数是一个很常用的做法,因为这样我们就可以把底数大小、连乘次数这些难以解决的东西变成对数下的常数。

因此,我们得到

n2ln(n2)ln(n!)nlnn\frac n2\ln\left(\frac n2\right) \leq \ln(n!) \leq n\ln n

因此,这里的 ln(n!)\ln(n!) 的上下界都可以统一为 Θ(nlogn)\Theta(n\log n)

于是我们就得到了 n!=2Θ(nlogn)n! = 2^{\Theta(n\log n)}

当然,这个结果过于宽松,我们不会满意于这个结果。让我尝试获得更精确的结果。

ln(n!)nlnn\ln(n!) \sim n\ln n

通过泰勒公式,我们可以得到:

ex=1+x+x22!+x33!+xnn!,x0\begin{aligned} e^x &= 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots\\ &\geq \frac{x^n}{n!},\quad \forall x \geq 0 \end{aligned}

我们令 x=nx = n,则可以得到 n!xnen=(ne)nn! \geq \frac{x^n}{e^n} = \left(\frac ne\right)^n

这是一个非常优秀的下界,我们将之与之前得到的上界连在一起便可以得到 (ne)nn!nn\left(\frac ne\right)^n \leq n! \leq n^n。于是

nln(ne)=nlnnnln(n!)nlnnn\ln\left(\frac ne\right) = n\ln n - n \leq \ln(n!) \leq n\ln n

于是我们就得到了 ln(n!)nlnn\ln(n!) \sim n\ln n

这是一个非常优美的形式,但是实际上这个界限还是非常宽松——这仅仅是一个对于 ln(n!)\ln(n!) 的优秀渐进,对于 n!n! 本身仍然是一个很大的范围,我们希望知道 n!n! 是离 (ne)n\left(\frac ne\right)^n 更接近还是距离 (n1)n\left(\frac n1\right)^n 更接近。

n!nnenn! \approx \frac{n^n}{e^n}

为了解决这个问题,我们可以设出分式的分母。令 n!=nnf(n)n! = \frac{n^n}{f(n)},即 f(n)=nnn!f(n) = \frac{n^n}{n!}。我们只需要关心 f(n)1f(n) \to 1 还是 f(n)enf(n)\to e^n,也就是 f(n+1)f(n)1\frac{f(n+1)}{f(n)}\to 1 还是 f(n+1)f(n)e\frac{f(n+1)}{f(n)}\to e

f(n+1)f(n)=(n+1)n+1/nn(n+1)!/n!=(n+1)nnn=(1+1n)n\begin{aligned} \frac{f(n+1)}{f(n)} &= \frac{(n+1)^{n+1} / n^n}{(n+1)! / n!}\\ &= \frac{(n+1)^{n}}{n^n}\\ &= (1 + \frac 1n)^n \end{aligned}

根据微积分的基本知识,我们知道这个式子的极限是 ee。(实际上,这也是 ee 的定义之一,或者也可以通过 1+1ne1/n1 + \frac 1n \approx e^{1/n} 来理解)

于是我们就得到了 f(n)enf(n) \approx e^n,那么对于很大的 nn,我们就可以有 n!nnenn! \approx \frac{n^n}{e^n}。

n!=Θ(nnenn)n! = \Theta(\frac{n^n}{e^n}\sqrt n)

模仿上一个 Lecture 中我们求调和数的渐进性的方法,我们可以用积分发来更精确地计算 n!n! 的渐进。

使用积分来接近

我们知道 ln(n!)=ln1+ln2+ln3++lnn\ln(n!) = \ln 1 + \ln 2 + \ln 3 + \dots + \ln n,其中 ln1=0\ln 1 = 0,因此我们可以用 1nlnt dt\int_1^n \ln t\ \mathrm dt 来接近 ln(n!)\ln(n!)

如上面的图 (a) 所示,我们可以得到

ln(n!)1nlnt dt=tlntt1n=nlnnn+1\begin{aligned} \ln(n!) &\geq \int_1^n \ln t\ \mathrm dt\\ &= t\ln t - t \big|_1^n\\ &= n\ln n - n + 1 \end{aligned}

这样我们就算出了 ln(n!)\ln(n!) 的上限。

我们很清楚地知道我们这里的积分多算了哪一块。我们可以通过把每一个矩形左上角的三角形加回来,如图 © 所示,来弥补这个多算的部分——但是这样会导致有若干的小薄条没有被计算,因此我们得到的是 ln(n!)\ln(n!) 的下限。

图 © 中的每一个小薄条,都是底为 11,高为 lnnln(n1)\ln n - \ln(n-1) 的直角三角形。这些直角三角形的面积和很容易计算,它们的高之和显然就是 ln2ln1+ln3ln2++lnnln(n1)=lnn\ln 2 - \ln 1 + \ln 3 - \ln 2 + \dots + \ln n - \ln(n-1) = \ln n,因此它们的面积和就是 121lnn=12lnn\frac 12 \cdot 1 \cdot \ln n = \frac 12 \ln n

于是我们得到

nlnnn+1ln(n!)nlnnn+12lnn+1n\ln n - n + 1 \leq \ln(n!) \leq n\ln n - n + \frac 12\ln n + 1

对两边做 exp\exp 运算,得到

nnenen!nnenne\frac{n^n}{e^n}\cdot e \leq n! \leq \frac{n^n}{e^n} \cdot \sqrt n \cdot e

这样我们就把 n!nnenn! \approx \frac{n^n}{e^n} 推进到了一个更紧的范围。这个形式也可以写成 n!=Θ~(nnen)n! = \tilde\Theta\left(\frac{n^n}{e^n}\right)

但是这个结果我们仍然不满意。我们想要知道除了 nnen\frac{n^n}{e^n} 这个因式之外,剩下的那个因式到底是 Θ(1)\Theta(1) 还是 Θ(n)\Theta(\sqrt n)

我们知道,我们刚刚在计算 ln(n!)\ln(n!) 的上界时,求得的结果只比真正的值多了若干个小薄片。那么我们要想办法把这个小薄片的面积减去。

直接计算当然不好算,但是我们可以想办法去接近。我们可以再 y=lnxy = \ln x 的曲线上,每一次都从第 iiii22 开始编号)个小薄条的右上角 (n,lnn)(n, \ln n) 做一个切线,与 x=n1x = n-1 这条直线的交点,以及 (n1,ln(n1))(n-1, \ln(n-1)) 这三个点构成一个三角形。这个三角形的面积显然会比小薄条的面积大,因此减去后就可以得到一个更紧密的下界。

切线三角形的面积

我们知道 (n,lnn)(n, \ln n) 点的切线斜率是 1n\frac 1n,因此交点的 yy 坐标是 lnn1n\ln n - \frac 1n,三角形的底就是 lnnln(n1)1n\ln n - \ln(n-1) - \frac 1n。于是小三角形的总面积就是

12i=2n(lnnln(n1)1n)=12i=2nlnn12i=1n1lnn12i=2n1n=12(lnnH(n)+1)\begin{aligned} &\frac 12\sum_{i=2}^n \left(\ln n - \ln(n-1) - \frac 1n\right)\\ =& \frac 12\sum_{i=2}^n \ln n - \frac 12\sum_{i=1}^{n-1}\ln n - \frac 12\sum_{i=2}^n \frac 1n\\ =& \frac 12(\ln n - H(n) + 1) \end{aligned}

其中,H(n)H(n) 是我们上一个 Lecture 的调和数。我们知道 H(n)=lnn+γO(1n)H(n) = \ln n + \gamma - O(\frac 1n)。因此上式可以写为 12(1γ+O(1n))=Θ(1)\frac 12\left( 1 - \gamma + O\left(\frac 1n\right)\right) = \Theta(1)

也就是说

nlnnn+12lnn+1Θ(1)ln(n!)nlnnn+12lnn+1n\ln n - n + \frac 12\ln n + 1 - \Theta(1)\leq \ln(n!) \leq n\ln n - n + \frac 12\ln n + 1

n!=Θ(nnenn)n! = \Theta(\frac{n^n}{e^n}\sqrt n)

斯特林公式(Stirling’s Formula)

实际上从上面的结论到这个公式还需要做更多的计算。如果真的想要求出这个常数的话再后面的学习中我们可能会遇到。但是这里我们只需要知道

n!=2πn(ne)n(1±O(1n))n! = \sqrt{2\pi n} \left(\frac ne\right)^n\left(1 \pm O\left(\frac 1n\right)\right)

二项式系数(Binomial Coefficients)

kk 非常小的时候,(nk)nkk!\binom nk \approx \frac{n^k}{k!}

二项式系数我们都很熟悉,(nk)=n!k!(nk)!=n(n1)(nk+1)k!\binom nk = \frac{n!}{k!(n-k)!} = \frac{n(n-1)\cdots(n-k+1)}{k!}。它可以表示从 nn 个不同物品中选出 kk 个的方案数,也可以表示二项式展开得到的系数。

kk 很小,也就是 k<<nk << n 时,我们可以得到

n(n1)(nk+1)k!=nkk!(11n)(12n)(1k1n)=nkk!Pk,n=nkk!exp(k22n)nkk!(1k22n)nkk!\begin{aligned} &\frac{n(n-1)\cdots(n-k+1)}{k!}\\ =& \frac{n^k}{k!}\left(1 - \frac 1n\right)\left(1 - \frac 2n\right)\cdots\left(1 - \frac{k-1}n\right)\\ =& \frac{n^k}{k!}P_{k, n}\\ =& \frac{n^k}{k!}\exp\left(-\frac{k^2}{2n}\right) \sim \frac{n^k}{k!}\left(1-\frac{k^2}{2n}\right)\\ \sim& \frac{n^k}{k!} \end{aligned}

其中 Pk,nP_{k, n} 是我们在之前的生日问题中定义的数。

于是我们得到,当 kk 非常小的时候,(nk)nkk!\binom nk \approx \frac{n^k}{k!}

简单的上下界

实际上,因为 n(n1)(nk+1)nkn(n-1)\cdots(n-k+1) \leq n^k,所以 nkk!\frac{n^k}{k!}(nk)\binom nk 的一个简单的上界,这对任意的 kk 都成立。又因为 k!kkekk! \geq \frac{k^k}{e^k},于是我们可以得到一个工整一些的形式:

(nk)(enk)k\binom nk \leq \left(\frac{en}k\right)^k

我们也可以求出 (nk)\binom nk 的下界。

我们知道

(nk)=nkn1k1n2k2nk+11\binom nk = \frac nk\cdot \frac{n-1}{k-1}\cdot\frac{n-2}{k-2}\cdots\frac{n-k+1}{1}

因为 nikink\frac{n-i}{k-i} \geq \frac nk(可以通过 nkkinkni\Leftrightarrow nk - ki \geq nk - ni 来证明),因此我们可以得到

(nk)(nk)k\binom nk \geq \left(\frac nk\right)^k

我们惊喜地看到,我们得到的上界和下界仅有一个 eke^k 的因式的差异。这样的渐进对于我们来说往往是足够的,如果我们取一下对数,我们可以得到

kln(nk)ln(nk)kln(enk)=kln(nk)+kk\ln\left(\frac nk\right) \leq \ln\binom nk \leq k\ln\left(\frac {en}k\right) = k\ln\left(\frac nk\right) + k

也就是 ln(nk)=Θ(kln(nk))\ln \binom nk = \Theta\left(k\ln\left(\frac nk\right)\right)

(npn)2H(p)n\binom n{pn} \leq 2^{H(p)n}

如果我们知道常数 pp 满足 0<pn2,k=pn0 < p \leq \frac n2, k = pn,我们希望能够对于这时的 (nk)\binom nk 能够更好地分析渐进性。

一般来说,这里我们应该使用斯特林公式来求解这个问题,但是让我们先来试着用一些基本的方法求出 (npn)\binom n{pn} 的上界。

我们令 V(n,k)=(n0)+(n1)++(nk)V(n, k) = \binom n0 + \binom n1 + \dots + \binom nk。这个值可以代表 11 的个数不多于 kk 的长度为 nn 的不同二进制字符串的数量,也通常被认为半径为 kk 的以 00000\cdots0nn00)为中心的「Hamming ball」的数量的容量。这个数在 TCS 中经常出现。

由二项式定理:

(1+x)n=1+(n1)x+(n2)x2++(nk)xk++(nn)xn(n0)+(n1)x+(n2)x2++(nk)xkxkV(n,k),0<x1\begin{aligned} (1 + x)^n &= 1 + \binom n1x + \binom n2x^2 + \dots + \binom nkx^k + \dots + \binom nnx^n\\ &\geq \binom n0 + \binom n1x + \binom n2x^2 + \dots + \binom nkx^k\\ &\geq x^k\cdot V(n, k),\quad\forall0 < x \leq 1 \end{aligned}

因此

V(n,k)(1+x)nxk=(1+x)n(pn)k=(1+xxp)n=(xp+x1p)n=(xp+xq)n,0<x1\begin{aligned} V(n, k) &\leq \frac{(1 + x)^n}{x^k} = \frac{(1 + x)^n}{(pn)^k} = \left(\frac{1+x}{x^p}\right)^n\\ &= \left(x^{-p} + x^{1-p}\right)^n = \left(x^{-p} + x^q\right)^n,\quad\forall0 < x \leq 1 \end{aligned}

其中,我们令 q=1pq = 1 - p

通过求导我们可以知道,当 x=pqx = \frac pq 时,xp+xqx^{-p}+x^q 取得最小值。这个 xx 会小于等于 11,因为我们曾假设 p12p \leq \frac 12。那么此时

xp+xq=xp(1+x)=xp(1+pq)=xp1q=(pq)p1q=(qp)p(1q)p(1q)q=(1p)p(1q)q\begin{aligned} x^{-p}+x^q &= x^{-p} (1+x) = x^{-p}\left(1 + \frac pq\right)\\ &= x^{-p}\cdot\frac 1q = \left(\frac pq\right)^{-p}\cdot \frac 1q\\ &= \left(\frac qp\right)^{p} \left(\frac 1q\right)^{p}\left(\frac 1q\right)^{q}\\ &= \left(\frac 1p\right)^{p}\left(\frac 1q\right)^{q} \end{aligned}

因而

(npn)V(n,pn)[(1p)p(1q)q]n=ppnqqnfor p12\binom n{pn} \leq V(n, pn) \leq \left[\left(\frac 1p\right)^{p}\left(\frac 1q\right)^{q}\right]^n = p^{-pn}q^{-qn} \quad \text{for}\ p\leq \frac 12

如果我们令 H(p)=plog21p+qlog21qH(p) = p\log_2\frac 1p + q\log_2\frac 1q,这个函数一般被称为二元交叉熵(Binary entropy function),那么上式可以写成

(npn)V(n,pn)=2H(p)n\binom n{pn} \leq V(n, pn) = 2^{H(p)n}

 示意图

(npn)=Θ(1n2H(p)n)\binom n{pn} = \Theta\left(\frac 1{\sqrt n}2^{H(p)n}\right)

现在让我们来使用斯特林公式解决这个问题。

(npn)=n!(pn)!(qn)!2πn(n/e)n2πn(pn/e)pn2πn(qn/e)qn=2πn(n/e)n(2πn)(n/e)nppnqqn=12πpq1n[(1p)p(1p)q]n=12πpq1n2H(p)n\begin{aligned} \binom n{pn} &= \frac{n!}{(pn)!(qn)!}\\ & \sim \frac{\sqrt{2\pi n}(n/e)^n}{\sqrt{2\pi n}(pn/e)^{pn}\cdot \sqrt{2\pi n}(qn/e)^{qn}}\\ &= \frac{\sqrt{2\pi n}(n/e)^n}{(2\pi n)(n/e)^n p^{pn}q^{qn}}\\ &= \frac 1{\sqrt{2\pi pq}}\frac 1{\sqrt n}\left[\left(\frac 1p\right)^p\left(\frac 1p\right)^q\right]^n\\ &= \frac 1{\sqrt{2\pi pq}}\frac 1{\sqrt n} 2^{H(p)n} \end{aligned}

因此,(npn)=Θ(1n2H(p)n)\binom n{pn} = \Theta\left(\frac 1{\sqrt n}2^{H(p)n}\right)

特别的,当 p=12p = \frac 12 时,H(p)=1H(p) = 1,因此

(nn/2)2n2πn=Θ(1n)\frac{\binom n{n/2}}{2^n} \sim \sqrt{\frac 2{\pi n}} = \Theta\left(\sqrt{\frac 1n}\right)

也就是说,如果我们抛 nn 枚硬币(nn 是偶数),恰好 n2\frac n2 枚硬币正面朝上的概率,大约会趋近于 2πn=Θ(1n)\sqrt{\frac 2{\pi n}} = \Theta\left(\sqrt{\frac 1n}\right)