生成函数入门及应用 生成函数

本文介绍生成函数的基本概念,包括普通型生成函数(OGF)和指数型生成函数(EGF)的定义及其应用,并通过实例说明如何利用生成函数解决组合问题。

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

说实话这东西至少得学一天……

普通型生成函数 OGF

数列f(x)=axf(x)=a_xf(x)=ax的普通型生成函数为g(x)=∑i=0∞aixig(x)=\sum_{i=0}^\infty a_ix^ig(x)=i=0aixi
一般来说,f(x)f(x)f(x)是有特殊性质的。它会得到一些特殊的生成函数。在收敛意义下(假设函数会收敛)x∈[−1,1]x\in[-1,1]x[1,1]时,由等比数列计算公式∑i=0n−1a0qi=a0(1−qn)1−q\sum_{i=0}^{n-1}a_0q^i=\frac{a_0(1-q^n)}{1-q}i=0n1a0qi=1qa0(1qn), 生成函数有以下计算公式:
∑i=0∞xi=11−x\sum_{i=0}^\infty x^i=\frac{1}{1-x}i=0xi=1x1,即f(x)=1f(x)=1f(x)=1的生成函数为g(x)=11−xg(x)=\frac{1}{1-x}g(x)=1x1
∑i=0nCnixi=(1+x)n\sum_{i=0}^n C_n^ix^i=(1+x)^ni=0nCnixi=(1+x)n,即f(x)=Cnxf(x)=C_n^xf(x)=Cnx的生成函数。这其实是二项式定理。
∑i=0∞Cn+i−1ixi=1(1−x)n\sum_{i=0}^\infty C_{n+i-1}^ix^i=\frac{1}{(1-x)^n}i=0Cn+i1ixi=(1x)n1,即f(x)=Cn+x−1xf(x)=C_{n+x-1}^xf(x)=Cn+x1x的生成函数。(广义二项式定理)
∑i=0∞(i+1)xi=1(1−x)2\sum_{i=0}^\infty (i+1)x^i=\frac{1}{(1-x)^2}i=0(i+1)xi=(1x)21,即f(x)=x+1f(x)=x+1f(x)=x+1的生成函数。这是上式的特殊情况。
在第一个式子中,将xxx代为其它式子,有:
∑i=0∞xki=11−xk\sum_{i=0}^\infty x^{ki}=\frac{1}{1-x^k}i=0xki=1xk1,即f(x)=[k∣x]f(x)=[k|x]f(x)=[kx]的生成函数。
∑i=m∞xi=xm1−x\sum_{i=m}^\infty x^i=\frac{x^m}{1-x}i=mxi=1xxm,即f(x)=[x≥m]f(x)=[x\ge m]f(x)=[xm]的生成函数。
∑i=0∞aixi=11−ax\sum_{i=0}^\infty a^ix^i=\frac{1}{1-ax}i=0aixi=1ax1,即f(x)=axf(x)=a^xf(x)=ax的生成函数。
还有一些显然的式子,如:
∑i=0nxi=1−xn+11−x\sum_{i=0}^n x^i=\frac{1-x^{n+1}}{1-x}i=0nxi=1x1xn+1,即f(x)=1(x≤n)f(x)=1(x\le n)f(x)=1(xn)的生成函数。
将以上形式进行组合,还可以得到多种生成函数。得到生成函数后,从右反推到左得到原函数。
生成函数的意义在于将复杂的组合问题转化为简单的计算问题。普通型生成函数做组合问题,而指数型生成函数做排列问题。

练习题:求选n个水果的方案数。苹果和香蕉有无限个,但苹果必须成对拿,而香蕉必须五个一组地拿;橘子只有4个,梨只有一个。

f(n)f(n)f(n)表示选nnn个水果的方案数。将每种水果的生成函数乘起来,有
g(x)=∑i=0∞x2i∑i=0∞x5i∑i=04xi∑i=01xig(x)=\sum_{i=0}^\infty x^{2i}\sum_{i=0}^\infty x^{5i}\sum_{i=0}^4 x^i\sum_{i=0}^1 x^ig(x)=i=0x2ii=0x5ii=04xii=01xi
=11−x211−x51−x51−x(1+x)=\frac{1}{1-x^2}\frac{1}{1-x^5}\frac{1-x^5}{1-x}(1+x)=1x211x511x1x5(1+x)
=1(1−x)2=\frac{1}{(1-x)^2}=(1x)21
由开篇第四个式子,得f(x)=x+1f(x)=x+1f(x)=x+1

求斐波那契数列通项

斐波那契数列的生成函数为g(x)=x+x2+2x3+3x4+5x5+8x6+...g(x)=x+x^2+2x^3+3x^4+5x^5+8x^6+...g(x)=x+x2+2x3+3x4+5x5+8x6+...
由数列性质容易推知x2g(x)+xg(x)+x=g(x)x^2g(x)+xg(x)+x=g(x)x2g(x)+xg(x)+x=g(x)
整理得g(x)=x1−x−x2g(x)=\frac{x}{1-x-x^2}g(x)=1xx2x
我们需要将生成函数还原。设g(x)=a1−cx+b1−dxg(x)=\frac{a}{1-cx}+\frac{b}{1-dx}g(x)=1cxa+1dxb
化简解得参数,于是得到递推式。具体请读者计算。

开篇第四个式子的解释

upd on 2019.4.18
广义二项式定理描述为1(1−x)n=∑i=0∞(−ni)xi\frac{1}{(1-x)^n}=\sum_{i=0}^\infty\binom{-n}{i}x^i(1x)n1=i=0(in)xi
其中(−ni)=(−n)!i!(−n−i)!=(−1)n−11(n−1)!∞i!(−1)n+i−11(n+i−1)!∞=(n+i−1)!i!(−1)i(n−1)!=(−1)i(n+i−1i)\binom{-n}{i}=\frac{(-n)!}{i!(-n-i)!}=\frac{(-1)^{n-1}\frac{1}{(n-1)!}\infty}{i!(-1)^{n+i-1}\frac{1}{(n+i-1)!}\infty}=\frac{(n+i-1)!}{i!(-1)^i(n-1)!}=(-1)^i\binom{n+i-1}{i}(in)=i!(ni)!(n)!=i!(1)n+i1(n+i1)!1(1)n1(n1)!1=i!(1)i(n1)!(n+i1)!=(1)i(in+i1)
然后再吃掉一个负号就行了。

总之原来写的式子肯定是对的……这个是什么我就不知道了

指数型生成函数 EGF

函数f(x)=axf(x)=a_xf(x)=ax的指数型生成函数为h(x)=∑i=0∞aixii!h(x)=\sum_{i=0}^\infty \frac{a_ix^i}{i!}h(x)=i=0i!aixi
由泰勒展开,新的公式是∑i=0∞xii!=ex\sum_{i=0}^\infty \frac{x^i}{i!}=e^xi=0i!xi=ex。同样可以通过代换xxx得到很多公式变形。以下为典型变形:
∑i=0∞x2i(2i)!=ex+e−x2\sum_{i=0}^\infty \frac{x^{2i}}{(2i)!}=\frac{e^x+e^{-x}}{2}i=0(2i)!x2i=2ex+ex
∑i=0∞x2i+1(2i+1)!=ex−e−x2\sum_{i=0}^\infty \frac{x^{2i+1}}{(2i+1)!}=\frac{e^x-e^{-x}}{2}i=0(2i+1)!x2i+1=2exex
数列{0,1,0,-1,0,1,0,-1….}的指数型生成函数为sin(x),数列{1,0,-1,0,1,0,-1,0….}的指数型生成函数为cos(x)。

练习题:求选n个水果的方案数。苹果、香蕉、橙子、梨都有无限个,但苹果要选奇数个,香蕉要选偶数个。每个水果都不同

因为是排列问题,所以用指数型生成函数。
h(x)=ex−e−x2ex+e−x2(ex)2h(x)=\frac{e^x-e^{-x}}{2}\frac{e^x+e^{-x}}{2}(e^x)^2h(x)=2exex2ex+ex(ex)2
=e4x−14=\frac{e^{4x}-1}{4}=4e4x1
=∑i=1∞4ixii!4=\frac{\sum_{i=1}^\infty4^i\frac{x^i}{i!}}{4} =4i=14ii!xi
=∑i=1∞4i−1xii!=\sum_{i=1}^\infty4^{i-1}\frac{x^i}{i!} =i=14i1i!xi
于是f(x)=4x−1f(x)=4^{x-1}f(x)=4x1

生成函数的运算

upd on 2019.1.28
无论是OGF还是EGF,生成函数都可以如下计算:

  • F+GF+GF+G意义为可能是两种情况中的一种。
  • FGFGFG意义为同时选择两种情况。
  • eFe^FeF意义为自我组合(合并)。

练习题

大朋友与多叉树

叶子结点权值为111,非叶子结点权值为儿子的权值的和,且其儿子个数∈D\in DD。求这样的根节点权值为SSS的无标号且儿子形状有序的树的个数。

FFF表示根节点权值为xxx的树的方案数OGF。考虑一个方案是什么,即可能是儿子数∈D\in DD的OGF,还有可能是一个权值为111的叶子,其方案数为111ddd个儿子是必须同时选择ddd棵子树的,ddd可能DDD中的任何一个元素。由上,转移公式为F=1@1+∑d∈DFdF=1@1+\sum_{d\in D}F^dF=1@1+dDFd,其中1@11@11@1表示1x11x^11x1

于是用拉格朗日反演解出FFF的第SSS项即可。

城市规划

(2018.12.5)
nnn个点的有标号的简单连通无向图的个数。n≤130000n\le 130000n130000

在本题中,“有标号简单连通无向图计数”的组合是“有标号简单无向图”,因此我们只需解决有标号简单无向图计数,然后用多项式取对数即可。
而有标号简单无向图计数非常简单,答案就是2(n2)2^{n\choose 2}2(2n)。其指数型生成函数为G(x)=∑i=0∞2(i2)xii!G(x)=\sum_{i=0}^\infty2^{i\choose 2}\frac{x^i}{i!}G(x)=i=02(2i)i!xi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值