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