快速沃尔什变换
(本文转载自 桃酱的算法笔记,原文戳 链接,已获得作者授权)
简介
沃尔什转换(Walsh Transform)是在频谱分析上作为离散傅立叶变换的替代方案的一种方法。——维基百科
其实这个变换在信号处理中应用很广泛,fft 是 double 类型的,但是 walsh 把信号在不同震荡频率方波下拆解,因此所有的系数都是绝对值大小相同的整数,这使得不需要作浮点数的乘法运算,提高了运算速度。
所以,FWT 和 FFT 的核心思想应该是相同的,都是对数组的变换。我们记对数组
那么 FWT 核心思想就是:
我们需要一个新序列
我们先正向得到
然后逆向运算得到原序列
在算法竞赛中,FWT 是用于解决对下标进行位运算卷积问题的方法。
公式:
(其中
FWT 的运算
FWT 之与(&)运算和或(|)运算
与运算和或运算的本质是差不多的,所以这里讲一下或运算,与运算也是可以自己根据公式 yy 出来的。
或运算
如果有
现在要得到
我们按照定义,显然可以构造
那么显然会有
那么我们接下来看
首先肯定不能枚举了,复杂度为
我们把整个区间二分,其实二分区间之后,下标写成二进制形式是有规律可循的。
我们令
其中 merge 表示像字符串拼接一样把它们拼起来,
这样我们就通过二分能在
接下来就是反演了,其实反演是很简单的,既然知道了
与运算
与运算类比或运算可以得到类似结论
异或运算
最常考的异或运算。
异或的卷积是基于如下原理:
若我们令
对于
公式如下:
结论:
同或运算
类比异或运算给出公式:
例题
给出一个椭圆
这是一道比较不裸的题,出题人提供了详细的英文题解,具体请见 此链接。
贡献者:@nocriz@BinDir0@mgt@xyf007@lonlyn@Ir1d@TrisolarisHD
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用