FWT 学习笔记

概念

类似多项式卷积,把下标相加换成下标做位运算,同样可以在 O ( n l o g n ) O(nlogn) O(nlogn)的效率内求出。

思想

或和与比较简单,重点考虑异或。

对于异或卷积,构造 F W T ( A ) [ i ] = ∑ j = 0 2 n − 1 ( − 1 ) b i t c o u n t ( i a n d j ) FWT(A)[i]=\sum_{j=0}^{2^n-1}{(-1)^{bitcount(i and j)}} FWT(A)[i]=j=02n1(1)bitcount(iandj)

如果已知 A A A,我们可以用递归的方式计算 F W T ( A ) : F W T ( A ) = ( F W T ( A 0 ) + F W T ( A 1 ) , F W T ( A 0 ) − F W T ( A 1 ) ) FWT(A):FWT(A)=(FWT(A_0)+FWT(A_1),FWT(A_0)-FWT(A_1)) FWT(A):FWT(A)=(FWT(A0)+FWT(A1),FWT(A0)FWT(A1)),其中 A 0 A_0 A0 A 1 A_1 A1分别表示 A A A的前 2 n − 1 2^{n-1} 2n1位和后 2 n − 1 2^{n-1} 2n1位,效率 O ( n l o g n ) O(nlogn) O(nlogn)

可以利用上面式子,用归纳法证明 F W T ( A x o r B ) = F W T ( A ) × F W T ( B ) FWT(A xor B)=FWT(A) \times FWT(B) FWT(AxorB)=FWT(A)×FWT(B)

于是我们只需要对 A , B A,B AB分别做 F W T FWT FWT,把对应位置相乘,即可得到 F W T ( A x o r B ) FWT(A xor B) FWT(AxorB),剩下的问题是如何把它变为原来的 ( A x o r B ) (A xor B) (AxorB)

还是考虑递归,把上面的式子逆过来得到
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)=((IFWT(A_0)+IFWT(A_1))/2,(IFWT(A_0)-IFWT(A_1))/2) IFWT(A)=((IFWT(A0)+IFWT(A1))/2,(IFWT(A0)IFWT(A1))/2)
同样可以在 O ( n l o g n ) O(nlogn) O(nlogn)时间内算出。

例题

DTOJ 4875. 西行寺无余涅槃

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值