浅谈快速沃尔什变换(FWT)快速莫比乌斯变换(FMT)
目录
快速沃尔什变换(FWT)
按位或卷积
按位与卷积
按位异或卷积
一点性质/优化
快速莫比乌斯变换(FMT)
按位或FMT
按位与FMT
两者比较
快速沃尔什变换(FWT)
顾名思义,这是一种对数组的变换,而且和FFT是基本思想相同,即求,“o”是一种卷积,把A、B变换为A‘、B’,使满足,最后把C‘转换回C。
沃尔什变换主要有三种:
按位或卷积
,(数组长度n默认为2的次幂)求C数组。
“浅谈”,我们就直接上公式好了。
该变换为,是按位与,显然有:
根据定义知道,暴力求该变换是的,怎么优化呢?
对于一个数组A,其下标为(0~n-1),,那么数组前一半的下标为(二进制),后一半下标为,那么对于和(),假设前者是所有下标为的数的和,那么后者一定是下标为、的数的和(、分别代指若干种01序列),
规范地说就是,把A数组割裂为前后两半,(0~n/2-1)部分构成数组A0,(n/2~n-1)部分构成数组A1(在A1中的下标变为(0~n/2-1)),那么(),
(),
所以我们得到了该算法的核心:求出和,然后遍历求出和,进而求得,
这是递推打法,类比FFT和NTT:
inline void FWTOR(int*a,int n){for(int k=2;k<=n;k<<=1)//从下往上合并for(int i=0;i<n;i+=k)for(int j=i;j<i+(k>>1);j++)a[j+(k>>1)]=(a[j+(k>>1)]+a[j])%MOD;//FWT(A)(i+n/2)=FWT(A0)(i)+FWT(A1)(i)//FWT(A)(i)=FWT(A0)(i),此时直接不管它
}
简要解释一下,原本递归到最底层后会有n个长度为1的数组,而长度为1的数组的FWT就是它本身,所以由下往上合并为长度为2、长度为4、一直到长度为n的数组,就是要求的FWT(A)。
那么逆变换怎么搞呢?
考虑倒着做整个过程,,(),
所以,,然后从上往下把它倒着转换回去:
inline void IFWTOR(int*a,int n){for(int k=n;k>1;k>>=1)//从上往下倒推for(int i=0;i<n;i+=k)for(int j=i;j<i+(k>>1);j++)a[j+(k>>1)]=(a[j+(k>>1)]-a[j]+MOD)%MOD;
}
按位与卷积
,求C数组。
和按位或很相似,相信读者们自己就能轻松推导,
该变换为:,同样的推导:
同样地,根据该变换的性质,把A分裂为A0和A1,有,(),
倒着做的时候:,
inline void FWTAND(int*a,int n){for(int k=2;k<=n;k<<=1)for(int i=0;i<n;i+=k)for(int j=i;j<i+(k>>1);j++)a[j]=(a[j]+a[j+(k>>1)])%MOD;
}
inline void IFWTAND(int*a,int n){for(int k=n;k>1;k>>=1)for(int i=0;i<n;i+=k)for(int j=i;j<i+(k>>1);j++)a[j]=(a[j]-a[j+(k>>1)]+MOD)%MOD;
}
按位异或卷积
(是按位异或),求C数组。
这个就不好搞了,一般人很难想出来,但是沃尔什大佬不一样,他想出了如下变换:
,其中表示x的二进制中1的个数取模2,也就是1的个数的奇偶性,
这个公式要倒着证:
观察上式,发现结构是00+11-01-10,而0^0=1^1=0,0^1=1^0=1;
然后有个结论:
所以原式可以继续变换:
至此,我们发现它满足了沃尔什变换的性质
浅谈快速沃尔什变换(FWT)快速莫比乌斯变换(FMT)相关推荐
- 解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 快速沃尔什变换(FWT)
1前言 在之前学完了FFT稍微码了一些题.也学习了一下NTT相关的知识之后,我觉得有必要学习一下FWT,这篇博客就是阐述我对FWT的理解的 2介绍 2.1解决的问题 对于FFT,它的过程本质上是cn= ...
- 浅谈自适应滤波器---(快速RLS算法)
在上一篇博客中(浅谈自适应滤波器)我给大家介绍了关于自适应滤波器的一些入门级的知识,并分析了常规RLS算法单次迭代的计算量级为O[N2],当阶数N增大时相应的计算量显著增大,为了将计算量级降低到O[N ...
- 快速沃尔什变换(FWT)及K进制异或卷积快速子集变换(FST)讲解
前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...
- [学习笔记]快速沃尔什变换 (FWT)
FWT的简介 一般 FWT \text{FWT} FWT用来解决一下问题: C k = ∑ i ∣ j = k A i B j C_k=\sum_{i|j=k}A_iB_j Ck=∑i∣j=kAi ...
- 【learning】快速沃尔什变换FWT
问题描述 已知\(A(x)\)和\(B(x)\),\(C[i]=\sum\limits_{j\otimes k=i}A[j]*B[k]\),求\(C\) 其中\(\otimes\)是三种位运算的其中一 ...
- 浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统
监控从来都是一个很宽泛的问题,任何可能出问题的地方都需要加入监控.全量监控的确是监控的终极目标.在搭建一套监控系统前,需要结合实际的系统情况和发展趋势进行考量.在作者看来,一套监控系统应主要由数据采集 ...
- 快速沃尔什变换(FWT) 学习笔记
最近在做多校联赛的题目,发现有一道题需要用到FWT,于是我就去学了一下.膜拜一下大神,本篇博客仅对这篇博客进行一些细节上的补充. FWT要解决的问题是 Ck=∑i⊕j=kai∗bi {C}_{k}=\ ...
- FWT / FMT 快速沃尔什/莫比乌斯变换 P4717
文章目录 前言 一.例题 二.思路与代码 1.思路 2.代码 前言 在学过FFT/NTT后,我们已经可以解决许多多项式问题了,而出题人觉得还不够 所以我们接着来处理更复杂的多项式卷积------快速沃 ...
- 《小学生都能看懂的快速沃尔什变换从入门到升天教程》(FWT / FMT / FMI)(最最严谨清晰的证明!零基础也能得学会!)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 0x00 卷积 0x01 多项式 0x02 卷积的定义 0x03 卷积的基本性质 0x04 位运 ...
最新文章
- 第十四周项目二-两个成员的类模版(2)
- [导入]VB实现SQL Server数据库备份/恢复
- oracle24550,ORA-24550 Signal Received Error From Client Based Application
- stateOffset
- 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统
- 一个Camel Multicast组件聚合策略问题的解决过程
- 数据传输服务 DTS > 数据迁移 > 从自建数据库迁移至阿里云 > 源库为MySQL > 从自建MySQL迁移至RDS MySQL
- 添加、移除事件及相关处理函数各方法
- matlab中内联,有没有一种方法可以在MATLAB中执行函数内联?
- android ndk串口触屏,Aandroid NDK开发之串口控制
- 在Pycharm中,全文搜索、替换,以及单独文件搜索、替换!
- c语言十六进制字母,c语言读取十六进制文件
- 迪赛智慧数——柱状图(堆叠极扇图):近5年各行业员工离职率
- 计算机科学技术的想象作文600,关于科学的想象作文
- 机器人总动员英语情歌_机器人总动员中英文字幕
- 计算机中大量文件需要管理怎么办,怎么处理目标文件系统文件过大
- 蓝牙射频的杂散,谐波与FCC测试解密
- 2018计算机网络MOOC第一章作业1
- 网络流三·二分图多重匹配
- 光线折射公式推导:Snell‘s Law