FMT是快速莫比乌斯变换,FWT是快速沃尔什变换。
他们两个是用来解决位运算卷积问题的。
详细点来说,已知两个多项式 
需要快速求 
当 
当 
当 
先摆出板题:
P4717 【模板】快速莫比乌斯/沃尔什变换 (FMT/FWT)
这道题里面只有与运算,或运算和异或运算,我们一个一个看。
我们令一个多项式 
下面的所有描述都假设 
一个多项式 
两个多项式 
对于两个自然数 
与运算
首先我们定义一个关于多项式的函数 
简单来说,就是所有“包含”
我们的目标就是算出 
显然我们就可以在 
正变换
显然,这样的时间复杂度我们不太可以接受。
所以就会有一个递归公式: 
正变换递归公式证明
采用数学归纳法。
当 
假设 
类比分治的思想,我们将一个区间分成两段,则只需要计算“跨越”中点的贡献,两边进行分治即可。
现在我们想要计算的就是 
对于一个下标 
仔细看这个 
至此,我们可以在 
相乘
首先有一个结论:
逆变换
现在我们知道了 
我们定义 
我们可以从 
和暴力 
显然,万恶的出题人表示无法接受。
所以还是有一个递归公式: 
逆变换递归公式证明
首先我们根据数学归纳法证明 
再进行数学归纳法证明 
当 
根据定义展开: 
或运算
其实这里和与运算差不多,会的小伙伴可以忽略。
我们还是定义一个关于多项式的函数 
简单来说,就是所有 
我们的目标就是算出 
显然我们就可以在 
正变换
显然,这样的时间复杂度我们不太可以接受。
所以就会有一个递归公式:
正变换递归公式证明
采用数学归纳法。
当 
假设 
类比分治的思想,我们将一个区间分成两段,则只需要计算“跨越”中点的贡献,两边进行分治即可。
现在我们想要计算的就是 
对于一个下标 
仔细看这个 
所以这个公式显然是正确的。
至此,我们可以在 
相乘
首先有一个结论:
逆变换
现在我们知道了 
我们定义 
我们可以从 
和暴力 
显然,万恶的出题人表示无法接受。
所以还是有一个递归公式: 
逆变换递归公式证明
首先我们根据数学归纳法证明 
再进行数学归纳法证明 
当 
根据定义展开: 
异或运算
这里就不是 FMT 了,就是 FWT 了。
我们还是定义一个关于多项式的函数 
我们的目标还是算出 
显然我们就可以在 
正变换
这个复杂度我都看不下去了。
所以又会有一个递归公式: 
正变换递归公式证明
采用数学归纳法。
当 
假设 
类比分治的思想,我们将一个区间分成两段,则只需要计算“跨越”中点的贡献,两边进行分治即可。
先来考虑 
对于两个数字 
即 
所以实际上 
同样,
只是这个时候要注意,因为 
即 
相乘
还是有一个结论:
考虑所有 
如果某一位 
如果某一位 
综上所述,
所以说,我们就可直接将 
逆变换
现在我们知道了 
定义递归公式 
现在我们想要证明 
逆变换递归公式证明
首先我们根据数学归纳法证明 
再进行数学归纳法证明 
当 
根据定义展开: 
代码放上: