多项式的计算(下)
本文约 12700 字。
Key Words:拉格朗日反演,转置原理,简易多项式复合,下降幂多项式,Chirp Z-Transform,Bluestein 算法,点值变换,位运算卷积,子集卷积,集合幂级数,高维幂级数
Todo:多元拉格朗日反演
转置原理
前文已经介绍过线性算法的概念,本节考虑线性算法的转置,并阐明一对互为转置的算法之间有何关系。
线性算法的转置
对于两个线性算法
,记他们的转移矩阵为 ,若 ,则称 互为转置。 初等矩阵
以下三种矩阵称为初等矩阵:
- 将单位矩阵
的第 行交换的矩阵。该矩阵左乘一个向量的效果为,将该向量的第 位交换。 - 将
从 改为 的矩阵。该矩阵左乘一个向量的效果为,将该向量的第 位乘以 。 - 将
从 改为 的矩阵。该矩阵左乘一个向量的效果为,将该向量的第 位加上第 位的 倍。
容易发现,初等矩阵的转置仍然是初等矩阵。具体地:
将向量的第
位交换:转置后不变。 将向量的第
位乘以 :转置后不变。 将向量的第
位加上第 位的 倍:转置后,将向量的第 位加上第 位的 倍。
- 将单位矩阵
转置定理
转置定理给出了互为转置的两个线性算法之间的转化方法。
接下来,考虑如何由线性算法
对于矩阵
根据转置定理,有
贡献图
可以认为,线性算法维护一个含
将所有“修改”视为新建。即:修改某个变量时,为它创建一个新的“版本”,同时保留旧版本不删除。下图展示了一个例子:
建立一张有向图
图中的每条边代表一个操作,我们没有说明操作的计算顺序,但可以推断出:计算顺序一定是拓扑序。
如何对
有了贡献图,分析转置算法时就方便多了。
DFT 的转置*
仅用于常数优化
DFT 和 IDFT 的转移矩阵是对称的,故它们的转置是其自身。即
原版 DFT 要先 bitrev(将序列编号二进制取反)再计算,转置后的
下面介绍将 DFT
的分治算法转置的具体方法。分治计算时,最小操作单元具有如下形式(见“单位根复用”)
加法卷积的转置
数列
考虑其转置算法
接下来用
多点求值
- 给出
次多项式 和常数 ,对 求各个 。
考虑其转置算法
将
对于分治区间
,维护分母 与分子 。将
填写到叶节点 。自底向上分治,处理
时,记 :最终,计算
即可得到答案。
将该线性算法
与输入( )无关,只和算法的转移矩阵有关,为常量,先用分治 FFT 预处理。输入
,计算 。自顶向下分治,对于区间
, 的贡献图为 将其转置, 的贡献图为最终得到的各个
即为答案。
值得留意的是,由于顺序颠倒,在
复杂度
- 例题 6.1.4. Cometoj1179 真实无妄她们的人生之路
拉格朗日反演
基本概念
形式幂级数的复合逆
对于形式幂级数
,若 ,且 ,则称 为 的复合逆。记为 。复合逆的性质
- 复合逆是对称的,即
当且仅当 。 - 形式幂级数
满足 , ,则它拥有唯一的复合逆。
- 复合逆是对称的,即
证明:
性质一:令
易知要么
性质二:设
形式洛朗级数
引入负次数,
称作形式洛朗级数,其中 为有限值。
引入有限的负次数后,幂级数的乘法(数列的加法卷积)仍然容易定义。
原先
注:若涉及到负无穷多次项,某些收敛的性质可能失效。
如尝试将
写成封闭形式,若缩写为 ,再展开成 ,显然错误。
一元拉格朗日反演
拉格朗日反演指明了提取复合逆的一项系数的方法,这是为数不多的能从封闭形式中提取系数的方法之一。
引理(形式留数)
对于无常数项,有一次项的整式
,有
证明:当
当
此处构造
引理
对于无常数项,有一次项的形式幂级数
和任意洛朗级数 ,有
证明:记
拉格朗日反演
形式幂级数
无常数项,有一次项,则(扩展)
为形式洛朗级数,有
证明:
令
即可得到经典情况。
另类拉格朗日反演
形式幂级数
无常数项,有一次项,则 (扩展) 为形式洛朗级数,有
证明:
令
即可得到经典情况。 对于另类拉格朗日反演,分歧在于得到
的方式:构造时不求导,而直接将 乘上去。
两者比较,拉格朗日反演的形式简单,便于推导;另类拉格朗日反演证明思路直接,且能处理
实际计算时,可以将定理改写成
例题 6.1.5. 幂的横截
已知
互为复合逆,给出 。对 分别求出 。
Solution:记
只需计算
进一步地,若
没有复合逆,可能有以下两种情况: 情况一,
的最低次项次数 ,记 ,那么 就有复合逆。 只在 时有值,故对 计算幂的横截即可。 情况二,
,记 , ,转化为正常情况或情况一。对 计算幂的横截,最后 ,二项式定理展开后可以卷积。
- 例题 6.1.6. Luogu7445「EZEC-7」线段树(简化版)
多项式复合
简易多项式复合
右复合
给出
次多项式 ,计算 的各项系数。
提取系数得
记
差卷积计算即可,复杂度
右复合
给出
次多项式 ,计算 。
配方得
右复合
或给出
次多项式 ,计算 , 的前 项系数。
根据
复合
- 右复合
此外,我们可以在
参考:
右复合 短有理分式
给出多项式
以及短多项式 (长度为常数),求 的前 项。
先解决短有理整式,即求
可以分治 FFT 解决,对于分治区间
若加入分母
右复合
(其中右复合 G 容易计算)给出多项式
,求 的前 项。
将
右复合
给出多项式
,计算 的前 项系数。
只需要对每个
分治 FFT 即可。复杂度
Bostan–Mori 算法
它的一个更初步的应用是求线性递推的远处项,推荐先学习《线性递推》一节。
Bostan–Mori 算法可用于提取二元分式的一行
上下同乘
递归层数为
多项式复合
给出多项式
Bostan–Mori 算法可
多项式复合逆
给出
【例题6.1.5】利用复合逆解决了“幂的横截”,结论是
这将目标转化为“幂的横截”,记
一元多项式的其他常见算法
牛顿级数与下降幂多项式
基
多项式序列
满足 是 次首一多项式。称这样的一组多项式为基。
例如
基表示
对于任意多项式
和任意基 ,记 的次数为 ,总能找到一个系数序列 使得 这种表示 的方法称作在基 上的表示。
证明:找出
我们不仅可以用方幂
牛顿级数
形如
的多项式称为牛顿级数。下降幂多项式
形如
的多项式称为下降幂多项式。
对牛顿级数
若要计算两个牛顿级数的乘法,可以先转换为点值,让点值相乘,再转换为系数。
对于下降幂多项式,由于
与普通多项式相转化时,需要快速插值或求值,复杂度
例题 6.1.7.
拉格朗日插值2给定一个不超过
次的多项式 的 个点值 ,和一个正整数 ,求 。答案对
取模, , 。
Solution:首先将
Chirp Z-Transform
给出
- 引理:
。
利用该引理,可以构造卷积:
记
注:各个
可以两次前缀积计算,避免快速幂,以减小常数。
任意长度 DFT/IDFT:Bluestein 算法
循环卷积
两个数组
的长度为 的循环卷积是一个新的数组 ,其中
循环卷积等价于
定理
长度为
的 FFT 在计算长度为 的循环卷积。
证明:
FFT 计算的是
应用单位根反演
即为循环卷积。或对循环卷积定义式进行单位根反演,可以从另一个方向验证。
我们用 FFT 计算多项式乘法时,会“选择足够多的点值”,多于两多项式的次数之和。虽是循环卷积,由于卷积数组够长,实际上没有溢出,和加法卷积等效。
前文的 FFT 算法只能处理长度
注意到 DFT 相当于对
位运算卷积与集合幂级数
点值变换的构想
前文对任意二元运算
点值变换
二元运算
定义域、值域均为 。若存在线性变换
,使得对于任意数组(其中点表示点积)则称
为 卷积对应的点值变换。
点值变换将卷积转化为点积。注意到点乘具有交换律、结合律,若
加法卷积并不满足这里说的“定义域、值域均为
”,但 FFT 计算的其实是长度为 的循环卷积,其中下标的运算 符合定义。
如何设计我们想要的线性变换?设
又根据
对比系数,再由序列
我们需要构造矩阵
例如,对于长度为
符合公式。
位运算卷积
先约定一些必要的记号。
位表示
记位的大小为
(其中 ),将自然数 拆成 的形式,其中 ,则称 为 的位表示。位运算
有一系列二元运算
,其中 定义域和值域为 。自然数 的位表示为 ,计算 ,位表示 对应的数为 ,则称 通过位运算得到 。这种位运算可以记作二元运算 。
定义为了一般性稍显冗杂。实际应用中,多数情况有
例:按位与(
)、按位或( )、按位异或( )的位大小均为 ,位内运算 值域均为 。三者的位内运算的取值表为
位运算卷积的点值变换
对于一个(值域有限的)位运算
记
由于位运算直接各个位之间互不干扰,易知
为了从点值变回系数,我们还需要
- 定理
证明:证法和“多元反演”一致。
记
已知位运算
记最高位为第
考虑计算的复杂度,在位运算卷积中
计算
经典位运算卷积
记位矩阵为
- or 卷积
扩张成完整的变换系数
- and 卷积
扩张成完整的变换系数
- xor 卷积
1 | const int |
计算 or 卷积、and 卷积的点值变换的算法称作快速莫比乌斯变换(FMT),计算 xor 卷积的点值变换的算法称作快速沃尔什变换(FWT)。
- 例题 6.1.8. CF449D Jzzhu and Numbers
扩展位运算卷积
将位运算卷积扩展到位大小
- 高维 max 卷积(将按位或扩展为每一位取 max)
构造
- 高维 min(将按位与扩展为每一位取 min)
构造
- 不进位加法卷积(将按位异或扩展为每一位相加模
)
在每个位内是循环卷积,若单位根存在,根据 DFT/IDFT,有
- 例题 6.1.9. CF1103E Radix sum
子集卷积
将
子集卷积
定义序列
的子集卷积为 ,其中
这和前文定义的“
有多少对有贡献的
考虑使用卷积知识加速计算。直接套用前面学习的或卷积只能求
注意到
取
(子集顺序的)全在线子集卷积
是 的子集卷积。在你正确地对于所有 计算出 后才能得到 的值。计算 。
按照
相当于按照
- 例题 6.1.10. Luogu4221 [WC2018] 州区划分
集合幂级数
集合幂级数
定义
由这样的 构成的形式幂级数称为集合幂级数。
位数为
集合幂级数的单位元为
容易定义集合幂级数的乘法逆、有理次幂。此外,仍可用无穷求和定义指数和对数:
与经典形式幂级数不同的是,集合幂级数有“点值”,也就是点值变换后得到的占位多项式。这为计算带来了很大便利,比如说,若要计算乘法逆,只需将点值占位多项式取倒数,再变换回去。
- 例题 6.1.11. Luogu6570 [NOI Online #3 提高组] 优秀子序列
多元多项式
二元多项式乘法
- 给出二元多项式
, , 的最大次数分别为 ,计算两者的乘积 。
记
考虑如何计算。将
复杂度
多元多项式乘法
我们有两个多元多项式
和 ,希望计算记
,希望得到 的算法。
在高维加法卷积中,由于每一维度上次数都会翻倍,所以实际计算系数总量是
下面给出一个
将一组下标
这样就把多维映射到了一维上。
此时,下标
模仿子集卷积,考虑设置一个合适的占位多项式来辅助判定进位,将错误的贡献分流除去。构造占位函数
不进位,则 。 进位,则 。
这样,我们计算二元多项式
剩下的问题就是找到一个合适的
令
在实现时,我们需要计算
多元多项式的求导与牛顿迭代
我们已经把多元多项式乘法转化为二元多项式
观察那些被去除的贡献,由于产生了进位,他们分布于比
我们考虑完整的二元多项式(即每次乘法后不进行去除),以
- 例题 6.1.12. Uoj#596. 【集训队互测2021】 三维立体混元劲