生成函数引入
本文共约 8600 字。
Key Words:生成函数,简单递推数列,系数收敛性,二项式系数,差分与前缀和,组合恒等式,自然数幂和,哑演算*
基本概念
生成函数
对于无穷数列
,构造形式幂级数 称 为数列 的生成函数(Generating Function)。
什么是形式幂级数?它和多项式有什么区别?封闭形式中的运算含义是什么?我们为何默认它收敛?见《多项式的计算》“形式幂级数”一节。
生成函数将零散的数列
A generating function is a device somewhat similar to a bag. Instead of carrying many little objects detachedly, which could be embarrassing, we put them all in a bag. And then, we have only one object to carry, the bag. —— George Polya
生成函数就像个包。捣鼓数列的每一项太烦,把它们塞进包里就简单了。—— 佐治亚·波利亚
常见数列的生成函数
先给出一系列常见数列的生成函数,在推导中,若能将陌生生成函数转化为若干熟悉生成函数的组合,则可以直接根据下表提取系数。
我们把目光放在表格中的第一行,它是最著名的生成函数。数列
做代换
表格的三、四、五行提供了二项式系数的结论,它们的证明由(广义)二项式定理给出。
生成函数的运算
常见数列操作对应的生成函数运算如下:
- 系数前移:
,即减去前 项之后除以 。 - 系数后移:
。 - 系数乘
: ,先求导然后后移即可。将算子 记为 。
简单递推数列
例题 6.2.1 「一道高考题」
数列
满足 , ,求 的通项公式。
Solution:记
整理得
解得封闭形式
它不在表中,无法直接提取系数。考虑进行分式分解,即将
我们断言
通分并对比系数,可解得
提取系数,则
总结:本题的解答可以分为以下四步:
构造目标数列的生成函数。
将条件(如数列的递推关系)转化为生成函数方程。
解方程,得到封闭形式。
将封闭形式转化为我们熟悉的形式,提取系数。
例题 6.2.2 「斐波那契数列」
斐波那契数列
满足 ,且对于 有 。求 的通项公式。
Solution:记斐波那契数列的生成函数为
解得封闭形式
接下来进行分式分解。首先将分母因式分解,解一元二次方程
例题 6.2.3 「又一道高考题」
数列
满足 , ,求 的通项公式。
Solution:记
记
根据递推式,
在
代入
断言存在
展开对比系数,解得
提取系数得
二项式系数
在《组合数学》一章中,我们介绍了二项式系数
下降幂
对
定义 的 次下降幂为 广义二项式系数
对于
,定义
常用恒等式
对于广义二项式系数
- 上指标反转
证明:
注意:当上标
不是 的时候,对称恒等式 不再生效。
广义二项式定理
对于
,形式幂级数 有展开式
证明:考虑
- 范德蒙德卷积
证明:注意到加法卷积的形式,构造
- 下降幂的二项式定理
证明:将范德蒙德卷积中的组合数展开
构造二元多项式
这种方法称为“多项式推理法”:先用组合方法证明整数的情形,然后用插值推广到实数。
类似地,上升幂也满足二项式定理,利用上指标反转公式
即可证明。
- 加倍公式
证明:
两个错开
加倍公式提供了处理
令
使用上指标反转又得
右侧的
例题 6.2.4 「一个中心二项式系数的恒等式」
求证
Solution:这是卷积的形式,构造
差分与前缀和
对于数列
记
记
例题 6.2.5
链上二次求和(简化版)维护序列
,有 个操作,需要支持单点修改,单点查询 。 , 。
Solution:
容易
二项式反演
二项式反演是一类重要的组合变换。
数列
满足则
证明:
法一:拆卷积
从左侧等式出发,将组合数拆开整理得
辨认出加法卷积,记
辨认出
构造生成函数
对
提取系数得
法一告诉我们,二项式反演是一种加法卷积,可以用 FFT 加速计算。
法二和二项式反演的组合本质有关,具体见《符号化反演》一节。
简单组合求和问题
在这一小节中,我们将介绍一些典型的组合求和问题,并用生成函数解决它们。
二项式系数
例题 6.2.6.
记
为斐波那契数列,证明恒等式
证明:直接写出生成函数
例题 6.2.7.
求下列求和的封闭形式
证明:直接写出生成函数
例题 6.2.5.
证明恒等式
证明:此处有两个变量,直接按
对于左侧
注意到
注:继续推导可得
。
数列的
次方和
- 给出数列
,对于 ,分别求出 。
写出答案的生成函数
自然数幂和
自然数幂和多项式
多项式
满足 时 ,称其为自然数幂和多项式。
例如
- 结论:
对 都存在,且次数为 。
证明略。接下来,我们将求出
尝试建立二元生成函数
重新尝试。考虑为
接下来提取
习题
组合求和其一
求
的封闭形式。
Solution:构造生成函数
组合求和其二
求
的封闭形式。
Solution:构造生成函数
记
组合变换其二
数列
满足证明
Solution:构造生成函数
提取系数得
此处的任务是【例题6.1.5】“幂的横截”。
若给出
见闻*
哑演算
哑演算,又称本影演算,其思想是将数列
设
的定义域为 的形式幂级数(显然,定义域是线性空间, 构成定义域的一组基) (根据这一规则,可以计算任意的 ,即对每个单项式分别求和)对于任意
和不含 的式子 (可以是常数或者关于 的多项式等),有 (线性性)对于任意
,都有 (线性性)
由于
伯努利数
伯努利数
满足如下恒等式求
。
Solution:首先看传统方法。将和式展开成卷积的形式,再辨识出封闭形式
其中
下面来看哑演算方法。令线性变换
构造
同时,右侧
我们引入
组合变换其三
给出
,对于 ,分别求答案对
取模。
Solution:令线性变换
此处若直接构造答案的生成函数,无法提取
记
显然这是个线性算法(输入是
注意
众所周知,复合一次分式可以卷积计算。将这个算法转置,复杂度
传统推导留作读者练习。
线性递推
数列
有递推公式 。给出
,快速求解 的值。
Solution:令线性变换
根据线性性,整理得
为了方便,记
根据
上式简写为
记
于是我们知道,对于任意
二者等价。
考虑我们要求的
推导完毕。计算时,只需倍增求解
不难发现这和市面上流传的常系数线性递推算法等价。