生成函数是一种用于解决与序列有关的问题的强力工具。通过生成函数,我们可以将一个序列映射为一个函数,并将对序列的操作映射为对这个函数的操作,从而轻松解出在序列视角下难以解决的问题。
类似傅里叶变换和拉普拉斯变换,生成函数的本质是 从另一个方式看待序列 ,或是 在另一个“同构”的空间中处理序列问题 。
生成函数的定义
对于一个序列 ,它的 普通生成函数 (OGF) 定义如下:
其中, 是一个形式变量,可以表示任何使这个求和收敛的数。
例如,对于数列 ,它的生成函数就是
在本文中我们使用 来表示数列 的生成函数。
生成函数的性质
前面说到过,我们可以将对序列的操作变为对生成函数的操作。生成函数与原序列有以下性质:
- 序列之和的生成函数是生成函数之和 :对于序列 ,有 。
- 序列乘标量的生成函数是生成函数乘标量:对于序列 ,有 。
- 序列的卷积的生成函数是生成函数之积 :对于序列 ,有 。
- 前缀和性质 :对于序列 ,若 ,则 ,其中 是生成函数中的形式变量。
- 差分性质:对于序列 ,若 ,则 ,其中 是生成函数中的形式变量。
生成函数的封闭形式
生成函数的真正强大之处在于,它可以借助序列自身的特性写成一个简单的封闭形式。考虑斐波那契数列 ,它的生成函数为 。我们将前面两项单列出来:
因为 ,代入可知:
我们将 从后面两项中提取出来,使得 的下标与 的幂次统一:
这是一个一次方程,可以解得 。
由封闭解解出通项
现在的问题是,如何由这个数列得到斐波那契数列的通项?我们首先介绍一下 几何级数 。
几何级数是这样的级数: 。当 时,因为 ,因此 我们可以利用这一点,把 进行展开:
通过把这个级数进一步展开,我们就可以得到斐波那契数列的通项公式。但实际上由于用到了二项式定理,这个展开会非常麻烦,因此我们可以在使用几何级数进行展开之前,先使用 部分分式 将原式拆成两个简单的分式:
因此, 。这个公式被称为 比内公式
除了使用几何级数以外,我们还可以使用 泰勒展开 来进行还原:泰勒公式将函数写成多项式的形式,而这天然就和我们想要的形式一致。考虑 ,进行泰勒展开可知 可知, 是数列 的生成函数。
Comments NOTHING