FWT——学习笔记
来源:互联网 发布:怎么做淘宝 编辑:程序博客网 时间:2024/06/08 03:36
什么是FWT?
我们知道普通的卷积是这样的:
我们用FFT可以加速这一过程。
现在我们把
FWT就是用于解决这种卷积的。
具体思想
考虑一个变换:
如果我们能找到这样一个变化系数
就能类似FFT一样,先转换,再乘,再逆转换。关键在
带入一下,上面那个条件其实就等价于:
直接给出构造:
⊕为与:
⊕为或:
⊕为异或:
并不知道是怎么来的,但是容易验证是对的。
这些构造都有一个重要的性质,二进制每位都是独立的,可以拆开:
下面我们就要考虑如何快速变换了,先将n补到2的次幂,每次把数列分成两半:
是不是和FFT很像啊,核心就是:
递归求解,可以做到
关于逆转换,其实很简单,直接把之前的过程反着执行一遍即可,相当于解一个二元一次方程。
下面是模板:
#include<cstdio>#include<algorithm>using namespace std;void FWT(int a[],int n,int _k){ for(int m=2;m<=n;m<<=1) for(int i=0;i<=n-1;i+=m) for(int j=0;j<=m/2-1;j++){ int t0=a[i+j], t1=a[i+j+m/2]; if(_k==1){ //xor:a[i+j]=t0+t1,a[i+j+m/2]=(t0-t1+mod)%mod; //and:a[i+j]=t0+t1; //or:a[i+j+m/2]=t0+t1; } else{ //xor:a[i+j]=(t0+t1)/2,a[i+j+m/2]=(t0-t1)/2; //and:a[i+j]=t0-t1; //or:a[i+j+m/2]=t1-t0; } } } int main(){ freopen("fwt.in","r",stdin); freopen("fwt.out","w",stdout); return 0; }
阅读全文
0 0
- FWT——学习笔记
- FWT 笔记
- [FWT] 快速沃尔什变换学习笔记
- 快速沃尔什变换(FWT) 学习笔记
- FWT——快速沃尔什变换
- FWT
- FWT
- FWT总结
- FWT 模板
- FWT板子
- bzoj4589 FWT
- fwt模版
- FWT模板
- 机器学习—学习笔记
- TC SRM518 NIM (FWT)
- 法法塔!【fft&fwt】
- PE 560 【博弈】【fwt】
- FWT 详解 知识点
- 机器学习常用算法
- 最小生成树模板
- Shader 简单的积雪效果说明
- 再不了解一下征信,你就真的out了!
- 动态执行程序
- FWT——学习笔记
- Codevs 1200 同余方程
- ASP.NET 用MultiView和View实现选项卡效果
- HTTP常用状态码对照表
- JavaScript中的正则表达式
- 基于肤色和眼睛定位的人脸检测算法——MATLAB实现
- 【python学习笔记】17:numpy数组排序
- python 重定向获取真实url
- 最大值最小化问题