生成函数
生成函数 (Generating Function) 的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项。
对于一个数列 a,称f(x)=i=0∑naixi是数列 a 的 普通生成函数 (OGF),g(x)=i=0∑nai×i!xi是数列 a 的 指数生成函数 (EGF)。
我们总是认为生成函数是收敛的。
本局对战的剩余时间内,所有未加上标的求和符号,上标均为 ∞。
常见的普通生成函数
- ∀n∈N∗ 有i=0∑nxi=1−x1−xn+1
证明: 设 S=i=0∑nxi则xS=i=1∑n+1xi所以(x−1)SS=xn+1−1=x−1xn+1−1=1−x1−xn+1
得证。
- i=0∑xi=1−x1
证明: 设S=i=0∑xi则xS=i=1∑xi所以(1−x)SS=1=1−x1
得证。
- i=0∑(i+1)xi=(i=0∑xi)2=(1−x)21
证明: 先证明 ∀n∈N∗ 有 (i=0∑nxi)2=(i=0∑n(i+1)xi)+S...(∗)其中 S=(i=0∑n−1(n−i)xn+i+1)
设f(x)=i=0∑xi [xn]f(n) 表示多项式 f(n) 中 xn 项之系数。则(i=0∑nxi)2=(i=0∑nxi)⋅(i=0∑nxi)=[i=0∑n⋅(j,i−j∈[0,i]∑[xj][xi−j])⋅xi]+S...(1)
因为 i≤n,所以有且仅有 i+1 个 j∈[0,n] 使 j,i−j∈[0,i]。
所以(i=0∑nxi)2=[i=0∑n(i+1)xi]+S
(∗) 式得证。
令 n→∞ 使原命题得证。
- i=0∑(−x)i=1+x1
证明: 令 x=−x 并将原式代入 命题2 即可。
- ∀m∈N∗ 有 (1−x)m1=n=0∑Cn+m−1m−1xn
证明: 易知 ∀m∈N∗ 有 (i=0∑mxi)m=(1−x)m1
推广 (1) 式,得(i=0∑nxi)m=[i=0∑n⋅({aj}∈[0,n],j∈[1,m],∑aj=i∑k=0∏j[xak])]+S
而 ∀j,k 都有 [ajk]=1,所以只需证明 有且仅有 Ci+m−1m−1 组 {ai} 使 ∑aj=i。
考虑连续的一行 i 个小球,你需要在 m−1 组相邻两个球之间各放一个隔板,将这 i 个小球分成 m 份(第 j 份即为 aj)。因为 aj 可能为零,也就是说隔板可能重叠。所以方案数为 Ci+m−1m−1。这样我们就证明了有且仅有 Ci+m−1m−1 组 {ai} 使 ∑aj=i。原命题得证。
例 1
今有 a 个 1 元硬币,b 个 2 元硬币,c 个 5 元硬币。求一个最小的、不能用这些硬币拼出的面值。1≤a,b,c≤103。
设 f(x)g(x)h(x)=i=0∑axi=i=0∑bx2i=i=0∑cx5i则 f(x)∗g(x)∗h(x) 各个位的系数就表示拼出这个面值的方案数,答案就是这个卷积的系数为零的最低位。
例 2
今有 A、B 两个超市,价格为 i 的商品各有 i 件。求从两个超市各买一个商品,恰好花 n 元的方案数。
生成函数f(x)=(i=1∑ixi)2=x2⋅(i=0∑(i+1)xi)2=(1−x)4x2=x2⋅i=0∑Ci+33xi
所以,[xn−2](∑i=0Ci+33xi)=Cn+13。此即为答案。
例 3
求函数f(x)=i=0∑i2xi的生成函数。
由 ∀n∈N∗ 的 n2=i=1∑n(2i−1)得
f(x)=i=0∑i2xi=i=1∑j=i∑(2i−1)xj=i=1∑j=i+1∑(2i−1)xj+[i=1∑(2i−1)xi]=i=1∑j=i+1∑(2i−1)xj+[2×(1−x)2x−1−x1+1]
设S=2×(1−x)2x−1−x1+1=(1−x)2x2+x则f(x)=i=1∑j=i+1∑(2i−1)xj+S=i=1∑(2i−1)(j=1∑xj−j=1∑ixj)+S=i=1∑(2i−1)(1−x1−1−x−1xi+1−x)+S=i=1∑(2i−1)⋅1−xxi+1+S=1−x1(2×i=1∑i⋅xi+1−i=1∑xi+1)+S
而i=1∑i⋅xi+1i=1∑xi+1=i=1∑(i+1)⋅xi−2i=1∑xi=(1−x)21−1−2×1−xx=(1−x)2x2=1−x1−1−x=1−xx2
所以f(x)=1−x1(2×(1−x)2x2−1−xx2)+S=(1−x)3x2+x
Catalan (卡特兰)数
令 h(0)=0,h(1)=1,h(n)=i=0∑n−1h(i)⋅h(n−i−1)(n≥2)则 h 是 Catalan 数。
尝试用生成函数推导 Catalan 数的通项公式。
设 h(x) 的生成函数为 f(x)。则f(x)=i=0∑(j=0∑f(j)⋅f(i−j−1))xi+1=1+xi=0∑j=0∑i−1f(j)⋅f(i−j−1)xn−1=1+x⋅f2(x)
也就是说f(x)=1+x⋅f2(x)f(x)=2x1±1−4x由 f(0)=1 舍去+号,所以f(x)=2x1−1−4x
因为 1−4x=(1−4x)21,由 广义二项式定理 得1−4x=i=0∑Ci21(−4x)i
而Cn211−4xf(x)=n!21(21−1)⋅⋅⋅(21−n+1)=(−1)n−1×2nn!1×1×3×⋅⋅⋅×(2n−3)=22n−1n!(n−1)!(−1)n−1(2n−2)!=−2i=0∑i!(i−1)!(2i−2)!xi=i=0∑i!(i+1)!(2i)!xi
所以h(n)=n!(n+1)!(2n)!
常见的指数生成函数
- i=0∑i!xi=ex
- 偶数项求和。i=0∑(2i)!x2i=2ex+e−x
- 奇数项求和。i=0∑(2i+1)!x2i+1=2ex−e−x
可以发现,它们与 OGF 最大的区别在于阶乘。所以,EGF 常用于解决与排列有关的问题。
例 4
用 1,2,3,4 给 n 个方块染色,求 1,2 颜色染的方块数为偶数的方案数。
写出 1,2 的生成函数f(x)=i=0∑(2i)!x2i
3,4 的生成函数g(x)=i=0∑i!xi
则h(x)=f2(x)∗g2(x)=(i=0∑(2i)!x2i)2⋅(i=0∑i!xi)2=(2ex+e−x)2⋅e2x=4e4x+2e2x+1=41+i=0∑(44i+2n+1)i!xi
所以[xn]h(x)=44n+2n+1
(To Be Continued)