多项式计数
Matrix - Tree 定理
需要知道的一些线性代数知识
线性相关
考虑
行列式
对于一个
性质
- 将第
列 加到第 列, 不变。 - 交换两列,行列式值取反。
- 某列全体
, 变大 倍。
以上三个可以根据定义得到,并且对于行也成立。
同时行列式满足
计算方式
观察三角矩阵的
考虑如果做一个类似高斯消元的过程让行列式变成三角矩阵。
可以讲一下大概怎么做,其实是非常平凡的,我们考虑一列一列消。对于第
先消第一行,那么对于第二行加上第一行所有的数
然后对于第二列做一样的操作,会发现因为前面都是
在需要取模非质数的时候,可以进行两行辗转相减,不做赘述。
矩阵树定理
对于图
定义
令
如果有重边同样成立,将
而且
证明
证明是比较重要的, 因为后面题目需要用到一些证明的思想。
定义矩阵
那么有
令
第二部运用了 Cauchy–Binet formula,即对于
引理:
如果
也就是说
用法以及技巧
带权树
矩阵树可以求的是:
同样还可以求:
可以把边的权值视为有
一些 DFT / IDFT 的算法
学多项式是一个很有意思的过程。开始的时候你会学习 FFT / NTT 知道怎么样通过 DFT / IDFT 快速计算多项式的各种操作。然后你会深入学习多项式的各种运算,比如求逆、
Bluestein
一般在做 DFT 的时候,会将给定的多项式变成
给定
转化,对于
通过这个来整理一下式子,能够得到:
后面两个东西看起来很像一个卷积的形式,但是不标准,因为和事
这就是标准卷积形式,其中的
注意在小技巧部分,如果用
Bluestein 还有一个优势就是可以做等比多点求值,且是
I:JDU-4656
题面
给定
Sol
先推一下式子:
令
对于前面那个东西,回顾一下刚才的东西,令
注意这题要 MTT。
单位根反演
核心式子:
证明需要回顾一下单位根的性质,在多项式小记里面有,都是非常基础的。
- 如果
,此时有 右边等于 等于左边。 - 如果
,此时右边是等比数列求和,结果为 ,分子等于 且分母不等于 。结果就是 。
这个是处理形如“只保留某个数的倍数项”问题的利器。直接来看例题。
II:白兔的 ?难
cnblogs 你这屏蔽我?
题面
给定
Sol
进行单位根反演:
套路地交换求和项,然后进行一些提取。
对于 DFT / IDFT 比较熟悉的选手能够看出来这部分就是一个 IDFT 过程(因为这刚好是一个
来看一道综合一点的套路题,也是可爱的兔子。
III:白兔之舞
题面
给定
Sol
先考虑固定长度
这里已经看到胜利的曙光了,但是这个题有点问题在于并没有保证
感觉这题的评分点全在套路上了,推式子就是纯套路。
循环卷积
这部分的定义需要注意一下,不要和普通的线性卷积混淆。循环卷积如其名,为:
我们一般写 DFT 的时候一般会有这样一步操作:
for(;n<sizX+sizY;n<<=1);
也就是说平时的时候我们做 DFT / IDFT 的时候实际上我们是取模了
IV:P4191
题面
给定两个
Sol
这时候上面 naive 的做法就不太行了,需要知道一个定理:
两个
这个定理在之前 FFT 的时候,我们是用“点表示法”来理解的。现在我们还可以用单位根反演来证明它,这里就先暂时略过。这个定理的用处在于,如果我们能够求出来
回顾我们在做 DFT 的时候要做什么,在
但是这个题目还有一个条件,保证输入的
在正常的 FFT 中,我们有两个个关键的式子:
也就是说,我们通过把多项式分成奇偶两个部分,让两个部分分别只算
这个思想是可以推广的,对于一个普通的
如果
例题
P3746
题面
求
其中
Sol
如果你跟我一样一眼看不出答案就老老实实单位根反演,得到的结果是:
同样发现这是一个反演的式子,令
Loj6475
题面
给定
多测,
Sol
显然要拆贡献,得到:
注意到因为模数是给出来的,则
P5591
题面
求:
其中
Sol
这题需要一定的转化,向下取整式非常头疼的,向下取整在莫反里面用到的比较多,但这个题和数论函数关系不大。知道
后面的部分经典循环卷积,题目很善良地给了
各种 FFT 的套路 + 一些线性代数
FFT 套路
AVL-Tree
转移:
求
Buying snacks
转移:
分情况讨论得到的结果。
由于
考虑矩阵快速幂:
相当于求
复杂度双
Poland Ball
转移:
即
矩阵快速幂同样可以双
令
有
得到
Unlucky string(改)
给定
令
令
验证起来是比较简单的,要学习正推。
答案为
优化齐次线性递推方程
若
若
直接用矩阵快速幂大概是
但是还是可以构造出来矩阵:
特征多项式
记:
其实就是转移矩阵
对于上面式子左侧的结果就是:
用代数余子式计算,能够得到这个行列式算出来就是上面的
Cayley - Hamilon 定理
有
证明是超纲的,有空补。
优化
设
有
令
有
则
这个是可以
分治下去,可以做到
更多多项式技巧
多项式平移
若
想要求后面的东西
其中
FFP
FFP 指下降幂多项式。是形如
平移
有下降幂的二项式定理:
同理
连续点值 FFP 系数
FFP 是处理连续点值的利器,包括连续点值求和等等。考虑有
有
根据上面那个所以综合得到
如果是给定
StirlingNumber
具体内容在这里曾经写过。这里讨论如何快速求一行、一列的 StirlingNumber。
第一类 - 行
转求
第二类 - 行
可以用类似的求下降幂系数,还可以用通项公式,即
这就是一个简单的标准卷积的形式。
第一类 - 列
有
考虑到斯特林数的意义,可以得到答案就是
第二类 - 列
同理,有其 EGF 为
Stirling 反演 + snake oil method
Stirling 反演
反演公式
证明不是非常难,代入形式变量
有
定理
Part I
证明:把两个函数看作向量,那么
显然将其中的第一类和第二类斯特林数对换也是成立的。
Part II
证明:
其中因为
例题 TC-13444
给定
- 任意两行不一样
- 任意两列不一样
求方案数
固定行,对于前
可以不用多项式算 Stirling。
带权连通图计数问题
- 法 1:EGF
定义
注意到其中
直觉上告诉我们
定义
因此
Q.E.D.
那么答案
有
- 法 2:Stirling 反演
定义对于
观察
证明:考虑每一个
要求的
剩下就在求
一般的,用 dp 来解决,令
经典枚举
这部分只能用 Stirling 反演。前面的定义都是一样的,现在目标是算出来
令
但是看一看这个状态情况,状态就是
优化(比较复杂)
这部分是完全 dp。
先写出来:
“思维不要被限制”
观察
考虑后面
其等价于这样一个问题:
先把所有点分成
这时候可以定义一个新的 dp。令
初始
注意到是块内总边数为
例题
给定
定义
注意到可以枚举
不相等计数问题
选择
令
考虑构造
那么答案就是
定义一个集合
再次转化,其中注意到
最后面一堆相当于是在每一个划分里面都要构造联通图,切贡献是
直接用状压 dp,可以做到
这个是一个子集卷积的
其实这个题和 Stirling 反演没有什么关系,但是注意到这个容斥过程。在
Snake Oil Method
看到名字的时候觉得莫名其妙的,去查了一下才知道 snake oil 就是万金油的意思。
snake oil method 就是一个对付组合数求和的非常厉害的工具。
That one method is capable of handling a great variety of sums involving binomial coefficients, but there’s nothing special about binomial coefficients in this respect.
看一个例子:
如果先尝试手玩一下可能能发现这就是斐波那契数列。下面来看一下 Snake Oil 怎么解。
先构造出来一个多项式
会发现得到的结果就是斐波那契的母函数,后面也就不继续下去了。也就是说
Snake Oil 的基本方法就是放到生成函数中,交换求和顺序,然后尝试解出来里面的东西。有一些比较常见的代换式可以用到:
尝试解:
这个就不好一眼看出来了
这样就是比较方便求出来
综合习题、欧拉数、IDFT+
综合习题
数幂求和 I
给定
方法 0
用斯特林可以得到:
这样只有一个
方法 1
令
用多项式求逆,注意的是两个的常数项都是
与伯努利数的关系
前面的
方法 2
让我想到梅加强老师的《数学分析》当中提到的一个技巧——做差。
考虑:
对于
幂数求和 II
改一下:
直接用 EGF 可以得到一个:
但是这个并不好做。
考虑直接用 OGF,能够得到:
定义
注意到
这个就是
应用
对于一个多项式
如果交换求和顺序就有答案:
这个就是刚才的东西。
例 1
有多少个非负整数
考虑先枚举出来前面的
令
前面都是好求的,关键在于后面的东西,令
代回:
定义
定义
因此后面的东西就是
P4002
IDFT 的拓展
回顾 Bluestein 我们可以给定系数求点值,而且并不在意长度是多少。观察我们得到的式子
通过卷积可以求出来
不过这个做法是不可逆的。原因是我们把所有的点值是进行平移过的,也就是说单纯给定点值是不知道
点值 系数
已知多项式在
用 Lagrange 差值有:
这个式子可以改写成,令
只需要证明
问题分成三步:
1. 求
分治 FFT,有显然的
2. 求
3. 求
把
如果定义一个多项式
因此总复杂度是
浅看了一个随机点值,那个也是可以做的,需要知道非等比求点值(Bluestein 无法使用),然后思路基本一样,复杂度是
欧拉数
有比较显然的递推:
考虑如何快速单点求值和求一行。
下面默认求第
有一个比较巧妙的观察:
因此:
用斯特林的通项公式展开,并且做一些替换:
最后一步考虑组合意义。相当于
这个公式可以快速算出来单点。其中
注意到:
如果把这个带进去,能够有:
这个是可以 FFT 的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下