文章目录
0.夯实基础
泰勒展开啊,导数啊,形式幂级数啊……都是常识,不讲了。这里写几个你可能没推过的。(至少我是第一次推。)
f
(
x
)
=
ln
(
x
+
1
)
f(x)=\ln(x+1)
f(x)=ln(x+1)
可以求出其
i
i
i 阶导数为
f
(
i
)
(
x
)
=
(
−
1
)
i
−
1
(
i
−
1
)
!
(
x
+
1
)
−
i
f^{(i)}(x)=(-1)^{i-1}(i-1)!(x+1)^{-i}
f(i)(x)=(−1)i−1(i−1)!(x+1)−i
使用麦克劳林展开,得到
f
(
x
)
=
∑
n
=
1
+
∞
(
−
1
)
n
−
1
x
n
n
f(x)=\sum_{n=1}^{+\infty}(-1)^{n-1}\frac{x^n}{n}
f(x)=n=1∑+∞(−1)n−1nxn
进而有
−
f
(
−
x
)
=
∑
n
=
1
+
∞
x
n
n
-f(-x)=\sum_{n=1}^{+\infty}\frac{x^n}{n}
−f(−x)=n=1∑+∞nxn
1.普通母函数
1.1.定义
母函数,也称作 生成函数,是指这样的一个函数: f ( x ) = ∑ i = 0 n a i x i f(x)=\sum_{i=0}^{n}a_i x^i f(x)=i=0∑naixi
n n n 可以趋近于正无穷,也可以是某个具体的值。
注意,这个 f ( x ) f(x) f(x) 是 形式幂级数,即 x x x 只起到辅助作用。
1.2.性质
部分母函数具有 闭形式,譬如 f ( x ) = ∑ i = 0 + ∞ x i = 1 1 − x f(x)=\sum_{i=0}^{+\infty}x^i=\frac{1}{1-x} f(x)=i=0∑+∞xi=1−x1
再如
g
(
x
)
=
∑
i
=
0
+
∞
(
k
−
1
+
i
k
−
1
)
x
i
=
1
(
1
−
x
)
k
g(x)=\sum_{i=0}^{+\infty}{k-1+i\choose k-1}x^i=\frac{1}{(1-x)^k}
g(x)=i=0∑+∞(k−1k−1+i)xi=(1−x)k1
因为 g ( x ) g(x) g(x) 的闭形式可以由 f ( x ) f(x) f(x) 两边求 k − 1 k-1 k−1 次导数而来。
毫无疑问,闭形式与开形式是等价的,所以很多计数问题都变的可以计算。
1.3.应用
1.3.1.通项公式
例1.3.1. 求这个数列的通项公式:
a
0
=
a
1
=
1
,
a
n
+
2
=
a
n
+
a
n
+
1
(
n
∈
N
)
a_0=a_1=1,\;a_{n+2}=a_{n}+a_{n+1}(n\in\N)
a0=a1=1,an+2=an+an+1(n∈N) 。
解: 考虑其生成函数
f
(
x
)
=
∑
i
=
0
+
∞
a
i
x
i
f(x)=\sum_{i=0}^{+\infty}a_{i} x^i
f(x)=i=0∑+∞aixi
注意到 − x f ( x ) = ∑ i = 1 + ∞ − a i − 1 x i − x 2 f ( x ) = ∑ i = 2 + ∞ − a i − 2 x i -xf(x)=\sum_{i=1}^{+\infty}-a_{i-1} x^i\\-x^2f(x)=\sum_{i=2}^{+\infty}-a_{i-2}x^i −xf(x)=i=1∑+∞−ai−1xi−x2f(x)=i=2∑+∞−ai−2xi
再结合 a 0 = a 1 = 1 , a n + 2 = a n + a n + 1 a_0=a_1=1,\;a_{n+2}=a_{n}+a_{n+1} a0=a1=1,an+2=an+an+1 ,得到
( 1 − x − x 2 ) f ( x ) = 1 ⇒ f ( x ) = 1 1 − x − x 2 = 5 + 5 10 1 − 1 + 5 2 x + 5 − 5 10 1 − 1 − 5 2 x (1-x-x^2)f(x)=1\\ \Rightarrow f(x)=\frac{1}{1-x-x^2}=\frac{\frac{5+\sqrt 5}{10}}{1-\frac{1+\sqrt 5}{2}x}+\frac{\frac{5-\sqrt 5}{10}}{1-\frac{1-\sqrt 5}{2}x} (1−x−x2)f(x)=1⇒f(x)=1−x−x21=1−21+5x105+5+1−21−5x105−5
将其转化为开形式,得到
f ( x ) = 5 + 5 10 ∑ i = 0 + ∞ ( 1 + 5 2 x ) i + 5 − 5 10 ∑ i = 0 + ∞ ( 1 − 5 2 x ) i = ∑ i = 0 + ∞ 5 5 [ ( 1 + 5 2 ) i + 1 − ( 1 − 5 2 ) i + 1 ] x i \begin{aligned} f(x)&=\frac{5+\sqrt 5}{10}\sum_{i=0}^{+\infty}\left(\frac{1+\sqrt 5}{2}x\right)^i+\frac{5-\sqrt 5}{10}\sum_{i=0}^{+\infty}\left(\frac{1-\sqrt 5}{2}x\right)^i\\ &=\sum_{i=0}^{+\infty}\frac{\sqrt 5}{5}\left[\left(\frac{1+\sqrt 5}{2}\right)^{i+1}-\left(\frac{1-\sqrt 5}{2}\right)^{i+1}\right]x^i \end{aligned} f(x)=105+5i=0∑+∞(21+5x)i+105−5i=0∑+∞(21−5x)i=i=0∑+∞55⎣⎡(21+5)i+1−(21−5)i+1⎦⎤xi
∴ a n = 5 5 [ ( 1 + 5 2 ) n + 1 − ( 1 − 5 2 ) n + 1 ] \therefore a_n=\frac{\sqrt 5}{5}\left[\left(\frac{1+\sqrt 5}{2}\right)^{n+1}-\left(\frac{1-\sqrt 5}{2}\right)^{n+1}\right] ∴an=55⎣⎡(21+5)n+1−(21−5)n+1⎦⎤
更一般的说,我们最终会得到一个式子
M
(
x
)
f
(
x
)
=
R
(
x
)
M(x)f(x)=R(x)
M(x)f(x)=R(x)
其中
M
(
x
)
,
R
(
x
)
M(x),R(x)
M(x),R(x) 都是有限次。设
M
(
x
)
=
∏
i
=
1
k
(
x
−
λ
i
)
t
i
M(x)=\prod_{i=1}^{k}(x-\lambda_i)^{t_i}
M(x)=i=1∏k(x−λi)ti
则可以解出
k
k
k 个多项式
A
1
(
x
)
,
A
2
(
x
)
,
…
,
A
k
(
x
)
A_1(x),A_2(x),\dots,A_k(x)
A1(x),A2(x),…,Ak(x) 使得
f
(
x
)
=
R
(
x
)
M
(
x
)
=
∑
i
=
1
k
A
i
(
x
)
(
x
−
λ
i
)
t
i
f(x)=\frac{R(x)}{M(x)}=\sum_{i=1}^{k}\frac{A_i(x)}{(x-\lambda_i)^{t_i}}
f(x)=M(x)R(x)=i=1∑k(x−λi)tiAi(x)
而后化为开形式即可。注:其实就是特征根 λ i \lambda_i λi 做了分解。
1.3.2.组合计数
x x x 的指数代表着某种限制,前面的系数就变成了结果。
例1.3.2. 小明有三种物品要拿:巧克力、面包、牛奶。巧克力的数量必须是偶数,面包的数量必须是三的倍数,牛奶至少拿一个。已知小明一共拿了
10
10
10 个物品,请问可能的方案有多少种?同种物品是一模一样的。
解: 考虑三个生成函数,分别对应巧克力、面包、牛奶,用
x
x
x 的指数代表选择了多少个。
f 1 ( x ) = ∑ i = 0 + ∞ 2 i x 2 i = 1 + x 2 + x 4 + x 6 + x 8 + ⋯ f 2 ( x ) = ∑ i = 0 + ∞ 3 i x 3 i = 1 + x 3 + x 6 + x 9 + ⋯ f 3 ( x ) = ∑ i = 1 + ∞ i x i = x + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 + x 8 + x 9 + x 10 + ⋯ ∵ f 1 ( x ) f 2 ( x ) f 3 ( x ) = x + x 2 + 2 x 3 + ⋯ + 12 x 10 + ⋯ ∴ a n s = 12 \begin{aligned} f_1(x)&=\sum_{i=0}^{+\infty}2i x^{2i}=1+x^2+x^4+x^6+x^8+\cdots\\ f_2(x)&=\sum_{i=0}^{+\infty}3i x^{3i}=1+x^3+x^6+x^9+\cdots\\ f_3(x)&=\sum_{i=1}^{+\infty}i x^i=x+x^2+x^3+x^4+x^5+x^6+x^7+x^8+x^9+x^{10}+\cdots \end{aligned}\\[2ex] \because f_1(x)f_2(x)f_3(x)=x+x^2+2x^3+\cdots+12x^{10}+\cdots\\ \therefore ans = 12 f1(x)f2(x)f3(x)=i=0∑+∞2ix2i=1+x2+x4+x6+x8+⋯=i=0∑+∞3ix3i=1+x3+x6+x9+⋯=i=1∑+∞ixi=x+x2+x3+x4+x5+x6+x7+x8+x9+x10+⋯∵f1(x)f2(x)f3(x)=x+x2+2x3+⋯+12x10+⋯∴ans=12
1.3.3.卷积优化
有时候我们会看到形如下面的式子的递推式: ∀ x ∈ [ 0 , n ) , A x = ∑ i = 0 x B i C x − i \forall x\in[0,n),\;A_x=\sum_{i=0}^{x}B_i C_{x-i} ∀x∈[0,n),Ax=i=0∑xBiCx−i
可以发现,将 ⟨ A ⟩ , ⟨ B ⟩ , ⟨ C ⟩ \langle A\rangle,\langle B\rangle,\langle C\rangle ⟨A⟩,⟨B⟩,⟨C⟩ 写成生成函数 f A ( x ) , f B ( x ) , f C ( x ) f_A(x),f_B(x),f_C(x) fA(x),fB(x),fC(x) ,一定有这样的关系式:
f A ( x ) ≡ f B ( x ) f C ( x ) ( m o d x n ) f_A(x)\equiv f_B(x)f_C(x)\pmod{x^{n}} fA(x)≡fB(x)fC(x)(modxn)
这样就可以使用 O ( n log n ) \mathcal O(n\log n) O(nlogn) 的多项式乘法进行转移了。
1.3.4.其他
比如它与下降幂相乘,无法一一列举了。
2.指数型母函数
2.1.定义
和普通生成函数很像,只不过它的系数有一点变动: f ( x ) = ∑ i = 0 n a i x i i ! f(x)=\sum_{i=0}^{n}a_i\frac{x^i}{i!} f(x)=i=0∑naii!xi
2.2.性质
2.2.1.闭形式
仍然具有闭形式。众所周知,
e
x
=
∑
i
=
0
+
∞
x
i
i
!
e^x=\sum_{i=0}^{+\infty}\frac{x^i}{i!}
ex=i=0∑+∞i!xi
于是得到一个推论 e − x = ∑ i = 0 + ∞ ( − 1 ) i x i i ! e^{-x}=\sum_{i=0}^{+\infty}(-1)^i\frac{x^i}{i!} e−x=i=0∑+∞(−1)ii!xi
现在我们就可以写出一部分指数级母函数的闭形式了。譬如 f ( x ) = ∑ i = 0 + ∞ 2 i x 2 i ( 2 i ) ! = e x + e − x 2 f(x)=\sum_{i=0}^{+\infty}2i\frac{x^{2i}}{(2i)!}=\frac{e^x+e^{-x}}{2} f(x)=i=0∑+∞2i(2i)!x2i=2ex+e−x
以及 f ( x ) = ∑ i = 0 + ∞ ( 2 i + 1 ) x 2 i + 1 ( 2 i + 1 ) ! = e x − e − x 2 f(x)=\sum_{i=0}^{+\infty}(2i+1)\frac{x^{2i+1}}{(2i+1)!}=\frac{e^x-e^{-x}}{2} f(x)=i=0∑+∞(2i+1)(2i+1)!x2i+1=2ex−e−x
2.2.2.卷积
计算
f
(
x
)
,
g
(
x
)
f(x),g(x)
f(x),g(x) 这两个指数级母函数的卷积,该怎么算?答曰:硬算。
f
(
x
)
=
∑
i
=
0
+
∞
a
i
x
i
i
!
,
g
(
x
)
=
∑
i
=
0
+
∞
b
i
x
i
i
!
f(x)=\sum_{i=0}^{+\infty}a_i\frac{x^i}{i!},\;g(x)=\sum_{i=0}^{+\infty}b_i\frac{x^i}{i!}
f(x)=i=0∑+∞aii!xi,g(x)=i=0∑+∞bii!xi
⇒ f ( x ) g ( x ) = ∑ i = 0 + ∞ ∑ j = 0 i a j b i − j j ! ( i − j ) ! x i = ∑ i = 0 + ∞ ∑ j = 0 i a j b i − j ⋅ i ! j ! ( i − j ) ! ⋅ x i i ! = ∑ i = 0 + ∞ ∑ j = 0 i ( i j ) a j b i − j x i i ! \begin{aligned} \Rightarrow f(x)g(x)&=\sum_{i=0}^{+\infty}\sum_{j=0}^{i}\frac{a_j b_{i-j}}{j!(i-j)!}x^i\\ &=\sum_{i=0}^{+\infty}\sum_{j=0}^{i}a_j b_{i-j}\cdot\frac{i!}{j!(i-j)!}\cdot\frac{x^i}{i!}\\ &=\sum_{i=0}^{+\infty}\sum_{j=0}^{i}{i\choose j}a_j b_{i-j}\frac{x^i}{i!} \end{aligned} ⇒f(x)g(x)=i=0∑+∞j=0∑ij!(i−j)!ajbi−jxi=i=0∑+∞j=0∑iajbi−j⋅j!(i−j)!i!⋅i!xi=i=0∑+∞j=0∑i(ji)ajbi−ji!xi
这同时告诉我们,见到带组合数的递推式,不要用普通生成函数了,用指数型母函数。
2.3.应用
主要就应用于 排列计数 中。原理:对于一个可重集合 S S S ,如果 S S S 中有 n n n 类不同元素,个数分别为 d 1 , d 2 , d 3 , … , d n d_1,d_2,d_3,\dots,d_n d1,d2,d3,…,dn ,那么将 S S S 中的元素进行排列,不同的数量为 ( ∑ i = 1 n d i ) ! ∏ i = 1 n ( d i ! ) \frac{\left(\sum_{i=1}^{n}d_i\right)!}{\prod_{i=1}^{n}(d_i!)} ∏i=1n(di!)(∑i=1ndi)!
所以说,同样的,类似于普通母函数:指数代表限制,前面的系数表示方案数。
例2.3.1. 用
1
,
4
,
7
,
8
1,4,7,8
1,4,7,8 四个数字组成一个十位数,满足这些要求:
1
1
1 是奇数个;
4
4
4 最多出现四次;
7
,
8
7,8
7,8 都出现过。求不同的十位数的数量。
解: 使用生成函数即可。详细过程略。
例2.3.2. (复杂一点)点此跳转。
例2.3.3. 有
n
(
n
≤
10
)
n(n\le 10)
n(n≤10) 种物品,并且知道每种物品的数量。要求从中选出
m
(
m
≤
10
)
m(m\le 10)
m(m≤10) 件物品的排列数。例如有两种物品
A
,
B
A,B
A,B ,并且数量都是
1
1
1 ,从中选
2
2
2 件物品,则排列有
A
B
AB
AB 和
B
A
BA
BA 两种。
解: 暴力卷积即可。
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
inline int readint(){
int a = 0; char c = getchar(), f = 1;
for(; c<'0' or c>'9'; c=getchar())
if(c == '-') f = -f;
for(; '0'<=c and c<='9'; c=getchar())
a = (a<<3)+(a<<1)+(c^48);
return a*f;
}
inline void writeint(long long x){
if(x < 0) putchar('-'), x = -x;
if(x > 9) writeint(x/10);
putchar(x%10+'0');
}
const int MaxN = 20;
int n, m;
long long f[MaxN], tmp[MaxN], comb[MaxN][MaxN];
inline void work(int x){
for(int i=0; i<=m; ++i) tmp[i] = 0;
for(int i=0; i<=m; ++i)
for(int j=0; j<=m-i and j<=x; ++j)
tmp[i+j] += f[i]*comb[i+j][i];
for(int i=0; i<=m; ++i) f[i] = tmp[i];
}
int main(){
for(int i=0; i<=10; ++i)
for(int j=(comb[i][0]=1); j<=i; ++j)
comb[i][j] = comb[i-1][j]+comb[i-1][j-1];
while(~scanf("%d %d",&n,&m)){
for(int i=1; i<=m; ++i) f[i] = 0;
f[0] = 1; // 没有物品
for(int i=1; i<=n; ++i)
work(min(readint(),m));
writeint(f[m]), putchar('\n');
}
return 0;
}
3.深入
这一部分就拉通了来讲。因为今天的所学明显超出我原来所写的。
3.1.通项公式
例3.1.1. 求杨辉三角里 “对角线和” 的通项公式。即
a
n
=
∑
i
=
0
n
(
n
+
i
2
i
)
a_n=\sum_{i=0}^{n}{n+i\choose 2i}
an=∑i=0n(2in+i) 。
解: 利用生成函数。
A
(
x
)
=
∑
n
=
0
+
∞
a
n
x
n
=
∑
n
=
0
+
∞
x
n
∑
i
=
0
n
(
n
+
i
2
i
)
=
∑
n
=
0
+
∞
∑
i
=
0
n
(
n
−
i
+
2
i
2
i
)
x
n
−
i
(
x
)
2
i
=
∑
a
=
0
+
∞
∑
2
∣
b
(
a
+
b
a
)
x
a
(
x
)
b
\begin{aligned} A(x) &=\sum_{n=0}^{+\infty}a_nx^n\\ &=\sum_{n=0}^{+\infty}x^n\sum_{i=0}^{n}{n+i\choose 2i}\\ &=\sum_{n=0}^{+\infty}\sum_{i=0}^{n}{n-i+2i\choose 2i}x^{n-i}(\sqrt{x})^{2i}\\ &=\sum_{a=0}^{+\infty}\sum_{2|b}{a+b\choose a}x^{a}(\sqrt{x})^b \end{aligned}
A(x)=n=0∑+∞anxn=n=0∑+∞xni=0∑n(2in+i)=n=0∑+∞i=0∑n(2in−i+2i)xn−i(x)2i=a=0∑+∞2∣b∑(aa+b)xa(x)b
里面那玩意儿已经很好看了。只有一个问题就是 2 ∣ b 2|b 2∣b 。当然你会发现,我们 不妨扩大 b b b 的范围,最后去掉所有含有 x \sqrt{x} x 的项即可。
所以
A
(
x
)
≈
∑
a
=
0
+
∞
∑
b
=
0
+
∞
(
a
+
b
b
)
x
a
(
x
)
b
=
∑
i
=
0
+
∞
(
x
+
x
)
i
=
1
1
−
x
−
x
\begin{aligned} A(x) &\approx \sum_{a=0}^{+\infty} \sum_{b=0}^{+\infty} {a+b\choose b}x^a(\sqrt{x})^b\\ &=\sum_{i=0}^{+\infty}\left(x+\sqrt{x}\right)^{i}\\ &=\frac{1}{1-\sqrt{x}-x} \end{aligned}
A(x)≈a=0∑+∞b=0∑+∞(ba+b)xa(x)b=i=0∑+∞(x+x)i=1−x−x1
这是斐波那契。设斐波那契母函数为
F
(
x
)
F(x)
F(x) 则
A
(
x
2
)
≈
1
1
−
x
−
x
2
=
F
(
x
)
⇒
a
n
=
fibonacci
(
2
n
)
A(x^2)\approx{1\over 1-x-x^2}=F(x)\\ \;\\\Rightarrow a_n=\operatorname{fibonacci}(2n)
A(x2)≈1−x−x21=F(x)⇒an=fibonacci(2n)
回看 A ( x ) A(x) A(x) 中多出的 x \sqrt{x} x 项,在 A ( x 2 ) A(x^2) A(x2) 里成为了 x x x 即奇数次数项。确实是比 F ( x ) F(x) F(x) 少的部分。所以 a n a_n an 是可以划等号的。
例3.2.2. 已知
C
0
=
1
,
C
n
=
∑
i
=
1
n
C
i
−
1
C
n
−
i
(
n
∈
N
+
)
C_0=1,\;C_n=\sum_{i=1}^{n}C_{i-1}C_{n-i}\;(n\in\N^+)
C0=1,Cn=∑i=1nCi−1Cn−i(n∈N+) ,求卡特兰数
C
n
C_n
Cn 通项公式。
解: 不妨先用普通母函数试一试。
G
(
x
)
=
∑
i
=
0
+
∞
C
i
x
i
=
1
+
x
⋅
G
(
x
)
2
⇒
G
(
x
)
=
1
±
1
−
4
x
2
x
\begin{aligned} G(x) &=\sum_{i=0}^{+\infty}C_ix^i\\ &=1+x\cdot G(x)^2\\ \Rightarrow G(x)&={1\pm\sqrt{1-4x}\over 2x} \end{aligned}
G(x)⇒G(x)=i=0∑+∞Cixi=1+x⋅G(x)2=2x1±1−4x
此处有两个解。我们有理由相信,
G
(
x
)
G(x)
G(x) 在
0
0
0 的邻域内收敛,所以
lim
x
→
0
+
G
(
x
)
=
[
x
0
]
G
(
x
)
=
1
\lim_{x\to 0^+}G(x)=[x^0]G(x)=1
limx→0+G(x)=[x0]G(x)=1,这足以帮我们排除
1
+
1
−
4
x
2
x
1+\sqrt{1-4x}\over 2x
2x1+1−4x 的解(其发散)。
1
−
x
=
−
1
2
(
x
−
1
)
+
∑
k
≥
2
1
×
3
×
5
×
⋯
×
(
2
k
−
3
)
k
!
×
(
−
2
)
k
(
x
−
1
)
k
1-\sqrt{x}=-\frac{1}{2}(x-1)+\sum_{k\ge 2}\frac{1\times3\times5\times\cdots\times(2k-3)}{k!\times (-2)^k}(x-1)^k
1−x=−21(x−1)+k≥2∑k!×(−2)k1×3×5×⋯×(2k−3)(x−1)k
此乃
x
0
=
1
x_0=1
x0=1 处泰勒展开者也。进而有
G
(
x
)
=
1
−
1
−
4
x
2
x
=
1
+
∑
k
≥
2
1
×
3
×
5
×
⋯
×
(
2
k
−
3
)
k
!
×
(
−
2
)
k
⋅
(
−
4
x
)
k
2
x
=
1
+
∑
k
≥
1
1
×
3
×
5
×
⋯
×
(
2
k
−
1
)
⋅
(
2
x
)
k
(
k
+
1
)
!
=
1
+
∑
k
≥
1
(
2
k
)
!
2
×
4
×
6
×
⋯
×
2
k
×
2
k
⋅
x
k
(
k
+
1
)
!
=
1
+
∑
k
≥
1
(
2
k
)
!
k
!
⋅
x
k
(
k
+
1
)
!
⇒
C
n
=
(
2
n
)
!
n
!
⋅
(
n
+
1
)
!
=
1
n
+
1
(
2
n
n
)
(
n
∈
N
)
\begin{aligned} G(x) &={1-\sqrt{1-4x}\over 2x}\\ &=1+\sum_{k\ge 2}\frac{1\times3\times5\times\cdots\times(2k-3)}{k!\times (-2)^k}\cdot {(-4x)^k\over 2x}\\ &=1+\sum_{k\ge 1}1\times 3\times5\times\cdots\times(2k-1)\cdot{(2x)^k\over (k+1)!}\\ &=1+\sum_{k\ge 1}\frac{(2k)!}{2\times4\times 6\times\cdots\times 2k}\times 2^k\cdot{x^k\over(k+1)!}\\ &=1+\sum_{k\ge 1}\frac{(2k)!}{k!}\cdot{x^k\over(k+1)!}\\ \Rightarrow C_n&=\frac{(2n)!}{n!\cdot(n+1)!}={1\over n+1}{2n\choose n}\quad(n\in \N) \end{aligned}
G(x)⇒Cn=2x1−1−4x=1+k≥2∑k!×(−2)k1×3×5×⋯×(2k−3)⋅2x(−4x)k=1+k≥1∑1×3×5×⋯×(2k−1)⋅(k+1)!(2x)k=1+k≥1∑2×4×6×⋯×2k(2k)!×2k⋅(k+1)!xk=1+k≥1∑k!(2k)!⋅(k+1)!xk=n!⋅(n+1)!(2n)!=n+11(n2n)(n∈N)
3.2.求普通母函数
例3.2.1. 求序列
⟨
1
,
3
,
5
,
…
,
2
n
−
1
,
…
⟩
\lang 1,3,5,\dots,2n-1,\dots\rang
⟨1,3,5,…,2n−1,…⟩ 作为系数的普通母函数闭形式。
解:
F
(
x
)
=
∑
i
=
0
+
∞
(
2
i
+
1
)
x
i
=
2
∑
i
=
0
+
∞
(
i
+
1
)
⋅
x
i
−
∑
i
=
0
+
∞
x
i
=
2
∑
i
=
0
+
∞
(
x
i
+
1
)
′
−
∑
i
=
0
+
∞
x
i
=
2
(
x
1
−
x
)
′
−
1
1
−
x
=
1
+
x
(
1
−
x
)
2
\begin{aligned} F(x) &=\sum_{i=0}^{+\infty}(2i+1)x^i\\ &=2\sum_{i=0}^{+\infty}(i+1)\cdot x^i-\sum_{i=0}^{+\infty}x^i\\ &=2\sum_{i=0}^{+\infty}(x^{i+1})'-\sum_{i=0}^{+\infty}x^i\\ &=2\left(\frac{x}{1-x}\right)'-\frac{1}{1-x}\\ &=\frac{1+x}{(1-x)^2} \end{aligned}
F(x)=i=0∑+∞(2i+1)xi=2i=0∑+∞(i+1)⋅xi−i=0∑+∞xi=2i=0∑+∞(xi+1)′−i=0∑+∞xi=2(1−xx)′−1−x1=(1−x)21+x
从中我们看出一个事实,将系数写成下降幂,变成导数即可计算。
3.3.求指数型母函数
例3.3.1. 求圆排列
c
^
0
=
0
,
c
^
n
=
(
n
−
1
)
!
(
n
∈
N
+
)
\hat c_0=0,\;\hat c_n=(n-1)!\;(n\in\N^+)
c^0=0,c^n=(n−1)!(n∈N+) 的指数型母函数。注:圆排列也是求本质不同排列数,但是它认为循环移位本质相同。
解: 根据定义
C
^
(
x
)
=
∑
n
=
1
+
∞
c
^
n
x
n
n
!
=
∑
n
=
1
+
∞
x
n
n
=
−
ln
(
1
−
x
)
=
ln
(
1
1
−
x
)
\begin{aligned} \hat C(x) &=\sum_{n=1}^{+\infty}\hat c_n{x^n\over n!}\\ &=\sum_{n=1}^{+\infty}{x^n\over n}\\ &=-\ln(1-x)\\ &=\ln\left({1\over 1-x}\right) \end{aligned}
C^(x)=n=1∑+∞c^nn!xn=n=1∑+∞nxn=−ln(1−x)=ln(1−x1)
这个简单。突然你发现了梦幻联动,如果你写出全排
p
n
=
n
!
p_n=n!
pn=n! 的指数型生成函数
P
(
x
)
=
1
1
−
x
P(x)=\frac{1}{1-x}
P(x)=1−x1 竟然有
P
(
x
)
=
e
C
^
(
x
)
=
∑
k
=
0
+
∞
C
^
(
x
)
k
k
!
P(x)=e^{\hat C(x)}=\sum_{k=0}^{+\infty}\frac{\hat C(x)^k}{k!}
P(x)=eC^(x)=k=0∑+∞k!C^(x)k
仔细想想,确实合理。把一个全排看成置换,会得到很多个环。我们枚举环的大小。则
p
n
=
∑
1
≤
x
1
≤
x
2
≤
x
3
≤
⋯
≤
x
k
x
1
+
x
2
+
x
3
+
⋯
+
x
k
=
n
(
n
x
1
)
c
^
x
1
(
n
−
x
1
x
2
)
c
^
x
2
⋯
(
x
k
x
k
)
c
^
x
k
p_n=\sum_{1\le x_1\le x_2\le x_3\le\cdots\le x_k}^{x_1+x_2+x_3+\cdots+x_k=n} {n\choose x_1}\hat c_{x_1}{n-x_1\choose x_2}{\hat c_{x_2}}\cdots{x_k\choose x_k}\hat c_{x_k}
pn=1≤x1≤x2≤x3≤⋯≤xk∑x1+x2+x3+⋯+xk=n(x1n)c^x1(x2n−x1)c^x2⋯(xkxk)c^xk
如果不让 x x x 有序,那就需要乘一个 1 k ! \frac{1}{k!} k!1 的系数。至于组合数,恰好是指数型母函数卷积所附加的系数。所以真的是卷积。
例3.3.2. 求错排
d
1
=
0
,
d
2
=
1
,
d
n
=
(
n
−
1
)
(
d
n
−
1
+
d
n
−
2
)
(
n
≥
3
)
d_1=0,\;d_2=1,\;d_n=(n-1)(d_{n-1}+d_{n-2})\;(n\ge 3)
d1=0,d2=1,dn=(n−1)(dn−1+dn−2)(n≥3) 的指数型生成函数
D
(
x
)
D(x)
D(x) 的闭形式。
解: 错排的本质是,不存在自环的一种排列。稍微改动一下上面的式子即可。
d
n
=
∑
2
≤
x
1
≤
x
2
≤
x
3
≤
⋯
≤
x
k
x
1
+
x
2
+
x
3
+
⋯
+
x
k
=
n
(
n
x
1
)
c
^
x
1
(
n
−
x
1
x
2
)
c
^
x
2
⋯
(
x
k
x
k
)
c
^
x
k
d_n=\sum_{2\le x_1\le x_2\le x_3\le\cdots\le x_k}^{x_1+x_2+x_3+\cdots+x_k=n} {n\choose x_1}\hat c_{x_1}{n-x_1\choose x_2}{\hat c_{x_2}}\cdots{x_k\choose x_k}\hat c_{x_k}
dn=2≤x1≤x2≤x3≤⋯≤xk∑x1+x2+x3+⋯+xk=n(x1n)c^x1(x2n−x1)c^x2⋯(xkxk)c^xk
类似的,令
C
(
x
)
=
∑
i
=
2
+
∞
c
^
i
x
i
=
ln
(
1
1
−
x
)
−
c
^
1
x
C(x)=\sum_{i=2}^{+\infty}\hat c_ix^i=\ln\left({1\over 1-x}\right)-\hat c_1x
C(x)=i=2∑+∞c^ixi=ln(1−x1)−c^1x
则
D
(
x
)
=
∑
i
=
0
+
∞
C
(
x
)
i
i
!
=
exp
[
C
(
x
)
]
=
e
−
x
1
−
x
\begin{aligned} D(x) &=\sum_{i=0}^{+\infty}\frac{C(x)^i}{i!}\\ &=\operatorname{exp}\big[C(x)\big]\\ &={e^{-x}\over 1-x} \end{aligned}
D(x)=i=0∑+∞i!C(x)i=exp[C(x)]=1−xe−x
当然啦,也可以直接利用通项公式(容斥式)得到该式子。因为
1
1
−
x
\frac{1}{1-x}
1−x1 是全排而
e
−
x
e^{-x}
e−x 是
(
−
1
)
i
(-1)^i
(−1)i 的指数型母函数。
d
n
=
∑
i
=
0
n
(
−
1
)
i
(
n
i
)
(
n
−
i
)
!
d_n=\sum_{i=0}^{n}(-1)^i{n\choose i}(n-i)!
dn=i=0∑n(−1)i(in)(n−i)!
例3.3.3. 求
n
n
n 个点有标号无向连通图个数
a
n
a_n
an 的指数型生成函数
F
(
x
)
F(x)
F(x) 。
解: 首先考虑可以不连通的情况。显然方案数
b
n
=
2
n
(
n
−
1
)
b_n=\sqrt{2^{n(n-1)}}
bn=2n(n−1) 即枚举每条边。然而它有另一种计算方法,即枚举连通块大小。类似上面的操作,可得
e
A
(
x
)
=
B
(
x
)
⇒
A
(
x
)
=
ln
B
(
x
)
\begin{aligned} e^{A(x)}&=B(x)\\ \Rightarrow A(x)&=\ln B(x) \end{aligned}
eA(x)⇒A(x)=B(x)=lnB(x)
手推易知 B ( x ) B(x) B(x) 没有闭形式。所以只能暴力算对数了。但是复杂度确为 O ( n log n ) \mathcal O(n\log n) O(nlogn) 。
例子很多,我就不放上来了。更多学习资料就去分类专栏里找吧。