[学习笔记]普通生成函数(OGF)/指数型生成函数(EGF)概念及应用

本文章是[学习笔记]生成函数进阶的一部分
重点当然是谈它的运用了…

0.前置知识

[学习笔记]泰勒多项式快速入门

如果你实在不想看的话可以直接看第二部分的那张图片,对后面学习没任何影响。

1.普通生成函数(OGF)

1.1定义

对于一个无穷序列 { a 0 , a 1 , a 2 , ⋅ ⋅ ⋅ } \{a_0, a_1, a_2, · · · \} {a0,a1,a2,},定义其普通生成函数为级数: ∑ k = 0 ∞ a k ⋅ x k \sum ^∞_{k=0}a_k · x_k k=0akxk

1.2 形式幂级数

形式幂级数顾名思义,就是我们不考虑 x x x的收敛性(你可以认为是不考虑是否在任意取值下正确或者有意义)化简出的形式,这里的 x x x其实就是一个符号而已,并不是一个数,因此我们如果代入实际值的话可能会出现错误。
我们根据常用函数的泰勒公式对一些特殊函数进行化简。
{ 1 0 ! , 1 1 ! , 1 2 ! , ⋅ ⋅ ⋅ , 1 k ! , ⋅ ⋅ ⋅ } \{\frac{1}{0!}, \frac{1}{1!}, \frac{1}{2!}, · · · ,\frac{1}{k!},· · ·\} {0!1,1!1,2!1,,k!1,}的形式幂级数为 e x e^x ex
{ 1 , 1 , 1 , ⋅ ⋅ ⋅ } \{1,1,1,· · ·\} {1,1,1,}的形式幂级数为 1 1 − x \frac{1}{1-x} 1x1
{ 1 , 2 , 4 , ⋅ ⋅ ⋅ } \{1,2,4,· · ·\} {1,2,4,}的形式幂级数为 1 1 − 2 x \frac{1}{1-2x} 12x1
sol:我们将 2 k 2^k 2k x k x^k xk看成一个整体就好。
{ 1 , 0 , 1 , ⋅ ⋅ ⋅ } \{1,0,1,· · ·\} {1,0,1,}的形式幂级数为 1 1 − x 2 \frac{1}{1-x^2} 1x21
sol:我们将 x k x^{k} xk看成 ( x 2 ) k 2 (x^2)^{\frac{k}{2}} (x2)2k,于是又变成了 { 1 , 1 , 1 , ⋅ ⋅ ⋅ } \{1,1,1,· · ·\} {1,1,1,}
{ 0 , 1 , 0 , ⋅ ⋅ ⋅ } \{0,1,0,· · ·\} {0,1,0,}的形式幂级数为 x 1 − x 2 \frac{x}{1-x^2} 1x2x
sol:相当于上面的左移了一位。
{ 1 , 2 , 3 , ⋅ ⋅ ⋅ } \{1,2,3,· · ·\} {1,2,3,}的形式幂级数为 1 ( 1 − x ) 2 \frac{1}{(1-x)^2} (1x)21
sol1:我们发现对 1 + x + x 2 + x 3 + . . . 1+x+x^2+x^3+... 1+x+x2+x3+...求导之后就是 1 + 2 x + 3 x 2 + 4 x 3 + . . . 1+2x+3x^2+4x^3+... 1+2x+3x2+4x3+...
因此 d ( 1 + x + x 2 + x 3 + . . . ) d x = 1 ( 1 − x ) 2 \frac{\mathrm{d} (1+x+x^2+x^3+...)}{\mathrm{d} x}=\frac{1}{(1-x)^2} dxd(1+x+x2+x3+...)=(1x)21
sol2:发现 { 1 , 2 , 3 , ⋅ ⋅ ⋅ } \{1,2,3,· · ·\} {1,2,3,}就是两个 { 1 , 1 , 1 , ⋅ ⋅ ⋅ } \{1,1,1,· · ·\} {1,1,1,}的卷积,然后就没了。
{ 4 , 5 , 7 , 10 , 14 , ⋅ ⋅ ⋅ } \{4,5,7,10,14,· · ·\} {4,5,7,10,14,}的形式幂级数为 1 ( 1 − x ) 3 + 4 1 − x \frac{1}{(1-x)^3}+\frac{4}{1-x} (1x)31+1x4
sol:首先常数项不为 0 0 0,我们可以先分离出 { 4 , 4 , 4 , ⋅ ⋅ ⋅ } \{4,4,4,· · ·\} {4,4,4,},就是 4 1 − x \frac{4}{1-x} 1x4
现在剩下 { 0 , 1 , 3 , 6 , ⋅ ⋅ ⋅ } \{0,1,3,6,· · ·\} {0,1,3,6,},而它就是三个 { 1 , 1 , 1 , ⋅ ⋅ ⋅ } \{1,1,1,· · ·\} {1,1,1,}的卷积,所以是 1 ( 1 − x ) 3 \frac{1}{(1-x)^3} (1x)31

1.3 应用

1.3.1 经典小例题

有四种无限多的水果,要求第一种恰好拿出偶数个,第二种恰好拿出 5 5 5的倍数个,第三种最多拿 4 4 4 个,第四种最多拿 1 1 1 个,求恰好拿出 n n n 个水果的方案数。

答案:
1 1 − x 5 ⋅ 1 1 − x 2 ⋅ ( 1 + x + x 2 + x 3 + x 4 ) ⋅ ( 1 + x ) = 1 ( 1 − x ) 2 \frac{1}{1-x^5}·\frac{1}{1-x^2}·(1+x+x^2+x^3+x^4)·(1+x)=\frac{1}{(1-x)^2} 1x511x21(1+x+x2+x3+x4)(1+x)=(1x)21
把它又变成一般形式就会发现答案就是 n + 1 n+1 n+1
提示: ( 1 − x 5 ) = ( 1 − x ) ⋅ ( 1 + x + x 2 + x 3 + x 4 ) (1-x^5)=(1-x)·(1+x+x^2+x^3+x^4) (1x5)=(1x)(1+x+x2+x3+x4)

1.3.2 用OGF推导数列通项公式

Fibonacci 数列

2-1
反正你知道最终答案就是 f i = 1 5 ( ( 1 1 + 5 ) n − ( 1 1 − 5 ) n ) f_i=\frac{1}{\sqrt{5}}((\frac{1}{1+\sqrt{5}})^n-(\frac{1}{1-\sqrt{5}})^n) fi=5 1((1+5 1)n(15 1)n)就行了(逃)。

Catlan数

其实比求Fibonacci 数列简单。
2-2
需要注意的有两个地方:

1.解完 G ( x ) G(x) G(x)后我们得到了两个根,在检验的时候我们带入了 x = 0 x=0 x=0(趋近于)检验常数项来验根。虽然形式幂级数按道理不能够代入值,但是我们能够确定 x = 0 x=0 x=0是正确的,因此直接的代入。
2.倒数第二行用到了泰勒展开(常用函数的最后一个公式),是因为我们不知道带根号的多项式代表着什么。

2.指数生成函数(EGF)

2.1定义

对于一个无穷序列 { a 0 , a 1 , a 2 , ⋅ ⋅ ⋅ } \{a_0, a_1, a_2, · · · \} {a0,a1,a2,},定义其指数生成函数为级数: ∑ k = 0 ∞ a k ⋅ x k k ! \sum ^∞_{k=0}a_k · \frac{x_k}{k!} k=0akk!xk

普通生成函数通常用来解决无标号计数问题,指数生成函数通常用来解决带标号的计数问题,通常带标号计数问题都比有标号计数简单。

2.2 应用

2.2.1 排列与圆排列

在这里插入图片描述
首先我们要知道的是,在带标号计数指数函数计数问题中,只要我们能够把一个大问题拆分成若干个子问题,就会有类似 P ( x ) = e C ( x ) P(x)=e^{C(x)} P(x)=eC(x)的结论(证明由于时间问题来不及写)。
那么对于上面的问题,一个排列可以被我们拆成若干个循环节,而每个循环节的方案数都是大小的圆排列数,就满足了上述条件。

2.2.2 错排问题

设错排数EGF为 D ( x ) D(x) D(x)
我们发现对于一个排列我们仍然可以拆成若干循环节,只要每个循环节的大小不为 1 1 1,我们就有方案使它错开。
因此答案其实就是 P ( x ) = e C ( x ) − x P(x)=e^{C(x)-x} P(x)=eC(x)x

2.2.3 有标号无向连通图个数

一个非常重要的运用。
我们很容易手算出有标号无向图的生成函数是 f ( x ) = ∑ n = 0 ∞ 2 ( n 2 ) ⋅ x n n ! f(x)=\sum^{∞}_{n=0}2^{\binom{n}{2}}·\frac{x^n}{n!} f(x)=n=02(2n)n!xn
根据2.2.1的结论就有有标号无向连通图个数的生成函数就是 g ( x ) = ln ⁡ f ( x ) g(x)=\ln f(x) g(x)=lnf(x)
这样我们就可以 O ( n log ⁡ n ) O(n\log n) O(nlogn) g ( x ) g(x) g(x)了。


END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值