生成函数 学习笔记

生成函数 学习笔记

有一部分没地方写的组合数学,先写这里。

0. pre - learning

1. 上升/下降幂:

nk=n×(n1)××(nk+1)

称为 n 的下降幂。

同理:

nk=n×(n1)××(n+k1)

称为 n 的上升幂。

2. 组合数:

Cnm=(nm)=n!m!(nm)!

组合数的几个重要公式:

对称性:

(nm)=(nnm)

吸收性:

(nm)=nm(n1m1)

递推:

(nm)=(n1m1)+(n1m)

证明:不妨直接拆组合数。

也可以考虑杨辉三角。

上指标求和:

i=mn(im)=(n+1m+1)

证明:

i=mn(im)=(mm)+(m+1m)++(nm)

因为 (mm)=1=(m+1m+1),所以可以用上文的递推公式将右式的前两项合并得到 (m+1m+1)+(m+1m)=(m+2m+1)

接着,可以将 (m+2m+1)(m+2m) 合并得到 (m+3m+1)

以此类推即可。

3. (广义)二项式定理:

(a+b)n=k=0n(nk)ankbk

我们考虑更改组合数的定义。

广义二项式系数:

(αk)=αkk!,αR,kN

广义二项式定理:

(a+b)α=k=0(αk)aαkbk

证明需要求导,不会。

上指标反转:

(nm)=(1)m(mn1m)

证明:
考虑 nm=n(n1)(nm+1)=(1)m(n)(n+1)(mn1)=(mn1)m

等价于右式。证毕。

4. 多项式定理:

对于 (x1+x2++xt)n 的展开式,x1n1x2n2xtnt 项的系数是:

n!n1!n2!nt!,ni=n

证明:考虑组合意义。

先从 n 中选择 n1 个式子,方案数为 (nn1)

接着,从 nn1 中选择 n2 个式子,方案数为 (nn1n2)

最后,从 nn1n2nt1 中选择 nt 个式子,方案数为 (nn1n2nt1nt)

由乘法原理,方案数为 (nn1)(nn1n2)(nn1n2nt1nt)

能够化简为:n!n1!n2!nt!

证毕。

值得注意的是,这个问题等价于可重集的排列方案数。

1. 幂级数展开

由于广义二项式定理的存在,我们可以对某些式子进行展开。以下是几个例子:

1x1=k=0(1k)(x)k=k=0(1)kk!k!(x)k=k=0xk=1+x+x2+

1x+1=1x+x2x3+x4+

需要记住另外几个常见展开:

ex=n01n!xn

xex=n1nn!xn

eCx=n0Cnn!xn

ln(1x)=n11nxn

ex+ex2=n01(2n+1)!x2n+1

exex2=n01(2n)!x2n

可以使用泰勒公式证明,但是 OI 中没必要。

注:我们不关心是否收敛,因为在生成函数中,重要的是系数而非值。

2.OGF

对于数列 A,其 OGF 定义为:

A(x)=i0Aixi

OFG 与无标号计数有关。

例:BZOJ3028 食物

首先分别给出每个条件对应的生成函数。

01 个:1+x

012 个:1+x+x2

0123 个:1+x+x2+x3

奇数个:x1x2

偶数个:11x2

3 的倍数:11x3

4 的倍数:11x4

我们将这些生成函数的式子相乘,得到:

f(x)=x(1x)4=xk=0(4k)(x)k=xk=0(1)k(k+33)(x)k=k=1(k+23)xk

[xn]f(x) 就是选 n 个的答案。

正确性:多项式乘法等价于枚举在每一个对象中选择了多少个。

生成函数可以用来求数列的通项公式。

引入:化简 i=0(i+1)xi

S=1+2x+3x2+,则 xS=x+2x2+3x3+

相减,得:(1x)S=1+x+x2+x3+=11x

解方程,得: S=1(1x)2

例:求 fib 数列的通项公式。

即求出 f0=0,f1=1,fn=fn2+fn1 的通项公式。

依照上例子,我们设生成函数 f(x)=i=0fixi

那么有:

f(x)=i=0fixi=f0+f1x+i=2(fi2+fi1)xi=x+i=2(fi1xn1×x+fi2xn2×x2)=x+xi=0fixi+x2i=0fixi=x+xf(x)+x2f(x)

所以 F=x1xx2。(封闭形式)

将这个式子进行因式分解,得到 x(11+52x)(1152)x

考虑到我们能够计算出形如 c1kx 的式子的值,因此可以使用待定系数法,将封闭形式变为 A11+52x+B1152x

于是有:

A×(1152x)+B×(11+52x)=xA+BA(152x)B(1+52x)=x

由于 A+B=0,有:

A152B1+52=1A=15,B=15

所以:

F=15×11152x+15×111+52x

按一般方法进行展开,得:

f(x)=n=0(152)nxn×(15)+n=0(1+52)nxn×(15)

由此,我们得到了 fib 数列的通项公式:

fibn=[xn]f(x)=(1+52)n(152)n5

4.EGF

定义一个数列 A 的指数型生成函数 EGF 为:

f(x)=i=0fixii!

EGF 一般与有标号计数有关,考虑其组合意义:

假设我们要从 r 个数中分别选择 x1,x2,x3排成一排,记答案为 ar。由多项式定理,ar=r!x1!x2!x3!

ar=x1+x2+x3=rr!x1!x2!x3!,而我们在定义 EGF 时就已经预处理好了分母,但是没有处理分子 r!

f(i)=i=0xii!,有 ar=r!×[xr]f(x)。也就是在 OGF 的基础上再乘以 r!

例:用红蓝绿 3 种颜色去涂 1×n 的棋盘,每格涂一种颜色,求使得被涂成红色和蓝色的方格数均为偶数的的涂色方法数。

不妨设 G(x)=(1+x22!+x44!)2(1+x1!+x22!+x33!+)

则:

G(x)=(ex+ex2)2ex=e3x+2ex+ex4=n=014(3n+2+(1)n)xnn!

故答案为 14(3n+2+(1)n)

posted @   ChthollyNS  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示