cunzai_zsy0531

关注我

生成函数学习笔记

Post time: 2021-12-18 15:07:40

借鉴一下 M67 的文章,不过不知道为什么没有显示全……

什么是生成函数?

我们年级有许多漂亮的MM。一班有 \(7\) 个左右吧,二班大概有 \(4\) 个,三班最多,\(16\) 个,四班最可怜,一个漂亮的MM都没有,五班据说有 \(1\) 个。如果用一个函数 f(班级)=漂亮MM的个数 ,那么我们可以把上述信息表示成:\(f(1)=7,f(2)=4,f(3)=16,f(4)=0,f(5)=1\),等等。

生成函数(也有叫做“母函数”的,但是我觉得母函数不太好听)是说,构造这么一个多项式函数 \(g(x)\),使得 \(x\)\(n\) 次方系数为 \(f(n)\)。于是,上面的 \(f\) 函数的生成函数 \(g(x)=7x+4x^2 + 16x^3+x^5+...\)。这就是传说中的生成函数了。关键是,这个有什么用呢?一会儿要慢慢说。我敢打赌这绝对会是我写过的最长的一篇文章。

生成函数最绝妙的是,某些生成函数可以化简为一个很简单的函数。也就是说,不一定每个生成函数都是用一长串多项式来表示的。比如,这个函数 \(f(n)=1\)\(n\) 当然是属于自然数的),它的生成函数就应该是\(g(x)=1+x+x^2+x^3+x^4+…\)(每一项都是一,即使 \(n=0\) 时也有 \(x^0\) 系数为 \(1\),所以有常数项)。再仔细一看,这就是一个有无穷多项的等比数列求和嘛。如果 \(-1<x<1\),那么 \(g(x)\) 就等于 \(\frac{1}{1-x}\) 了。在研究生成函数时,我们都假设级数收敛,因为生成函数的 \(x\) 没有实际意义,我们可以任意取值。于是,我们就说,\(f(n)=1\) 的生成函数是 \(g(x)=\frac{1}{1-x}\)

我们举一个例子说明,一些具有实际意义的组合问题也可以用像这样简单的一个函数全部表示出来。考虑这个问题:从二班选 \(n\) 个MM出来有多少种选法。学过简单的排列与组合的同学都知道,答案就是 \(\binom{4}{n}\)。也就是说。从 \(n=0\) 开始,问题的答案分别是 \(1,4,6,4,1,0,0,0,…\)(从 \(4\) 个MM中选出 \(4\) 个以上的人来方案数当然为 \(0\) 喽)。那么它的生成函数 \(g(x)\) 就应该是 \(g(x)=1+4x+6x^2+4x^3+x^4\)。这不就是……二项式展开吗?于是,\(g(x)=(1+x)^4\)

你或许应该知道,\((1+x)^k=\binom{k}{0}x^0+\binom{k}{1}x^1+…+\binom{k}{k}x^k\);但你或许不知道,即使 \(k\) 为负数和小数的时候,也有类似的结论:\((1+x)^k=\binom{k}{0}x^0+\binom{k}{1}x^1+…+\binom{k}{k}x^k+\binom{k}{k+1}x^{k+1}+\binom{k}{k+2}x^{k+2}+…\)(一直加到无穷;式子看着很别扭,自己写到草稿纸上吧,毕竟这里输入数学式子很麻烦)。其中,广义的组合数 \(\binom{k}{i}\) 就等于 \(\frac{k(k-1)(k-2)…(k-i+1)}{i!}\),比如 \(\binom{4}{6}=\frac{4\times 3\times 2\times 1\times 0\times (-1)}{6!}=0\),再比如 \(\binom{-1.4}{2}=\frac{(-1.4)\times (-2.4)}{2!}=1.68\)。后面这个就叫做牛顿二项式定理。当 \(k\) 为整数时,所有 \(i>k\) 时的 \(\binom{k}{i}\) 中分子都要“越过”\(0\) 这一项,因此后面 \(\binom{k}{k+1},\binom{k}{k+2}\) 之类的都为 \(0\) 了,与我们的经典二项式定理结论相同;不同的是,牛顿二项式定理中的指数 \(k\) 可以是任意实数。

我们再举一个例子说明一些更复杂的生成函数。 \(n=x_1+x_2+x_3+…+x_k\) 有多少个非负整数解?这道题是学排列与组合的经典例题了。把每组解的每个数都加 \(1\),就变成 \(n+k=x_1+x_2+x_3+…+x_k\) 的正整数解的个数了。教材上或许会出现这么一个难听的名字叫“隔板法”:把 \(n+k\) 个东西排成一排,在 \(n+k-1\) 个空格中插入 \(k-1\) 个“隔板”。答案我们总是知道的,就是 \(\binom{n+k-1}{k-1}\)。它就等于 \(\binom{n+k-1}{n}\)。它关于 \(n\) 的生成函数是 \(g(x)=\frac{1}{(1-x)^k}\)。这个生成函数是怎么来的呢?其实,它就是 \((1-x)\)\(-k\) 次方。把 \((1-x)^{-k}\) 按照刚才的牛顿二项式展开,我们就得到了 \(x^n\) 的系数恰好是 \(\binom{n+k-1}{n}\),因为 \(\binom{-k}{n}\cdot (-x)^n=[(-1)^n\cdot \binom{n+k-1}{n}]\cdot[(-1)^n\cdot x^n]=\binom{n+k-1}{n}x^n\)。这里看晕了不要紧,后文有另一种方法可以推导出一模一样的公式。事实上,我们有一个纯组合数学的更简单的解释方法。因为我们刚才的几何级数 \(1+x+x^2+x^3+x^4+…=\frac{1}{1-x}\),那么 \((1+x+x^2+x^3+x^4+…)^k\)就等于 \(\frac{1}{(1-x)^k}\)。仔细想想 \(k\)\((1+x+x^2+x^3+x^4+…)\) 相乘是什么意思。\((1+x+x^2+x^3+x^4+…)^k\) 的展开式中,\(n\) 次项的系数就是我们的答案,因为它的这个系数是由原式完全展开后 \(k\) 个指数加起来恰好等于 \(n\) 的项合并起来得到的。

现在我们引用《组合数学》上暴经典的一个例题。很多书上都会有这类题。

我们要从苹果、香蕉、橘子和梨中拿一些水果出来,要求苹果只能拿偶数个,香蕉的个数要是 \(5\) 的倍数,橘子最多拿 \(4\) 个,梨要么不拿,要么只能拿一个。问按这样的要求拿 \(n\) 个水果的方案数。

结合刚才的 \(k\)\((1+x+x^2+x^3+x^4+…)\) 相乘,我们也可以算出这个问题的生成函数。

\[\begin{aligned} g(x)&=(1+x^2+x^4+…)(1+x^5+x^{10}+\ldots)(1+x+x^2+x^3+x^4)(1+x)\\ &=\frac{1}{1-x^2}\cdot \frac{1}{1-x^5}\cdot \frac{1-x^5}{1-x}\cdot (1+x) \end{aligned} \]

(前两个分别是公比为 \(2\)\(5\) 的几何级数,第三个嘛,\((1+x+x^2+x^3+x^4)\cdot(1-x)\)不就是 \(1-x^5\) 了吗)

\[\begin{aligned} \text{上式}&=\frac{1}{(1-x)^2}\\ &=(1-x)^{-2}\\ &=\binom{1}{0}+\binom{2}{1}x+\binom{3}{2}x^2+\binom{4}{3}x^3…\\ &=1+2x+3x^2+4x^3+5x^4+…\\ \end{aligned} \]

于是,拿 \(n\) 个水果有 \(n+1\) 种方法。我们利用生成函数,完全使用代数手段得到了答案!

如果你对 \(\frac{1}{(1-x)^k}\) 的展开还不熟悉,我们这里再介绍一个更加简单和精妙的手段来解释 \(\frac{1}{(1-x)^2}=1+2x+3x^2+4x^3+5x^4+…\)

\(\frac{1}{1-x}=1+x+x^2+x^3+x^4+…\) 是前面说过的。我们对这个式子等号两边同时求导数。于是,\(\frac{1}{(1-x)^2}=1+2x+3x^2+4x^3+5x^4+…\)。一步就得到了我们所需要的东西!不断地再求导数,我们同样可以得到刚才用复杂的牛顿二项式定理得到的那个结论(自己试试吧)。生成函数还有很多其它的处理手段,比如等式两边同时乘以、除以常数(相当于等式右边每一项乘以、除以常数),等式两边同时乘以、除以一个 \(x\)(相当于等式右边的系数“移一位”),以及求微分积分等。神奇的生成函数啊。

我们用两种方法得到了这样一个公式:\(\frac{1}{(1-x)^n}=1+\binom{n}{1}x^1+\binom{n+1}{2}x^2+\binom{n+2}{3}x^3+…+\binom{n+k-1}{k}x^k+…\)。这个公式非常有用,是把一个生成函数还原为数列的武器。而且还是核武器。

接下来我们要演示如何使用生成函数求出 Fibonacci 数列的通项公式。

Fibonacci 数列是这样一个递推数列:\(f(n)=f(n-1)+f(n-2)\)。现在我们需要求出它的生成函数 \(g(x)\)\(g(x)\) 应该是一个这样的函数:

\[g(x)=x+x^2+2x^3+3x^4+5x^5+8x^6+13x^7+… \]

等式两边同时乘以 \(x\),我们得到:

\[x\cdot g(x)=x^2+x^3+2x^4+3x^5+5x^6+8x^7+… \]

就像我们前面说过的一样,这相当于等式右边的所有系数向右移动了一位。

现在我们把前面的式子和后面的式子相加,我们得到:

\[g(x)+x\cdot g(x)=x+2x^2+3x^3+5x^4+8x^5+… \]

把这最后一个式子和第一个式子好好对比一下。如果第一个式子的系数往左边移动一位,然后把多余的 \(1\) 去掉,就变成了最后一个式子了。由于递推函数的性质,我们神奇地得到了:

\[g(x)+x\cdot g(x)=\frac{g(x)}{x}-1 \]

也就是说,\(g(x)\cdot x^2+g(x)\cdot x-g(x)=-x\)。把左边的 \(g(x)\) 提出来,我们有:\(g(x)(x^2+x-1)=-x\)。于是,我们得 ??

后面没了,我也不会了。

UPDATE 2021.12.27

继续推导斐波那契数列的通项公式:

由上面的式子可以解出

\[g(x)=\frac{x}{1-x-x^2} \]

我们已经知道了

\[\frac{1}{1-x}=\sum_{i=0}^{\infty}x^i \]

可以得到

\[\frac{1}{1-kx}=\sum_{i=0}^{\infty}k^ix^i \]

考虑把那个 \(g(x)\) 的式子因式分解,得到

\[g(x)=\frac{1}{1-\frac{1-\sqrt 5}{2}x}\cdot\frac{1}{1-\frac{1+\sqrt 5}{2}x}\cdot x \]

左边这个东西拆成加和的形式,即

\[\frac{1}{1-\frac{1-\sqrt 5}{2}x}\cdot\frac{1}{1-\frac{1+\sqrt 5}{2}x}=\frac{a}{1-\frac{1-\sqrt 5}{2}x}+\frac{b}{1-\frac{1+\sqrt 5}{2}x} \]

解得 \(a=-\frac{1-\sqrt 5}{2\sqrt 5},b=\frac{1+\sqrt 5}{2\sqrt 5}\)

乘了个 \(x\) 相当于整体向右移,所以最后的式子 \(x^n\) 项系数为

\[\frac{\sqrt 5}{5}((\frac{1+\sqrt 5}{2})^{n+1}-(\frac{1-\sqrt 5}{2})^{n+1}) \]

\[f(n)=\frac{\sqrt 5}{5}((\frac{1+\sqrt 5}{2})^{n+1}-(\frac{1-\sqrt 5}{2})^{n+1}) \]

接下来考虑指数生成函数

\[e^x=\sum_{i=0}^{\infty}\frac{x^i}{i!} \]

这个可以将 \(f(x)=e^x\)\(x_0=0\) 处泰勒展开直接得到。

然后可以由这个出发得到很多常用变换,比如

\[\begin{aligned} e^{-x}=1-\frac{x}{1}+\frac{x^2}{2!}-\frac{x^3}{3!}+...\\ \frac{e^x+e^{-x}}{2}=1+\frac{x^2}{2!}+\frac{x^4}{4!}+...\\ \frac{e^x-e^{-x}}{2}=\frac{x}{1}+\frac{x^3}{3!}+\frac{x^5}{5!}+...\\ e^{kx}=1+\frac{kx}{1}+\frac{k^2x^2}{2!}+\frac{k^3x^3}{3!}+... \end{aligned} \]

posted @ 2022-05-03 17:14  cunzai_zsy0531  阅读(72)  评论(0编辑  收藏  举报