生成函数

Junity 发布于 2025-04-23 12025 次阅读 最后更新于 2025-04-23 1017 字 预计阅读时间: 5 分钟


AI 摘要

引言:生成函数是解决序列问题的强力工具,将序列操作转化为函数操作。通过定义序列的普通生成函数(OGF)并利用其线性、卷积、前缀和等特性,可将复杂问题简化。重点介绍了生成函数的封闭形式和利用部分分式求解通项的方法,并以斐波那契数列为例展示了比内公式的推导过程。

生成函数是一种用于解决与序列有关的问题的强力工具。通过生成函数,我们可以将一个序列映射为一个函数,并将对序列的操作映射为对这个函数的操作,从而轻松解出在序列视角下难以解决的问题。

类似傅里叶变换和拉普拉斯变换,生成函数的本质是 从另一个方式看待序列 ,或是 在另一个“同构”的空间中处理序列问题 。

生成函数的定义

对于一个序列 {ai},它的 普通生成函数 (OGF) 定义如下:

f(s)=∑i=0∞aisi

其中,s 是一个形式变量,可以表示任何使这个求和收敛的数。
例如,对于数列 an=n ,它的生成函数就是 f(s)=s1+2s2+3s3...
在本文中我们使用 OGF(an) 来表示数列 an 的生成函数。

生成函数的性质

前面说到过,我们可以将对序列的操作变为对生成函数的操作。生成函数与原序列有以下性质:

  1. 序列之和的生成函数是生成函数之和 :对于序列 an,bn ,有 OGF(an+bn)=OGF(an)+OGF(bn) 。
  2. 序列乘标量的生成函数是生成函数乘标量:对于序列 an ,有 OGF(kan)=kOGF(an) 。
  3. 序列的卷积的生成函数是生成函数之积 :对于序列 an,bn ,有 OGF(an×bn)=OGF(an)OGF(bn) 。
  4. 前缀和性质 :对于序列 an ,若 bn=∑i=0nai ,则 OGF(bn)=OGF(an)1−s ,其中 s 是生成函数中的形式变量。
  5. 差分性质:对于序列 an ,若 bn=an−an−1,b0=a0 ,则 OGF(bn)=(1−s)OGF(an) ,其中 s 是生成函数中的形式变量。

生成函数的封闭形式

生成函数的真正强大之处在于,它可以借助序列自身的特性写成一个简单的封闭形式。考虑斐波那契数列 fibn ,它的生成函数为 f(s)=∑i=1∞fibisi 。我们将前面两项单列出来:

f(s)=s+∑i=2fibisi

因为 fibn=fibn−1+fibn−2 ,代入可知:

f(s)=s+∑i=2∞(fibi−1+fibi−2)si=s+∑i=2∞fibi−1si+∑i=2∞fibi−2si

我们将 s 从后面两项中提取出来,使得 fib 的下标与 s 的幂次统一:

f(s)=s+s∑i=2∞fibi−1si−1+s2∑i=2∞fibi−2si−2=s+s(f(s))+s2(f(s))=s+sf(s)+s2f(s)

这是一个一次方程,可以解得 f(s)=s1−s−s2 。

由封闭解解出通项

现在的问题是,如何由这个数列得到斐波那契数列的通项?我们首先介绍一下 几何级数 。

几何级数是这样的级数:s=1+x+x2+... 。当 −1<x<1 时,因为 s=s∗x+1 ,因此 s=11−x 我们可以利用这一点,把 f(s) 进行展开:

f(s)=s∗11−(s+s2)=s∗∑i=0∞(s+s2)i=s∗∑i=0∞∑j=0i(ij)sjs2(i−j)=∑i=0∞∑j=0i(ij)s2i−j+1

通过把这个级数进一步展开,我们就可以得到斐波那契数列的通项公式。但实际上由于用到了二项式定理,这个展开会非常麻烦,因此我们可以在使用几何级数进行展开之前,先使用 部分分式 将原式拆成两个简单的分式:

设s1−s−s2=A1−as+B1−bs解得{a=1+52b=1−52A=15B=−15那么s1−s−s2=1511−as−15B1−bs=15∑i=0∞(as)i−(bs)i=15∑i=0∞(ai−bi)si=∑i=0∞15((1+52)i−(1−52)i)si

因此,fibn=15((1+52)n−(1−52)n) 。这个公式被称为 比内公式

除了使用几何级数以外,我们还可以使用 泰勒展开 来进行还原:泰勒公式将函数写成多项式的形式,而这天然就和我们想要的形式一致。考虑 f(s)=ex ,进行泰勒展开可知 f(s)=∑i=0∞xii! 可知,ex 是数列 an=1n! 的生成函数。

此作者没有提供个人介绍。
最后更新于 2025-04-23