7.3 更精确的渐近More precise asymptotics
本页为译文 + 高中讲解合一:黑色正文为忠实翻译;彩色框(目标 / 例 / 分步推演)与配图为面向高中生的详解,逐步推演、举例、画图,不用比喻。
有时我们能把渐近结果细化到比多项式精度(polynomial precision)还要精确的程度。下面我们考虑两种可以做到这一点的情形。
7.3.1 整函数除以 \((1-x)\)
某些幂级数(power series)的系数数列本身是收敛的,并且我们能够在不逐个算出这些系数的情况下,求出该数列的极限。
回忆:若一个排列(permutation)不含任何 1-环(1-cycle,即不动点),就称它为错位排列(derangement)。类似地,若一个排列既不含 1-环也不含 2-环(2-cycle),就称它为2-错位排列(2-derangement)。设 \(D_{2,n}\) 为长度 \(n\) 的 2-错位排列的个数。我们能说出比值 \(D_{2,n}/n!\) 的什么信息?换句话说,随机选取一个长度为 \(n\) 的排列,它恰好是 2-错位排列的概率是多少?
设 \(\displaystyle D_2(x)=\sum_{n\ge 0}D_{2,n}\frac{x^n}{n!}\) 为数列 \(D_{2,n}\) 的指数生成函数(exponential generating function),其中约定 \(D_{2,0}=1\)。我们可以用指数公式(exponential formula)得到 \(D_2(x)\)。事实上,要得到一个被 \(D_{2,n}\) 计数的排列,需要先把 \([n]\) 划分成若干大小至少为 \(2\) 的块,再在每个大小为 \(k\) 的块上放置一个 \(k\)-环。当 \(k\ge 3\) 时有 \((k-1)!\) 种放法,否则有 \(0\) 种。这导出生成函数
\[A(x)=\sum_{k\ge 3}\frac{(k-1)!}{k!}\,x^k=\sum_{k\ge 3}\frac{x^k}{k}=\ln\frac{1}{1-x}-x-\frac{x^2}{2}.\]因此,由指数公式得
\[\tag{7.24}D(x)=e^{A(x)}=\frac{e^{-x-\frac{x^2}{2}}}{1-x}.\]- 放环的方法数:在 \(k\) 个元素上排一个 \(k\)-环共有 \((k-1)!\) 种(先固定第一个元素,再排其余 \(k-1\) 个),所以“一个 \(k\)-环”这种连通结构对应的指数生成函数项是 \(\dfrac{(k-1)!}{k!}x^k\)。
- 约分:\(\dfrac{(k-1)!}{k!}=\dfrac{1}{k}\),于是单环的生成函数是 \(\displaystyle\sum_{k\ge 3}\frac{x^k}{k}\)。
- 用已知级数 \(\displaystyle\sum_{k\ge 1}\frac{x^k}{k}=-\ln(1-x)=\ln\frac{1}{1-x}\),再把不允许的 \(k=1\) 项 \(x\) 和 \(k=2\) 项 \(\dfrac{x^2}{2}\) 减掉,就得到 \(A(x)=\ln\dfrac{1}{1-x}-x-\dfrac{x^2}{2}\)。
- 指数公式说:若 \(A(x)\) 是“一个连通件”的指数生成函数,则“任意多个连通件拼成的整体”的指数生成函数是 \(e^{A(x)}\)。代入得 \(e^{A(x)}=e^{\ln\frac{1}{1-x}}\cdot e^{-x-\frac{x^2}{2}}=\dfrac{1}{1-x}\cdot e^{-x-\frac{x^2}{2}}\),即 (7.24)。
于是我们得到了 \(D(x)\) 的显式表达式,可是该怎么用它呢?为数 \(D_{2,n}\) 写出一个显式公式太复杂了,因为 \(D(x)\) 的分子里含两个求和号,而再除以 \(1-x\) 又意味着一层新的求和。显然 \(D(x)\) 只有一个奇点(singularity),在 \(x=1\) 处;但这只说明 \(D(x)\) 的系数——也就是数 \(D_{2,n}/n!\)——的指数增长率(exponential growth rate)为 \(1\)。这并不太令人惊讶,因为所有收敛到正常数的数列其指数增长率都是 \(1\)。为了达成我们的目标,即求出 \(\displaystyle\lim_{n\to\infty}\frac{D_{2,n}}{n!}\),我们需要学习一项新技术。下面的定理就是朝这个目标迈进的主要工具。
- 因式分解 \(x^n-1=(x-1)(x^{n-1}+\cdots+x+1)\)。这是熟悉的几何级数因式分解。
- 而分母 \(1-x=-(x-1)\)。
- 相除,约去 \((x-1)\):\(\dfrac{x^n-1}{1-x}=\dfrac{(x-1)(1+x+\cdots+x^{n-1})}{-(x-1)}=-(1+x+\cdots+x^{n-1})\)。
- 因此每个 \(f_n\) 给系数 \(x^j\)(\(0\le j\le n-1\))贡献 \(-f_n\);把对 \(x^n\) 有贡献的所有项(即下标 \(k\ge n+1\) 的 \(f_k\))收集起来,\(x^n\) 的系数就是 \(-\sum_{k\ge n+1}f_k\)。
我们同样可以毫不费力地重新得到第 4 章证明过的结果,即:对很大的 \(n\),长度为 \(n\) 的全部排列中大约有 \(1/e\) 是错位排列。事实上,若 \(D_n\) 表示长度为 \(n\) 的错位排列个数,我们在 (4.11) 中已见过 \[\sum_{n\ge0}D_n\frac{x^n}{n!}=\frac{e^{-x}}{1-x}.\] 于是对 \(f(x)=e^{-x}\) 应用定理 7.37,便得 \(\dfrac{D_n}{n!}\approx e^{-1}\)。
- 写出 \(B\) 部分的指数生成函数:长度为 \(k\) 的集合上排列有 \(k!\) 个,故 \(\displaystyle\sum_{k\ge0}k!\frac{x^k}{k!}=\sum_{k\ge0}x^k=\frac{1}{1-x}\)。
- 写出 \(A\) 部分的指数生成函数:集合划分的指数生成函数是 \(e^{e^x-1}\)(贝尔数的指数生成函数);由于 \(A\) 不能为空,去掉空集对应的常数项 \(1\),得到 \(e^{e^x-1}-1\)。
- 把元素先分给 \(A\)、\(B\) 两块,再分别施加结构,这是一个乘积结构,故 \(\displaystyle\sum_{n\ge0}h_n\frac{x^n}{n!}=\big(e^{e^x-1}-1\big)\cdot\frac{1}{1-x}=\frac{f(x)}{1-x}\),其中 \(f(x)=e^{e^x-1}-1\)。
- \(f(x)=e^{e^x-1}-1\) 是整函数(\(e^x\) 与 \(e^{(\cdot)}\) 的复合仍处处收敛),于是由定理 7.37, \[\lim_{n\to\infty}\frac{h_n}{n!}=f(1)=e^{e-1}-1\approx e^{1.71828}-1\approx 4.5746.\]
- 把待求计数对象的指数生成函数化成 \(\dfrac{f(x)}{1-x}\) 的形式——通常 \(1-x\) 来自“一个可有可无、内部为排列的部分”或“做前缀求和”。
- 验证分子 \(f(x)\) 是整函数(常见的 \(e^{\text{多项式}}\)、\(e^{e^x-1}\) 等都满足)。
- 直接代入 \(x=1\):极限 \(\displaystyle\lim_{n\to\infty}a_n=f(1)\)。无需求出任何单个系数。
返回 全书目录