3.5 另一类生成函数A different type of generating functions
本页为译文 + 高中讲解合一:黑色正文为忠实翻译;彩色框(目标 / 例 / 分步推演)与配图为面向高中生的详解,逐步推演、举例、画图,不用比喻。
虽然普通生成函数(ordinary generating function)与指数生成函数(exponential generating function)是实际中最常用的两类生成函数,但它们并不是枚举中唯一有用的生成函数。有兴趣的读者可以在文献 [84] 中找到各式各样的其他生成函数。这里我们只再介绍一种类型——双重指数生成函数(doubly exponential generating function);在后面某一章里我们会用到它。
三类生成函数的“分母”一眼对照(数列同为 \(\{a_n\}\)):
稍作尝试便会发现,我们目前学过的两种生成函数对此情形都无济于事:这个数列增长得太快,即使是指数生成函数的技巧也压不住它。因此,我们定义 \[A(x)=\sum_{n\ge 0}a_n\frac{x^n}{n!^2},\] 并称 \(A(x)\) 为数列 \(\{a_n\}_{n\ge 0}\) 的双重指数生成函数(doubly exponential generating function)。
- \(a_0=1\)(题目给定)。
- \(a_1=1^2\cdot a_0+1!=1+1=2\)。
- \(a_2=2^2\cdot a_1+2!=4\cdot 2+2=10\)。
- \(a_3=3^2\cdot a_2+3!=9\cdot 10+6=96\)。
- \(a_4=4^2\cdot a_3+4!=16\cdot 96+24=1560\)。
余下的部分并不困难。我们把例 3.40 的递推关系两边同乘 \(x^n/n!^2\),再对所有 \(n\ge 1\) 求和。得到 \[\sum_{n\ge 1}a_n\frac{x^n}{n!^2}=\sum_{n\ge 1}a_{n-1}\frac{x^n}{(n-1)!^2}+\sum_{n\ge 1}\frac{x^n}{n!},\] 或者说,在两边都辨认出 \(A(x)\),便有 \[A(x)-1=xA(x)+e^x-1,\] \[A(x)=\frac{e^x}{1-x}.\]
- 左边。 \(\displaystyle\sum_{n\ge 1}a_n\frac{x^n}{n!^2}\) 就是 \(A(x)\) 去掉 \(n=0\) 那一项(\(a_0x^0/0!^2=1\)),所以左边 \(=A(x)-1\)。
- 右边第一项(含 \(n^2a_{n-1}\))。 用上面算好的 \(\dfrac{n^2}{n!^2}=\dfrac{1}{(n-1)!^2}\): \[\sum_{n\ge 1}n^2a_{n-1}\frac{x^n}{n!^2}=\sum_{n\ge 1}a_{n-1}\frac{x^n}{(n-1)!^2}.\] 令 \(m=n-1\),提出一个 \(x\): \[=x\sum_{m\ge 0}a_m\frac{x^m}{m!^2}=x\,A(x).\]
- 右边第二项(含 \(n!\))。 \(\dfrac{n!}{n!^2}=\dfrac{1}{n!}\),于是 \[\sum_{n\ge 1}n!\,\frac{x^n}{n!^2}=\sum_{n\ge 1}\frac{x^n}{n!}=e^x-1,\] 这里用到了 \(e^x=\sum_{n\ge 0}x^n/n!\),减去 \(n=0\) 的那一项 \(1\)。
- 合起来。 \(A(x)-1=xA(x)+(e^x-1)\)。把含 \(A(x)\) 的项移到一边:\(A(x)-xA(x)=e^x\),即 \((1-x)A(x)=e^x\),所以 \[A(x)=\frac{e^x}{1-x}.\]
- 把两个因子各自写成幂级数: \[e^x=\sum_{k\ge 0}\frac{x^k}{k!},\qquad \frac{1}{1-x}=\sum_{j\ge 0}x^j.\]
- 相乘时,凑出 \(x^n\) 需要 \(k+j=n\),即 \(j=n-k\),\(k\) 从 \(0\) 取到 \(n\)。每一项的系数是 \(\dfrac{1}{k!}\cdot 1\)。于是 \(x^n\) 的系数为 \[[x^n]\,\frac{e^x}{1-x}=\sum_{k=0}^{n}\frac{1}{k!}.\]
- 另一边,按定义 \([x^n]A(x)=\dfrac{a_n}{n!^2}\)。令两者相等: \[\frac{a_n}{n!^2}=\sum_{k=0}^{n}\frac{1}{k!}.\]
- 两边乘 \(n!^2\),得到显式公式 \[\boxed{\,a_n=n!^2\sum_{k=0}^{n}\frac{1}{k!}\,}.\]♦
- \(a_0=0!^2\cdot\dfrac{1}{0!}=1\cdot 1=1\)。✓
- \(a_1=1!^2\left(\dfrac{1}{0!}+\dfrac{1}{1!}\right)=1\cdot(1+1)=2\)。✓
- \(a_2=2!^2\left(1+1+\dfrac{1}{2}\right)=4\cdot\dfrac{5}{2}=10\)。✓
- \(a_3=3!^2\left(1+1+\dfrac12+\dfrac16\right)=36\cdot\dfrac{8}{3}=96\)。✓
由此,例 3.40 中那个用普通和指数生成函数都难以处理的快速增长数列,通过双重指数生成函数就得到了简洁的封闭解。这正说明:除普通生成函数与指数生成函数之外,针对不同的增长速度,还有其他类型的生成函数可供选用——选对“分母”,递推就能化为可解的方程。
返回 全书目录