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

  • 相关阅读:
    file类和io流
    数组元素的填充与替换、排序和复制
    foreach遍历数组、数组的转置与方阵的迹
    Java小故事(一)
    java杨辉三角和空心菱形(二维数组篇)
    JAVA修饰符、关键字和继承(一)
    JAVA面向对象和类
    JAVA小程序-----买衣服
    JAVA流程控制
    Java包、类、数据类型、表达式和标识符
  • 原文地址:https://www.cnblogs.com/BunnyLutts/p/15128895.html
Copyright © 2011-2022 走看看