定义
首先通过一个例子来说明什么是生成函数。
生成函数是组合数学中的一个概念,对于一个数列 a0,a1,a2,…,ak ,即 f(i)=ai (f是离散函数) 。可以构造一个 f 的生成函数,使 xk 的系数是 f(k) 。(至于问什么这么构造,是因为幂函数的良好性质: xaxb=xa+b ,这样设可以良好的契合许多组合数学中面临的许多问题) g(x)=f(0)+f(1)x+f(2)x2+...+f(k)xk+... 当然,构造出这么个东西肯定是有用的,下面看一个具体的例子:f(i)=1 ,有生成函数: g(x)=1+x+x2+... 明显当满足一定条件时 g(x) 可以写成 g(x)=11−x(−1<x<1) 因为 g(x) 是构造出来的,实际上 x 并没有什么实际意义,在研究生成函数时默认级数都是收敛的。于是就可以说 f(n)=1 的生成函数是 g(x)=11−x 。
可以发现有的生成函数可以用一个较短的形式表示。找到较短的式子之后可以通过二项式展开得到 xk 的系数 ak .
下面说一下二项式展开相关内容
广义二项式定理
也称牛顿二项式定理 (x+y)n=∑∞k=0Cknxnyn−k(n为任意实数) 设 z=xy 则:(x+y)n=yn(1+z)n ,等价于求 (1+z)n
(1+z)n=C0nz0+C1nz1+...+Cnnzn+Cn+1nzn+1+...=∞∑k=0Cknzk 用 −n 代替 n : (nk)=(−nk)=−n(−n−1)…(−n−k+1)k!=(−1)k(n+k−1k) 所以有: (1+z)−n=1(1+z)n=∞∑k=0(−1)k(n+k−1k)zk(1−z)−n=1(1−z)n=∞∑k=0(n+k−1k)zk n=1 时有 : (1+z)−1=1(1+z)=∞∑k=0(−1)kzk(1−z)−1=1(1−z)=∞∑k=0zk 广义组合数:
Cik=k(k−1)(k−2)…(k−i+1)i!C64=4∗3∗2∗1∗0∗(−1)6!=0C2−1.4=(−1.4)∗(−2.4)2!=1.68常用公式
11−x=1+x+x2+x3+...11−xk=1+xk+x2k+x3k+...11−ax=1+ax+a2x2+a3x3+...1(1−x)n=∞∑k=0Ckn+k−1xk1(1+x)n=∞∑k=0(−1)kCkn+k−1xk11+x=1−x+x2−x3+...经典应用
例一
求 n=x1+x2+…+xk 有多少非负整数解。
把每组解都加1 : n+k=x1+x2+…+xk
把 n+k 看作 n+k 个东西,至多分成 k 份就是在 n+k−1 个空格中间插入 k−1 个木板,总方案数就是 Ck−1n+k−1=Cnn+k−1 ,有生成函数 g(x)=1(1−x)k 也相当于 xi 可以取 0 ~ n 个 1 组成,表示为 (1+x1+x2+…) 。总情况就是 g(x)=(1+x1+x2+x3+...)k=1(1−x)k 其中 xn 的系数就是答案(因为它的这个系数是由原式完全展开后 k 个指数加起来恰好等于 n 的项合并起来得到的),即 Cnn+k−1
## 例二
我们要从苹果、香蕉、橘子和梨中拿一些水果出来,要求苹果只能拿偶数个,香蕉的个数要是5的倍数,橘子最多拿4个,梨要么不拿,要么只能拿一个。问按这样的要求拿 n 个水果的方案数。
有: g(x)=(1+x2+x4+...)(1+x5+x10+...)(1+x1+x2+x3+x4)(1+x1)=11−x211−x51−x51−x(1+x)(1−x)(1+x1+x2+x3+x4)=(1−x5)=1(1−x)2 答案就是 xn 的系数 C1n+1
例三
例四
G(x)=f(0)+f(1)x+f(2)x2+f(3)x3+…xG(x)=f(0)x+f(1)x2+…x2G(x)=f(0)x2+…∴G(x)=xG(x)+x2G(x)+xG(x)=x1−x−x2=xx2(x−2−x−1−1)=xx2(m2−m−1)(m=x−1)=xx2(m−α)(m−β)(α=1+√52,β=1−√52)=x(1−αx)(1−βx)=A1−αx+B1−βx(A=1√5,B=−1√5)=A(1+αx+α2x2+...)+B(1+βx+β2x2+...)=∞∑n=0(Aαn+Bβn)xn用母函数推斐波那契递推式的通项公式。已知 f(n)=f(n−1)+f(n−2)
所以通项公式 F(n)=Aαn+Bβn=1√5((1+√52)n+(1−√52)n)