生成函数 从出生到凉凉

本文介绍了生成函数的基本概念,包括普通型生成函数和指数生成函数,并通过实例展示了如何利用生成函数解决组合计数问题和数列求解问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通型生成函数(Ordinary Generation Function)

对于一个无穷数列 f0,f1,f2, f 0 , f 1 , f 2 , ⋯

将其看做一个无穷维向量,写出其形式幂级数:

f(x)=i=0fixi f ( x ) = ∑ i = 0 ∞ f i x i

例:数列 1,1,1, 1 , 1 , 1 , ⋯ 的生成函数为:

f(x)=1+x+x2+ f ( x ) = 1 + x + x 2 + ⋯

x x 没有实际含义(形式幂级数),故不考虑收敛域

二次项系数C(a,0),C(a,1),生成函数为 (1+x)a ( 1 + x ) a

设方程 e1+e2++ek=n e 1 + e 2 + ⋯ + e k = n 的非负整数解的方案为 hn h n ,则 hn h n 的生成函数为 e1,e2,,ek e 1 , e 2 , ⋯ , e k 的生成函数的乘积

例:考虑 3e1+4e2+2e3+5e4=n 3 e 1 + 4 e 2 + 2 e 3 + 5 e 4 = n 的非负整数解的方案书数 hn h n 的生成函数

f1=3e1,f2=4e2,f3=2e3,f4=5e4 f 1 = 3 e 1 , f 2 = 4 e 2 , f 3 = 2 e 3 , f 4 = 5 e 4 ,得到

f1+f2+f3+f4 f 1 + f 2 + f 3 + f 4 ,且 f f 的约束是:为上述关于e系数的倍数

h(x)=(i=0x3i)(i=0x4i)(i=0x2i)(i=0x5i) h ( x ) = ( ∑ i = 0 ∞ x 3 i ) ( ∑ i = 0 ∞ x 4 i ) ( ∑ i = 0 ∞ x 2 i ) ( ∑ i = 0 ∞ x 5 i )

=11x311x411x211x5 = 1 1 − x 3 1 1 − x 4 1 1 − x 2 1 1 − x 5

每一项的系数为取值,将加法转化为乘法


普通型生成函数题目

BZOJ 3028 食物


指数生成函数(Exponential Generation Function)

对于数列 f0,f1,f2, f 0 , f 1 , f 2 , ⋯ ,其指数型生成函数为

f(x)=i=0fii!xi f ( x ) = ∑ i = 0 ∞ f i i ! x i

例:数列 1,1,1, 1 , 1 , 1 , ⋯ 的指数型生成函数为

f(x)=i=01i!xi f ( x ) = ∑ i = 0 ∞ 1 i ! x i

f(x)=ex f ( x ) = e x 的麦克劳林级数为

i=0fi(x)i!xi ∑ i = 0 ∞ f i ( x ) i ! x i

由自然对数性质可得 fi(x)=ex,fi(0)=1 f i ( x ) = e x , f i ( 0 ) = 1

ex=i=01i!xi e x = ∑ i = 0 ∞ 1 i ! x i

Pin=Cini! P n i = C n i ∗ i !

P0n,P1n,P2n,,Pnn P n 0 , P n 1 , P n 2 , ⋯ , P n n 的指数生成函数是 (1+x)n ( 1 + x ) n

定义多重集的排列组合

S={niai}(ni=0,1,2,,k) S = { n i · a i } ( n i = 0 , 1 , 2 , ⋯ , k ) ,表示 S S 集合中有ni ai a i ni n i 被称为元素 ai a i 的重数, k k 称为多重集的类别数

多重集S={ni·ai}(ni=0,1,2,,) n n 排列数的指数生成函数是

ij=0ni1j!xj

相当于 个全 1 1 数列指数生成函数的乘积

相当于是枚举对于每一个元素a,选择多少个,将其放入序列中有多少种不同的方法,最后求乘积和

最终答案为 n! n ! ∗ ( xn x n 的系数)

结合 n n 排列数公式n!imi!(imi=n)


Problem

确定用红、白、蓝三色给 1×n 1 × n 的棋盘的着色中,红格数是偶数,且至少有一个蓝格的着色方法数 hn h n

红: i=012i!x2i ∑ i = 0 ∞ 1 2 i ! x 2 i

蓝: i=11i!xi ∑ i = 1 ∞ 1 i ! x i

白: i=01i!xi ∑ i = 0 ∞ 1 i ! x i

h(x)=(i=012i!x2i)(i=11i!xi)(i=01i!xi) h ( x ) = ( ∑ i = 0 ∞ 1 2 i ! x 2 i ) ( ∑ i = 1 ∞ 1 i ! x i ) ( ∑ i = 0 ∞ 1 i ! x i )

h(x)=ex+ex2ex(ex1) h ( x ) = e x + e − x 2 e x ( e x − 1 )

h(x)=e3xe2x+ex12 h ( x ) = e 3 x − e 2 x + e x − 1 2

ex=i=01i!xi e x = ∑ i = 0 ∞ 1 i ! x i

h(x)=12+i=0(3x)i(2x)i+xi2i! h ( x ) = − 1 2 + ∑ i = 0 ∞ ( 3 x ) i − ( 2 x ) i + x i 2 ∗ i !

hn=3n2n+12 h n = 3 n − 2 n + 1 2

BZOJ 3771 Triple

BZOJ 3456 城市规划

BZOJ 3059 COUNTARI


生成函数求数列通项

hn=5hn16hn2(n2),h0=1,h1=2 h n = 5 h n − 1 − 6 h n − 2 ( n ≥ 2 ) , h 0 = 1 , h 1 = 2

将其用生成函数形式写出, n n 次项用n1,n2次项代替,得

h(x)=5x(h(x)h0)6x2h(x)+(h0h1x) h ( x ) = 5 x ( h ( x ) − h 0 ) − 6 x 2 h ( x ) + ( h 0 − h 1 x )

h0,h1 h 0 , h 1 代入, h(x) h ( x ) 移至一侧,得

h(x)=17x6x25x+1 h ( x ) = 1 − 7 x 6 x 2 − 5 x + 1

将其化为 S1rx S 1 − r x 的形式,得

h(x)=512x413x h ( x ) = 5 1 − 2 x − 4 1 − 3 x

最后用形式幂级数表示

h(x)=i=0(52i43i)xi h ( x ) = ∑ i = 0 ∞ ( 5 ∗ 2 i − 4 ∗ 3 i ) x i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值