其实FWT我啥都不会,反正就是记一波结论,记住就好……

具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记


现有一些卷积,形如

\(C_k=\sum\limits_{i\lor j=k}A_i*B_j\)

\(C_k=\sum\limits_{i\land j=k}A_i*B_j\)

\(C_k=\sum\limits_{i\oplus j=k}A_i*B_j\)

然后普通的FFT肯定应付不了这玩意,于是就有了FWT(快速沃尔什变换),然后我就直接写结论好了……


FWT——Or卷积

我们把多项式\(A\)(\(2^n\)项)拆成两部分\(A_0,A_1\),则有

\[FWT(A)=\begin{cases}(FWT(A_0),FWT(A_0+A_1))&,n>0\\A&,n=0\end{cases}
\]

然后上面的部分是指两部分合到一块儿

然后再给个性质

\[FWT(A)_i=\sum\limits_{j\lor i=i}A_j
\]

所以说统计子集和啥的就直接FWT一下就好了,还有个叫FMT(快速莫比乌斯变换)的,其实就是这玩意


FWT——And卷积

同样将多项式\(A\)拆开,有

\[FWT(A)=\begin{cases}(FWT(A_0+A_1),FWT(A_1))&,n>0\\A&,n=0\end{cases}
\]

其实你发现和Or卷积差不多,咋记呢?你看\(A_0,A_1\)的差别就在最高位,然后Or(\(\lor\))肯定是答案贡献到1上去了,所以是后面加,然后And(\(\land\))就反过来,然后就这么记吧……

同样的,这个卷积也有个性质

\[FWT(A)_i=\sum\limits_{j\land i=i}A_j
\]

这就相当于统计超集和了……


FWT——Xor卷积

这个东西还是要记一下的……

\[FWT(A)=\begin{cases}(FWT(A_0)+FWT(A_1),FWT(A_0)-FWT(A_1))&,n>0\\A&,n=0\end{cases}
\]

然后这个貌似没有那啥奇怪性质……


FWT讲完了,但是你不变换回来没啥用的啊……所以显然也要有IFWT

然后IFWT也比较简单

\[\lor :IFWT(A)=(IFWT(A_0),IFWT(A_1)-IFWT(A_0))
\]

\[\land :IFWT(A)=(IFWT(A_0)-IFWT(A_1),IFWT(A_1))
\]

\[\oplus :IFWT(A)=(\dfrac{IFWT(A_0)+IFWT(A_1)}{2},\dfrac{IFWT(A_0)-IFWT(A_1)}{2})
\]


然后贴个板子好了……

  1. void div(int &x){x=1ll*x*inv%p;}
  2. void FWT_xor(int *a,int n,int type){
  3. for (int i=2;i<=n;i<<=1){
  4. for (int j=0;j<n;j+=i){
  5. for (int k=0;k<i>>1;k++){
  6. int x=a[j+k],y=a[j+k+(i>>1)];
  7. a[j+k]=(x+y)%p,a[j+k+(i>>1)]=(x-y+p)%p;
  8. if (!~type) div(a[j+k]),div(a[j+k+(i>>1)]);
  9. }
  10. }
  11. }
  12. }
  13. void FWT_and(int *a,int n,int type){
  14. for (int i=2;i<=n;i<<=1){
  15. for (int j=0;j<n;j+=i){
  16. for (int k=0;k<i>>1;k++){
  17. (a[j+k]+=type*a[j+k+(i>>1)])%=p;
  18. if (a[j+k]<0) a[j+k]+=p;
  19. }
  20. }
  21. }
  22. }
  23. void FWT_or(int *a,int n,int type){
  24. for (int i=2;i<=n;i<<=1){
  25. for (int j=0;j<n;j+=i){
  26. for (int k=0;k<i>>1;k++){
  27. (a[j+k+(i>>1)]+=type*a[j+k])%=p;
  28. if (a[j+k+(i>>1)]<0) a[j+k+(i>>1)]+=p;
  29. }
  30. }
  31. }
  32. }

浅谈算法——FWT(快速沃尔什变换)的更多相关文章

  1. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  2. FWT快速沃尔什变换学习笔记

    FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...

  3. [学习笔记]FWT——快速沃尔什变换

    解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先 ...

  4. 知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)

    知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j ...

  5. 浅谈FFT(快速傅里叶变换)

    前言 啊摸鱼真爽哈哈哈哈哈哈 这个假期努力多更几篇( 理解本算法需对一些< 常 用 >数学概念比较清楚,如复数.虚数.三角函数等(不会的自己查去(其实就是懒得写了(¬︿̫̿¬☆) 整理了一 ...

  6. 初学FWT(快速沃尔什变换) 一点心得

    FWT能解决什么 有的时候我们会遇到要求一类卷积,如下: Ci=∑j⊕k=iAj∗Bk\large C_i=\sum_{j⊕k=i}A_j*B_kCi​=j⊕k=i∑​Aj​∗Bk​此处乘号为普通乘法 ...

  7. FWT快速沃尔什变换——基于朴素数学原理的卷积算法

    这是我的第一篇学习笔记,如有差错,请海涵... 目录 引子 卷积形式 算法流程 OR卷积 AND卷积 XOR卷积 模板 引子 首先,考虑这是兔子 数一数,会发现你有一只兔子,现在,我再给你一只兔子 再 ...

  8. 浅谈算法——线段树之Lazy标记

    一.前言 前面我们已经知道线段树能够进行单点修改和区间查询操作(基本线段树).那么如果需要修改的是一个区间该怎么办呢?如果是暴力修改到叶子节点,复杂度即为\(O(nlog n)\),显然是十分不优秀的 ...

  9. 浅谈算法——Manacher

    字符串算法在各大高级比赛中均有用到,所以,学习好字符串算法对我们而言十分重要.那么,今天我们就给大家介绍一个快速求回文串的算法,Manacher算法,我们也习惯性叫它马拉车算法. 一.引入 首先我们要 ...

随机推荐

  1. 4. 基本TCP套接字编程

    基本函数接口 socket函数 #include <sys/socket.h> int socket(int family, int type, int protocol); 成功时返回一 ...

  2. windows下在eclipse上远程连接hadoop集群调试mapreduce错误记录

    第一次跑mapreduce,记录遇到的几个问题,hadoop集群是CDH版本的,但我windows本地的jar包是直接用hadoop2.6.0的版本,并没有特意找CDH版本的 1.Exception ...

  3. EasyUI+Python-flask实现CRUD应用

    1.需求分析 需求:应用easyui制作前端表格数据显示,flask制作后端路由 环境搭建略 2.easyui前端实现 2.1 easyui是前端实用的一个框架,这里我们要实现的是easyui的CRU ...

  4. linux内核的三种主要调度策略

    linux内核的三种主要调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用, ...

  5. 3种方法判断手机浏览器跳转WAP手机网站

    随着移动设备的普及,企业的网络宣传已经不能局限在PC端,而需要同时在移动端有所建树.对于公司网站来说,以前都是做的PC端的,当然手机等移动端也可以访问,但是用户体验肯定不如完全适合的手机端来的方便.我 ...

  6. SpringBoot快速HelloWorld入门

    1.新建maven项目 2.pom.xml 里添加SpringBoot所依赖的jar包 <parent> <groupId>org.springframework.boot&l ...

  7. OpenCV——PS滤镜算法之 Ellipsoid (凹陷)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  8. Objective-C Runtime(二)消息传递机制

    在对象上调用方法是包括Objective-C的众多语言都具备的功能.但在Objective-C中,这个术语叫『传递消息』(pass a message).『消息』有「名称」(name)或「选择子」(s ...

  9. 【HNOI 2002】 营业额统计

    [题目链接] 点击打开链接 [算法] 观察式子 : 最小波动值 = min{|该天营业额 - 之前某天的营业额|} = min{该天营业额 - 该天营业额的前驱,该天营业额的后继 - 该天营业额} 用 ...

  10. 【前端】Element-UI 省市县级联选择器 JSON数据

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/element_cascader.html 不想自己处理的就直接下载吧 http://shamoyuu.bj.bce ...