0. 前置芝士
0.1. 导数
0.1.1. 常用导数
特别地,(ex)′=exlne=ex.
一个总结性公式
0.1.2. 运算法则
-
加减可以直接拆开。
-
乘法:
(f(x)g(x))′=f(x)′g(x)+f(x)g′(x) -
除法:
(f(x)÷g(x))′=f(x)′g(x)−f(x)g′(x)g2(x)
0.2. 泰勒展开
详情请见 [干饭现场] 多项式全家桶。
1. 普通生成函数(OGF)
1.1. 定义
对于一个无穷序列 {a0,a1,a2,...},定义其普通生成函数为形式幂级数:∑∞k=0akxk.
1.2. 常用普通生成函数
1.2.1. 斐波那契数列
首先可以推导出它的封闭形式。
在泰勒展开的 0.1.2. 一些常见的展开
中,我们已经推导出 1(1−x)a+1 的展开。所以可以尝试利用它来展开 F(x).
比方说,考虑 A1−ax 的形式可以写成幂级数 A∑n≥0(ax)n,我们可以将 1−x−x2 进行因式分解成 (1−ax)(1−bx) 的形式。
或者,也可以使用整体法,不用因式分解,直接硬套。
1.2.2. 广义五边形数
1.2.2.1. 基本公式与定理
证明部分略去不讲。
- 广义五边形数的通项公式为
- 定义欧拉函数为ϕ(x)=∞∏i=1(1−xi)五边形数定理即为ϕ(x)=∞∑i=0(−1)i⋅xi(3i∓1)2hint:ϕ(x) 的第 n 项系数就是 "将 n 拆成偶数个正整数的方案数 − 将 n 拆成奇数个正整数的方案数"。注意这里拆分出来的数字 两两不同。
1.2.2.2. 整数拆分
定义 pn 表示把 n 拆分成若干个 可以相等 的整数的方案数。由此设计出 pn 的生成函数
很容易发现有 F(x)ϕ(x)=1。于是可以构造出 ϕ(x) 然后直接多项式求逆做到 O(nlogn).
如果并不要求更优秀的复杂度的话,我们可以暴力展开第 n 项的系数(右边由于只有常数项,所以系数为零)
函数传入的值实际上是 n 减去广义五边形数。由于广义五边形数的增长速度是 n2 的,所以可以递推 p 数列,单次递推 O(√n),总复杂度 O(n√n).
1.2.3. 卡特兰数列
2. 指数生成函数(EGF)
2.1. 定义
对于一个无穷序列 {a0,a1,a2,...},定义其指数生成函数为形式幂级数:∑∞k=0ak⋅xkk!.
指数生成函数乘法的意义:🔗
2.2. 常用指数生成函数
- {1,1,1,1,1…}EGF→ex;
- {1,−1,1,−1,1…}EGF→e−x;
- {1,c,c2,c3…}EGF→ecx;
- {1,0,1,0,1,0…}EGF→ex+e−x2;
- {1,a,a2_,a3_,a4_…}EGF→(1+x)a,同时这个序列第 i 项的意义是 a 个元素的 i 排列数,也就是 C(a,i)⋅i!.
2.3. 可爱的例题们
例 1:有 8 个元素,其中有 3 个 a1,2 个 a2,3 个 a3。从中取 6 个元素,求可能的排列数。
除以阶乘相当于去除内部元素的顺序,最终将 xi 项前的系数统一提出 1i!,分子就是取 i 个元素的排列数。考虑提出 1i! 相当于给分子乘上 i!.
例 2:带标号无向连通图计数。
首先设 fi 表示 i 个点的有标号连通图个数,gi 表示 i 个点的任意图个数,那么 gi=2C(i,2).
设 fi 的指数生成函数为 F(x),gi 的指数生成函数为 G(x)。那么有
考虑证明。假设点个数为 n,分为大小为 a1,a2,…,ak 的组。首先分配标号,系数为 n!∏ki=1ai!,于是有
前面的 1/k! 是将划分出的图的标号去除。化一下柿子得
大括号那一坨是 [xn]Fk(x)。于是
可以发现上面的 Fk(x)k! 就是 eF(x) 的泰勒展开,所以有
所以求出 G(x) 后再多项式求 ln 即可得到答案。另外容易发现这个结论也可以结合 pruefer 序列应用于生成树计数。
哦哟还可以发现这也是排列与圆排列的关系。同时还可以根据这个推导错排数的指数生成函数:考虑错排就是置换环中不存在自环的排列,先构造 "置换环不存在自环的圆排列" 的指数生成函数
于是错排数的 EGF 就是 exp(−ln(1−x)−x).
例 3:给出 n,在 有哈密顿回路的 n 个点的竞赛图中等概率选出一个,求哈密顿回路个数的期望。
首先对期望进行转化,就是所有 n 个点的竞赛图中哈密顿回路数量总和除以有哈密顿回路的 n 个点的竞赛图数量。
第一个部分是比较好计算的,就是 (n−1)!⋅2C(n,2)−n,也就是枚举哈密顿回路,再枚举其它边。
而关于有哈密顿回路的 n 个点的竞赛图数量,这里有个结论:一张竞赛图有哈密顿回路的充要条件是它是强连通的。证明我翻了翻网上的一些博客,也许是没有 get 到关键,感觉有些证明有些伪,所以现在就咕咕咕了(。
设 fi 为 n 个点且强连通的竞赛图数量,可以正难则反
再移项得
右式类似卷积,用 OGF 描绘中间的组合数是不易的。但考虑 (ni)=n!i!(n−i)!,这实际上就明示使用 EGF 了!所以令
把这两个函数卷起来(注意特判 i=0 的情况)
多项式求逆即可求解 G(x).
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
2020-02-18 [学习笔记] LCT
2020-02-18 [杂题合集] 即使你读不完一本书,至少可以读完这篇营销软文吧?
2020-02-18 [学习笔记] 线性规划