生成函数:从入门到出门
本博客在看完《多项式:从入门到全家桶》和《组合数学:从入门到被入门》后食用更佳。
生成函数简介
省流:
普通生成函数:
指数生成函数:
狄利克雷函数生成函数:
普通生成函数(重点)
又记作OGF(Ordinary Generating Function)。
本章中记
定义式:
并且,如果
基本运算
加减法很显然。
乘法仔细想一想其实也不难,由基础的乘法分配律可知:
原本需要
封闭形式
举个栗子。
假设我们现在有一个函数叫做
我们发现这个式子有一个性质:
于是
一般来说,把一个式子写成它的封闭形式能够便于推式子。
比如让你求
建议大家多练习一下推封闭形式。
多项式的四则运算,求导,积分等所有运算对封闭形式同样适用。
小练习:请求出以下几个式子的生成函数的封闭形式。
答案
另解:- (二项式定理)
可使用归纳法进行证明。
时显然成立。
时:
例:斐波那契数列的生成函数
我们定义
一个显然的方法就是利用
我们知道多项式乘
于是我们可以得到这个方程:
解得
于是我们接下来的问题就是如何把这个式子展开。
展开方式1
我们将
我们发现我们成功地解决了通项公式,但这是一个组合数求和的形式,并不是我们熟知的黄金分割比。
所以这个方法不行。
展开方式2
考虑求解一个待定系数的方程:
通分后得到:
则有:
它的一组解为:
于是
这有的时候也被称为斐波那契数列的第二个封闭形式。(第一个封闭形式:
其实,我们求
一般来说,对于
如果有相同因式(即次数
比如
应用
生成函数主要应用于各种计数问题,其目的是用简单的式子把一些复杂的转移表示出来。
下面举几个例子:
推通项公式
这个不说了,前面的斐波那契数列的例子已经说过了。
背包问题
传统的解决背包问题的方法就是dp,但这种办法在有些比较复杂的题上就行不通。
其实,如果你要求价值和刚好为
就拿方案数来说,你对每种不同的限制计算出它的生成函数,并把它们乘起来,最终式子的第
以某道题为例:
在许多不同种类的食物中选出
个, ,求方案数,对 取模,每种食物的限制如下:
- 承德汉堡:偶数个
- 可乐:0 个或 1 个
- 鸡腿:0 个,1 个或 2 个
- 蜜桃多:奇数个
- 鸡块:4 的倍数个
- 包子:0 个,1 个,2 个或 3 个
- 土豆片炒肉:不超过一个。
- 面包:3 的倍数个
我们设
考虑卷积的定义,值为
建议此处读者自行推导一下这几种食物的生成函数,争取自己把式子推出来。
答案
把上面所有式子乘起来可得:
由之前的第五条小练习,我们知道这就是
。 因此答案就是
。
代码略。
推算式
有的时候,有些题会让你求恰好等于
这种题有的时候就可以用生成函数的形式推。(尤其是有包含组合数的式子)
结合上某些多项式高科技,一般可以比传统方法快很多。
指数生成函数
又记作EGF(Exponential Generating Function)。
本章中记
定义式:
基本运算
加减法也很显然。
乘法可能会稍稍难一些,但经过一些推导实际上也不难。
指数生成函数与普通生成函数互转的公式:
另外,由于指数生成函数的定义,其导数和积分很好求。
封闭形式
疯毙形式(确信)
一般来说,指数生成函数的多项式的封闭形式和泰勒展开有关。(因为泰勒展开主要就是
我们考虑
- 定义式,
( 的泰勒展开) - 考虑
,于是 。(这个方法不够严谨,慎用)
类似的,等比数列的生成函数
排列、圆排列与多项式
长度为
圆排列数的定义是旋转后方案等价的排列数。
长度为
于是我们就有
但这只是数学上的推导,我们还需要一些直观理解。
我们引入一个概念,叫做置换环。
对于一个排列
并且对于两个排列,当且仅当它们所有的置换环相同时,这两个排列才相同。
于是对于长度为
- 将
分成若干个集合。 - 对于每个集合,构造一个置换环。
这样得出的方案数就是长度为
更进一步,我们发现对于一个集合,构造置换环的方案数就是这个集合的圆排列数。
所以,长度为
因此,多项式
若
类似的,我们举一些例子:
-
如果
个带标号点的生成树个数的EGF为 ,则 个带标号点的生成森林个数的EGF为 。 -
如果
个带标号点的无向连通图个数的EGF为 ,则 个带标号点的无向图个数的EGF为 。
因此,只要这两个中求出任意一个,则可利用多项式
应用
各种排列
举个例子:求错排数的EGF。
我们都知道错排数就是
而后者的EGF为
于是错排数的EGF为
与 的组合意义
前面说过,不讲。
OGF推出来的式子有组合数
可转化为EGF进行求解。
例:分别求出有
不妨设这个答案数组为
由于一张竞赛图缩点就变成了一个链状DAG(有向无环图),因此我们枚举最后一个连通块内有多少点:
这个式子和分治FFT很像,但是多了一个组合数。
于是我们设
于是就有
化为分治FFT或多项式求逆即可。
顺便复习一下上面那个式子如何多项式求逆:
由于
即:
狄利克雷生成函数
以后再说。
附
本章主要记载了推式子过程中容易用到的知识。
二项式反演
牛顿二项式定理
我们都知道,著名的二项式定理是指:
更进一步,我们把组合数的定义域拓展到复数上:
其中
于是我们就有了:
虽然这个定理不常用,但有的时候推式子还是用得上的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人