目录

快速沃尔什变换(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)相关推荐

  1. 解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  2. 快速沃尔什变换(FWT)

    1前言 在之前学完了FFT稍微码了一些题.也学习了一下NTT相关的知识之后,我觉得有必要学习一下FWT,这篇博客就是阐述我对FWT的理解的 2介绍 2.1解决的问题 对于FFT,它的过程本质上是cn= ...

  3. 浅谈自适应滤波器---(快速RLS算法)

    在上一篇博客中(浅谈自适应滤波器)我给大家介绍了关于自适应滤波器的一些入门级的知识,并分析了常规RLS算法单次迭代的计算量级为O[N2],当阶数N增大时相应的计算量显著增大,为了将计算量级降低到O[N ...

  4. 快速沃尔什变换(FWT)及K进制异或卷积快速子集变换(FST)讲解

    前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...

  5. [学习笔记]快速沃尔什变换 (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=k​Ai ...

  6. 【learning】快速沃尔什变换FWT

    问题描述 已知\(A(x)\)和\(B(x)\),\(C[i]=\sum\limits_{j\otimes k=i}A[j]*B[k]\),求\(C\) 其中\(\otimes\)是三种位运算的其中一 ...

  7. 浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

    监控从来都是一个很宽泛的问题,任何可能出问题的地方都需要加入监控.全量监控的确是监控的终极目标.在搭建一套监控系统前,需要结合实际的系统情况和发展趋势进行考量.在作者看来,一套监控系统应主要由数据采集 ...

  8. 快速沃尔什变换(FWT) 学习笔记

    最近在做多校联赛的题目,发现有一道题需要用到FWT,于是我就去学了一下.膜拜一下大神,本篇博客仅对这篇博客进行一些细节上的补充. FWT要解决的问题是 Ck=∑i⊕j=kai∗bi {C}_{k}=\ ...

  9. FWT / FMT 快速沃尔什/莫比乌斯变换 P4717

    文章目录 前言 一.例题 二.思路与代码 1.思路 2.代码 前言 在学过FFT/NTT后,我们已经可以解决许多多项式问题了,而出题人觉得还不够 所以我们接着来处理更复杂的多项式卷积------快速沃 ...

  10. 《小学生都能看懂的快速沃尔什变换从入门到升天教程》(FWT / FMT / FMI)(最最严谨清晰的证明!零基础也能得学会!)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 0x00 卷积 0x01 多项式 0x02 卷积的定义 0x03 卷积的基本性质 0x04 位运 ...

最新文章

  1. 第十四周项目二-两个成员的类模版(2)
  2. [导入]VB实现SQL Server数据库备份/恢复
  3. oracle24550,ORA-24550 Signal Received Error From Client Based Application
  4. stateOffset
  5. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统
  6. 一个Camel Multicast组件聚合策略问题的解决过程
  7. 数据传输服务 DTS > 数据迁移 > 从自建数据库迁移至阿里云 > 源库为MySQL > 从自建MySQL迁移至RDS MySQL
  8. 添加、移除事件及相关处理函数各方法
  9. matlab中内联,有没有一种方法可以在MATLAB中执行函数内联?
  10. android ndk串口触屏,Aandroid NDK开发之串口控制
  11. 在Pycharm中,全文搜索、替换,以及单独文件搜索、替换!
  12. c语言十六进制字母,c语言读取十六进制文件
  13. 迪赛智慧数——柱状图(堆叠极扇图):近5年各行业员工离职率
  14. 计算机科学技术的想象作文600,关于科学的想象作文
  15. 机器人总动员英语情歌_机器人总动员中英文字幕
  16. 计算机中大量文件需要管理怎么办,怎么处理目标文件系统文件过大
  17. 蓝牙射频的杂散,谐波与FCC测试解密
  18. 2018计算机网络MOOC第一章作业1
  19. 网络流三·二分图多重匹配
  20. 光线折射公式推导:Snell‘s Law

热门文章

  1. java 正则 中文_Java使用正则表达式(regex)匹配中文实例代码
  2. Qt 的 linuxFB XCB KMS XCB Wayland
  3. 计算机图形学入门(十三)-光线追踪(基本原理)
  4. html id命名规范,关于Html class id 命名规范
  5. 相似度度量的不同方法
  6. 【摩斯电码】我是如何通过一张小纸条渗透进了妹子的心
  7. 绝对值函数可导点的判断
  8. 系统分析师学习笔记(十七)
  9. emule服务器有响应,eMule刚连上服务器就断请教为什么
  10. 解决LinuxMINT上连接ChinaUnicom问题