生成函数基础
生成函数引入
“生成函数是数列与函数之间的桥梁.”我们通过生成函数,将数列问题转化为函数的问题,并借助函数的处理办法来求数列的一些性质.
具体地,对一个数列
常见的生成函数
我们想用生成函数,首先要把数列转化成生成函数.我们考虑数列
因此,我们构造一个
特别的,将
有时我们需要从
根据泰勒展开,我们有:
因此,我们有:
在处理这些问题时,我们通常可以直接考虑每一项的系数除以阶乘后的值,以更方便的探究性质.
根据牛顿二项式定理,我们有:
生成函数的简单常用变换
先来考虑加减,我们设
在考虑将
显然上面两个操作对应了数列的加减和数乘.
我们考虑两个数列所对应的两个生成函数
我们发现生成函数的积似乎对应着数列的卷积.让我们将其特殊化:
- 令
,即 ,则有:
我们发现,把一个函数乘以
- 令
,根据推论1, .则有:
我们发现,将一个函数除以
再来考虑对
我们发现,这样可以得到每一项向前平移一项再乘以该项的序号.
学习上列变换,目的就在于表示出一个复杂数列所对应的生成函数,再通过一些手段计算出第
例1 有数列
解:
我们尝试求解
由此,我们得到
接下来考察这是什么数列,根据公式1以及加减和数乘变换,生成函数
正如上所述,生成函数可以求解通项公式,但是从另一个角度,一个数列的前缀和也是一个数列,且由前缀和变换可以快速得到其生成函数,因此,生成函数也是求解前缀和的利器.让我们看下面的例子.
例2 化简:
这道题固然有初等解法,但是生成函数做法将更具有一般性.
初等解法
我们设数列
上下相减,即得:
即为所求.
我们考虑数列
考虑前后分别求解,前面是等比数列求和,后面可以考虑使用数列
这样的思路是可行的,但是我们有更简单的做法:考虑数列
发现这个形式已经很好了,我们只要求前
根据公式1以及牛顿二项式定理,这个形式就可以还原为数列了:
因此:
即为所求.
生成函数与数论
让我们重新表示一个数列的生成函数,这次我们不再使用多项式,而改用迪利克雷生成函数,具体的,对于数列
如不加特殊声明,本小节中的生成函数均指迪利克雷生成函数.
为什么我们要使用这个生成函数?这个生成函数与数论又有什么关系?我们知道,在前面的生成函数定义中,生成函数相乘意味着对应数列的卷积.让我们来考察一下在这个定义下,
可以发现,在这样的定义下,生成函数的乘积对应着数列的迪利克雷卷积,这可以引发我们的许多联想.
让我们引入黎曼-Zeta函数.
根据莫比乌斯反演,
这也是莫比乌斯反演的另一种形式.
小结
我们重复一遍:“生成函数是数列与函数之间的桥梁.”我们通过生成函数,将数列问题转化为函数的问题,并借助函数的处理办法来求数列的一些性质.
我们可以用生成函数解决一些数列通项求解,前缀和求解问题,并以此来解决一些计数题目.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统