FWT 学习笔记

FWT学习笔记

好久以前写的,先粘上来

定义数组

(n=2^k)
(A=[a_0,a_1,a_2,a_3,...,a_{n-1}])
(A_0=[a_0,a_1,a_2,...,a_{frac n 2-1}])
(A_1=[a_{frac n 2},a_{frac n 2+1},..,a_{n-1}])
(A_0)为没有最高位的部分,(A_1)为有二进制最高位的部分
(A)可以用(A={A_0,A_1})表示

定义运算

(A+B=[a_0+b_0,a_1+b_1,...,a_n+b_n]={A_0+B_0,A_1+B_1})
(A-B=[a_0-b_0,a_1-b_1,...,a_n-b_n]={A_0-B_0,A_1-B_1})
(A*B=[a_0*b_0,a_1*b_1,...,a_n*b_n]={A_0*B_0,A_1*B_1})
(A xor B=[sum_{i xor j=0}a_i*a_j,sum_{i xor j=1}a_i*a_j,...,sum_{i xor j=n-1}a_i*a_j])
(A and B=[sum_{i and j=0}a_i*a_j,sum_{iandj=1}a_i*a_j,...,sum_{i and j=n-1}a_i*a_j])
(A or B=[sum_{i or j=0}a_i*a_j,sum_{i or j=1}a_i*a_j,...,sum_{i or j=n-1}a_i*a_j])

性质1

交换率、结合率均满足
(Cxor(A+B)=CxorA+CxorB)
(Cand(A+B)=CandA+CandB)
(Cor(A+B)=CorA+CorB)

性质2

由于(n-1)(frac n 2-1)在二进制下相差一位的特殊性质
(AxorB={A_0xorB_0)+(A_1xorB_1,A_0xorB_1)+(A_1xorB_0})
(AandB={A_0andB_0)+(A_0andB_1)+(A_1andB_0,A_1andB_1})
(AorB={A_0orB_0,A_oorB_1)+(A_1orB_0)+(A_1orB_1})

定义FWT和IFWT

(FWT(A)=A(n=1))
n>1时
xor:(FWT(A)={FWT(A_0+A_1),FWT(A_0-A_1)})
xor:(DWT(A)={DWT(frac {A_0+A_1} 2),DWT(frac {A_0-A_1} 2)})

and:(FWT(A)={FWT(A_0+A_1),FWT(A_1)})
and:(DWT(A)={DWT(A_0-A_1),DWT(A_1)})

or:(FWT(A)={FWT(A_0),FWT(A_1+A_0)})
or:(DWT(A)={DWT(A_0),DWT(A_1-A_0)})

这跟FFT递归树是一个道理的啊
FFT要分奇偶递归树先按最低位为0分两段
到FWT里啥顺序都行,reverse都不用了

性质

1.(FWT(Apm B)=FWT(A)pm FWT(B) 线性性)
2.(FWT(A⊕B)=FWT(A)*FWT(B) (点乘))
3.(DWT(FWT(A))=A)

证明

代入一下再根据性质一化简一下,数学归纳法

模板

链接

原文地址:https://www.cnblogs.com/acha/p/6406825.html