FWT(Fast Walsh-Hadamard Transform)

去年听GZMdalao讲FWT,第一句就是:构造这玩意的人是神 ( 经 病 ) _{(经病)} ()吧。
其实还好。。。。。。

FFT向我们提供了一个思路来解决卷积问题,那就是对于多项式(数组)构造一个(可逆)变换FFT(A),使得:
F F T ( A ) [ i ] ∗ F F T ( B ) [ i ] = F F T ( A ∘ B ) [ i ] FFT(A)[i] * FFT(B)[i] = FFT(A \circ B)[i] FFT(A)[i]FFT(B)[i]=FFT(AB)[i],其中 ∘ \circ 为卷积符号,然后我们就把问题转化为了如何构造变换FFT()使得变换速度可以承受。
然后上古dalao就构造: F F T ( A ) [ i ] = ∑ k = 0 n ( w n i ) k ∗ A [ k ] FFT(A)[i] = \sum_{k=0}^n (w_n^i)^k * A[k] FFT(A)[i]=k=0n(wni)kA[k]
易证满足 F F T ( A ) [ i ] ∗ F F T ( B ) [ i ] = F F T ( A ∗ B ) [ i ] FFT(A)[i] * FFT(B)[i] = FFT(A * B)[i] FFT(A)[i]FFT(B)[i]=FFT(AB)[i]

那么对于其他的卷积形式,我们可以通过构造变换来加速。
然后我们发现了一类方法,不过这类方法实际操作起来非常有难度,那么就像研究容斥模型和研究杜教筛一样,先找几个具体点的模型来研究总结规律和技巧,并使这个算法得到应用和拓展,然后。。。。。。你就可以美其名曰:“套路题。”,这种从一般到特殊的研究最终也就落得个“背板就行了”的下场。。。。。。

其中一个特殊模型就是位运算卷积,它的变换被业界称为FWT。
先是 o r or or
C [ i ] = ∑ u ∣ v = i A [ u ] ∗ B [ v ] C[i] = \sum_{u|v = i} A[u] * B[v] C[i]=uv=iA[u]B[v]
因为 ( u ∣ i ) ∣ ( v ∣ i ) = ( u ∣ v ) ∣ i (u|i)|(v|i)=(u|v)|i (ui)(vi)=(uv)i
所以 F W T ( A ) [ i ] = ∑ u ∣ i = i A [ u ] FWT(A)[i] = \sum_{u|i=i}A[u] FWT(A)[i]=ui=iA[u]
那么对于每一组 u , v , 且 u ∣ i = i , v ∣ i = i u,v,且u|i=i,v|i=i u,v,ui=i,vi=i,有 ( u ∣ v ) ∣ i = i (u|v)|i=i (uv)i=i,则 A [ u ]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值