快速沃尔什变换

解决多项式的位运算卷积问题以及子集和

参考博客


o r \color{00ffcc}{ \tt{or} } or卷积

C k = ∑ i o r j = k A i × b j C_k=\sum_{i{\color{00ffcc}{\tt{or}}} j=k}A_i\times b_j Ck=iorj=kAi×bj

F W T ( A ) [ i ] = ∑ j o r i = i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{or}}} i=i}A_j FWT(A)[i]=jori=iAj,换句话说, F W T S FWT_S FWTS相当于 S S S的子集和

F W T ( A + B ) = F W T ( A ) + F W T ( B ) FWT(A+B)=FWT(A)+FWT(B) FWT(A+B)=FWT(A)+FWT(B)

根据 F W T ​ FWT​ FWT的定义可得

分治计算 F W T FWT FWT

对于有 2 n 2^n 2n项的多项式 A A A,前 2 n − 1 2^{n-1} 2n1项构成的多项式为 A 0 A_0 A0,后 2 n − 1 2^{n-1} 2n1项构成的多项式为 A 0 A_0 A0

F W T ( A ) = { F W T ( A 0 ) , F W T ( A 0 + A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{ \begin{aligned}FWT(A_0),FWT(A_0+A_1)&&n\not=0\\A&&n=0\end{aligned} \right. FWT(A)={FWT(A0),FWT(A0+A1)An=0n=0

式子中,的意思是拼接两个多项式

证明

n = 0 n=0 n=0时显然

n ≠ 0 n\not=0 n=0

  • 对于前半个式子, A 1 A_1 A1无法产生贡献
  • 对于后半个式子,考虑合并 A 0 A_0 A0 A 1 A_1 A1的贡献,去掉最高位后相加再做 F W T FWT FWT即可

F W T ( A o r B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{or}}} B)=FWT(A)\times FWT(B) FWT(AorB)=FWT(A)×FWT(B)

F W T ( A ) × F W T ( B ) = ∑ i F W T ( A ) [ i ] × F W T ( B ) [ i ] × x i FWT(A)\times FWT(B)=\sum_{i}FWT(A)[i]\times FWT(B)[i]\times x^i FWT(A)×FWT(B)=iFWT(A)[i]×FWT(B)[i]×xi

证明

数学归纳法

n = 0 ​ n=0​ n=0时显然

n ≠ 0 n\not=0 n=0时,

F W T ( A o r B ) = F W T ( ( A o r B ) 0 , ( A o r B ) 1 ) FWT(A{\color{00ffcc}{\tt{or}}} B)=FWT((A{\color{00ffcc}{\tt{or}}} B)_0,(A{\color{00ffcc}{\tt{or}}} B)_1) FWT(AorB)=FWT((AorB)0,(AorB)1)

= F W T ( A 0 o r B 0 , A 0 o r B 1 + A 1 o r B 0 + A 1 o r B 1 ) =FWT(A_0{\color{00ffcc}{\tt{or}}} B_0,A_0{\color{00ffcc}{\tt{or}}} B_1+A_1{\color{00ffcc}{\tt{or}}} B_0+A_1{\color{00ffcc}{\tt{or}}} B_1) =FWT(A0orB0,A0orB1+A1orB0+A1orB1)

= F W T ( A 0 o r B 0 ) , F W T ( A 0 o r B 0 + A 0 o r B 1 + A 1 o r B 0 + A 1 o r B 1 ) =FWT(A_0{\color{00ffcc}{\tt{or}}} B_0),FWT(A_0{\color{00ffcc}{\tt{or}}} B_0+A_0{\color{00ffcc}{\tt{or}}} B_1+A_1{\color{00ffcc}{\tt{or}}} B_0+A_1{\color{00ffcc}{\tt{or}}} B_1) =FWT(A0orB0),FWT(A0orB0+A0orB1+A1orB0+A1orB1)

= F W T ( A 0 ) × F W T ( B 0 ) , F W T ( A 0 ) × F W T ( B 0 ) + F W T ( A 1 ) × F W T ( B 0 ) + F W T ( A 0 ) × F W T ( B 1 ) + F W T ( A 1 ) × F W T ( B 1 ) =FWT(A_0)\times FWT(B_0),FWT(A_0)\times FWT(B_0)+FWT(A_1)\times FWT(B_0)+FWT(A_0)\times FWT(B_1)+FWT(A_1)\times FWT(B_1) =FWT(A0)×FWT(B0),FWT(A0)×FWT(B0)+FWT(A1)×FWT(B0)+FWT(A0)×FWT(B1)+FWT(A1)×FWT(B1)

= F W T ( A 0 ) × F W T ( B 0 ) , ( F W T ( A 0 ) + F W T ( A 1 ) ) × ( F W T ( B 0 ) + F W T ( B 1 ) ) =FWT(A_0)\times FWT(B_0),(FWT(A_0)+FWT(A_1))\times (FWT(B_0)+FWT(B_1)) =FWT(A0)×FWT(B0),(FWT(A0)+FWT(A1))×(FWT(B0)+FWT(B1))

= ( F W T ( A 0 ) , F W T ( A 0 + A 1 ) ) × ( F W T ( B 0 ) , F W T ( B 0 + B 1 ) ) =(FWT(A_0),FWT(A_0+A_1))\times (FWT(B_0),FWT(B_0+B_1)) =(FWT(A0),FWT(A0+A1))×(FWT(B0),FWT(B0+B1))

= F W T ( A ) × F W T ( B ) =FWT(A)\times FWT(B) =FWT(A)×FWT(B)

I F W T IFWT IFWT

反着做就好了

I F W T ( A ) = I F W T ( A 0 ) , I F W T ( A 1 ) − I F W T ( A 0 ) IFWT(A)=IFWT(A_0),IFWT(A_1)-IFWT(A_0) IFWT(A)=IFWT(A0),IFWT(A1)IFWT(A0)

a n d {\color{00ffcc}{\tt{and}}} and卷积

C k = ∑ i a n d j = k A i × B j C_k=\sum_{i{\color{00ffcc}{\tt{and}}}j=k}A_i\times B_j Ck=iandj=kAi×Bj

F W T ( A ) [ i ] = ∑ j a n d i = i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{and}}}i=i}A_j FWT(A)[i]=jandi=iAj

F W T ( A ) = { F W T ( A 0 + A 1 ) , F W T ( A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{ \begin{aligned}FWT(A_0+A_1),FWT(A_1)&&n\not=0\\A&&n=0\end{aligned} \right. FWT(A)={FWT(A0+A1),FWT(A1)An=0n=0

证明

显然

F W T ( A a n d B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{and}}}B)=FWT(A)\times FWT(B) FWT(AandB)=FWT(A)×FWT(B)

F W T ( A ) × F W T ( B ) = ∑ i F W T ( A ) [ i ] × F W T ( B ) [ i ] × x i FWT(A)\times FWT(B)=\sum_{i}FWT(A)[i]\times FWT(B)[i]\times x^i FWT(A)×FWT(B)=iFWT(A)[i]×FWT(B)[i]×xi

数学归纳法

n = 0 n=0 n=0时显然

n ≠ 0 n\not=0 n=0

F W T ( A a n d B ) = F W T ( ( A a n d B ) 0 , ( A a n d B ) 1 ) FWT(A{\color{00ffcc}{\tt{and}}}B)=FWT((A{\color{00ffcc}{\tt{and}}}B)_0,(A{\color{00ffcc}{\tt{and}}}B)_1) FWT(AandB)=FWT((AandB)0,(AandB)1)
= F W T ( A 0 a n d B 0 , A 1 a n d B 0 , A 0 a n d B 1 , A 1 a n d B 1 ) =FWT(A_0{\color{00ffcc}{\tt{and}}}B_0,A_1{\color{00ffcc}{\tt{and}}}B_0,A_0{\color{00ffcc}{\tt{and}}}B_1,A_1{\color{00ffcc}{\tt{and}}}B_1) =FWT(A0andB0,A1andB0,A0andB1,A1andB1)
= F W T ( A 0 a n d B 0 + A 0 a n d B 1 + A 1 a n d B 0 + A 1 a n d B 1 ) , F W T ( A 1 a n d B 1 ) =FWT(A_0{\color{00ffcc}{\tt{and}}}B_0+A_0{\color{00ffcc}{\tt{and}}}B_1+A_1{\color{00ffcc}{\tt{and}}}B_0+A_1{\color{00ffcc}{\tt{and}}}B_1),FWT(A_1{\color{00ffcc}{\tt{and}}}B_1) =FWT(A0andB0+A0andB1+A1andB0+A1andB1),FWT(A1andB1)
= F W T ( A 0 a n d B 0 ) + F W T ( A 0 a n d B 1 ) + F W T ( A 1 a n d B 0 ) + F W T ( A 1 a n d B 1 ) , F W T ( A 1 a n d B 1 =FWT(A_0{\color{00ffcc}{\tt{and}}}B_0)+FWT(A_0{\color{00ffcc}{\tt{and}}}B_1)+FWT(A_1{\color{00ffcc}{\tt{and}}}B_0)+FWT(A_1{\color{00ffcc}{\tt{and}}}B_1),FWT(A_1{\color{00ffcc}{\tt{and}}}B_1 =FWT(A0andB0)+FWT(A0andB1)+FWT(A1andB0)+FWT(A1andB1),FWT(A1andB1
= F W T ( A 0 ) × F W T ( B 0 ) + F W T ( A 0 ) × F W T ( B 1 ) + F W T ( A 1 ) × F W T ( B 0 ) + F W T ( A 1 ) × F W T ( B 1 ) , F W T ( A 1 ) × F W T ( B 1 ) =FWT(A_0)\times FWT(B_0)+FWT(A_0)\times FWT(B_1)+FWT(A_1)\times FWT(B_0)+FWT(A_1)\times FWT(B_1),FWT(A_1)\times FWT(B_1) =FWT(A0)×FWT(B0)+FWT(A0)×FWT(B1)+FWT(A1)×FWT(B0)+FWT(A1)×FWT(B1),FWT(A1)×FWT(B1)
= ( F W T ( A 0 ) + F W T ( A 1 ) ) × ( F W T ( B 0 ) + F W T ( B 1 ) ) , F W T ( A 1 ) × F W T ( B 1 ) =(FWT(A_0)+FWT(A_1))\times(FWT(B_0)+FWT(B_1)),FWT(A_1)\times FWT(B_1) =(FWT(A0)+FWT(A1))×(FWT(B0)+FWT(B1)),FWT(A1)×FWT(B1)
= ( F W T ( A 0 + A 1 ) , F W T ( A 1 ) ) × ( F W T ( B 0 + B 1 ) , F W T ( B 1 ) ) =(FWT(A_0+A_1),FWT(A_1))\times (FWT(B_0+B_1),FWT(B_1)) =(FWT(A0+A1),FWT(A1))×(FWT(B0+B1),FWT(B1))
= F W T ( A ) × F W T ( B ) =FWT(A)\times FWT(B) =FWT(A)×FWT(B)

I F W T IFWT IFWT

I F W T ( A ) = I F W T ( A 0 ) − I F W T ( A 1 ) , I F W T ( A 1 ) IFWT(A)=IFWT(A_0)-IFWT(A_1),IFWT(A_1) IFWT(A)=IFWT(A0)IFWT(A1),IFWT(A1)

x o r {\color{00ffcc}{\tt{xor}}} xor卷积

F W T ( A ) [ i ] = ∑ j x o r i A j FWT(A)[i]=\sum_{j{\color{00ffcc}{\tt{xor}}}i}A_j FWT(A)[i]=jxoriAj

F W T ( A ) = { F W T ( A 0 ) + F W T ( A 1 ) , F W T ( A 0 ) − F W T ( A 1 ) n ≠ 0 A n = 0 FWT(A)=\left\{\begin{aligned}FWT(A_0)+FWT(A_1),FWT(A_0)-FWT(A_1)&&n\not=0\\A&&n=0\end{aligned}\right. FWT(A)={FWT(A0)+FWT(A1),FWT(A0)FWT(A1)An=0n=0

证明

显然

F W T ( A x o r B ) = F W T ( A ) × F W T ( B ) FWT(A{\color{00ffcc}{\tt{xor}}}B)=FWT(A)\times FWT(B) FWT(AxorB)=FWT(A)×FWT(B)

显然

I F W T IFWT IFWT

I F W T ( A ) = I F W T ( A 0 ) + I F W T ( A 1 ) 2 , I F W T ( A 0 ) − I F W T ( A 1 ) 2 IFWT(A)=\frac{IFWT(A_0)+IFWT(A_1)}{2},\frac{IFWT(A_0)-IFWT(A_1)}{2} IFWT(A)=2IFWT(A0)+IFWT(A1),2IFWT(A0)IFWT(A1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值