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}) ]

  • 相关阅读:
    AD账号解锁
    Django中的DateTimeField格式
    接口调用,输出结果为Json格式(ConvertTo-Json),提交参数给URL(WebRequest)
    jQuery表格排序(tablesorter)
    Python脚本性能分析
    监控文件内容变化,即时写入到新文件(tail)
    导出目录权限
    多进程、多线程处理文件对比
    shell 实例收集
    DHCP : 网络世界身份的获取
  • 原文地址:https://www.cnblogs.com/BunnyLutts/p/15128895.html
Copyright © 2011-2022 走看看