生成函数/母函数

定义

首先通过一个例子来说明什么是生成函数。

生成函数是组合数学中的一个概念,对于一个数列 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)=11x(1<x<1) 因为 g(x) 是构造出来的,实际上 x 并没有什么实际意义,在研究生成函数时默认级数都是收敛的。于是就可以说 f(n)=1 的生成函数是 g(x)=11x

可以发现有的生成函数可以用一个较短的形式表示。找到较短的式子之后可以通过二项式展开得到 xk 的系数 ak .

下面说一下二项式展开相关内容

广义二项式定理

也称牛顿二项式定理 (x+y)n=k=0Cknxnynk(n)z=xy 则:(x+y)n=yn(1+z)n ,等价于求 (1+z)n

(1+z)n=C0nz0+C1nz1+...+Cnnzn+Cn+1nzn+1+...=k=0Cknzkn 代替 n : (nk)=(nk)=n(n1)(nk+1)k!=(1)k(n+k1k) 所以有: (1+z)n=1(1+z)n=k=0(1)k(n+k1k)zk(1z)n=1(1z)n=k=0(n+k1k)zk n=1 时有 : (1+z)1=1(1+z)=k=0(1)kzk(1z)1=1(1z)=k=0zk 广义组合数:

Cik=k(k1)(k2)(ki+1)i!C64=43210(1)6!=0C21.4=(1.4)(2.4)2!=1.68

常用公式

11x=1+x+x2+x3+...11xk=1+xk+x2k+x3k+...11ax=1+ax+a2x2+a3x3+...1(1x)n=k=0Ckn+k1xk1(1+x)n=k=0(1)kCkn+k1xk11+x=1x+x2x3+...

经典应用

例一

n=x1+x2++xk 有多少非负整数解。

把每组解都加1 : n+k=x1+x2++xk

n+k 看作 n+k 个东西,至多分成 k 份就是在 n+k1 个空格中间插入 k1 个木板,总方案数就是 Ck1n+k1=Cnn+k1 ,有生成函数 g(x)=1(1x)k 也相当于 xi 可以取 0 ~ n1 组成,表示为 (1+x1+x2+) 。总情况就是 g(x)=(1+x1+x2+x3+...)k=1(1x)k 其中 xn 的系数就是答案(因为它的这个系数是由原式完全展开后 k 个指数加起来恰好等于 n 的项合并起来得到的),即 Cnn+k1

## 例二

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

有: g(x)=(1+x2+x4+...)(1+x5+x10+...)(1+x1+x2+x3+x4)(1+x1)=11x211x51x51x(1+x)(1x)(1+x1+x2+x3+x4)=(1x5)=1(1x)2 答案就是 xn 的系数 C1n+1

例三

整数拆分问题、五边形定理

例四

用母函数推斐波那契递推式的通项公式。已知 f(n)=f(n1)+f(n2)

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)=x1xx2=xx2(x2x11)=xx2(m2m1)(m=x1)=xx2(mα)(mβ)(α=1+52,β=152)=x(1αx)(1βx)=A1αx+B1βx(A=15,B=15)=A(1+αx+α2x2+...)+B(1+βx+β2x2+...)=n=0(Aαn+Bβn)xn

所以通项公式 F(n)=Aαn+Bβn=15((1+52)n+(152)n)

参考

什么是生成函数?

牛顿二项式定理学习(广义二项式定理)

母函数详解和史上最通用最高效的母函数模板

生成函数

# 使用单$作为行内数学公式分界符