zoukankan      html  css  js  c++  java
  • FWT

    FWT

    本文全部大部分参考自yyb的博客

    概述

    FWT(快速沃尔什变换)用于解决类似B

    [A_n = sum_{n = iotimes j} B_i cdot C_j ]

    其中(otimes)表示二元位运算的问题。

    类似FFT,我们先将数组经过FWT变换然后对应位置一一相乘,再IFWT即可。

    约定

    (C = A imes B Leftrightarrow C_n = A_n cdot B_n)

    (C = A+B Leftrightarrow C_n = A_n+B_n)

    (C = A otimes B Leftrightarrow C_n = sum_{i otimes j = n} A_i cdot B_j)

    (A_x)表示数组(A)中下标最高位为(x)的位置组成的新数组。

    ((A, B))表示将A与B拼接组成新数组。

    (F(A))表示对A数组进行FWT变换。

    (IF(A))​表示对A数组进行IFWT变换。

    内容

    [F_{|}(A) = (F_|(A_0), F_|(A_0)+F_|(A_1)) \ F_&(A) = (F_&(A_0)+F_&(A_1), F_&(A_1)) \ F_oplus(A) = (F_oplus(A_0)+F_oplus(A_1), F_oplus(A_0)-F_oplus(A_1)) ]

    这里直接介绍(otimes = oplus)的情况。

    性质1:

    [F(A+B) = F(A)+F(B) ]

    证明(数学归纳法):

    [egin{aligned} F(A+B) & = (F(A+B)_0+F(A+B)_1, F(A+B)_0-F(A+B)_1) \ & = (F(A_0)+F(B_0)+F(A_1)+F(B_1), F(A_0)+F(B_0)-F(A_1)-F(B_1)) \ & = (F(A_0+A_1)+F(B_0+B_1), F(A_0-A_1)+F(B_0-B_1)) \ & = ((F(A))_0 + (F(B))_0, (F(A))_1+(F(B))_1) & = F(A)+F(B) end{aligned} ]

    性质2:

    [F(Aoplus B) = F(A) imes F(B) ]

    证明(数学归纳法):

    [egin{aligned} F(Aoplus B) & = (F(Aoplus B)_0+F(A oplus B)_1, F(A oplus B)_0 - F(A oplus B)_1) \ & = (F(A_0 oplus B_0 + A_1 oplus B_1 + A_0 oplus B_1 + A_1 oplus B_0), \ & qquad F(A_0 oplus B_0 + A_1 oplus B_0 - A_0 oplus B_1 - A_1 oplus B_0)) \ & = (F(A_0) imes F(B_0) + F(A_1) imes F(B_1) + F(A_0) imes F(B_1) + F(A_1) imes F(B_0), \ & qquad F(A_0) imes F(B_0) + F(A_1) times F(B_1) - F(A_0) imes F(B_1) - F(A_1) imes F(B_0)) \ & = (F(A_0+A_1) imes F(B_0+B_1), F(A_0-A_1) imes F(B_0-B_1)) \ & = ((F(A))_0 imes (F(B))_0, (F(A))_1 imes (F(B))_1) \ & = F(A) imes F(B) end{aligned} ]

    其余同理。

    那么我们就可以愉快地计算了。

    最后的问题是怎么得到原数组:逆过来就可以了。

    [IF_|(A) = (IF(A_0), IF(A_1)-IF(A_0)) \ IF_&(A) = (IF(A_0)-IF(A_1), IF(A_1)) \ IF_oplus(A) = (frac{(IF(A_0)+IF(A_1)}{2}, frac{IF(A_0)-IF(A_1)}{2}) ]

  • 相关阅读:
    支付宝校园一卡通充值服务体验
    商品筛选导航菜单亮点欣赏
    手机QQ v4.2 有感
    因所缺,而所需——互联网应用的开发方向
    浅谈 css3 box盒子模型以及box-flex的使用
    浅谈stylus与sass的对比
    css3 transfrom使用以及其martix(矩阵)属性与其它属性的关系
    js命名空间
    公用的stringUtil工具
    js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)
  • 原文地址:https://www.cnblogs.com/BunnyLutts/p/15128895.html
Copyright © 2011-2022 走看看