zoukankan      html  css  js  c++  java
  • FWT 学习笔记

    FWT学习笔记

    好久以前写的,先粘上来

    定义数组

    (n=2^k)
    (A=[a_0,a_1,a_2,a_3,...,a_{n-1}])
    (A_0=[a_0,a_1,a_2,...,a_{frac n 2-1}])
    (A_1=[a_{frac n 2},a_{frac n 2+1},..,a_{n-1}])
    (A_0)为没有最高位的部分,(A_1)为有二进制最高位的部分
    (A)可以用(A={A_0,A_1})表示

    定义运算

    (A+B=[a_0+b_0,a_1+b_1,...,a_n+b_n]={A_0+B_0,A_1+B_1})
    (A-B=[a_0-b_0,a_1-b_1,...,a_n-b_n]={A_0-B_0,A_1-B_1})
    (A*B=[a_0*b_0,a_1*b_1,...,a_n*b_n]={A_0*B_0,A_1*B_1})
    (A xor B=[sum_{i xor j=0}a_i*a_j,sum_{i xor j=1}a_i*a_j,...,sum_{i xor j=n-1}a_i*a_j])
    (A and B=[sum_{i and j=0}a_i*a_j,sum_{iandj=1}a_i*a_j,...,sum_{i and j=n-1}a_i*a_j])
    (A or B=[sum_{i or j=0}a_i*a_j,sum_{i or j=1}a_i*a_j,...,sum_{i or j=n-1}a_i*a_j])

    性质1

    交换率、结合率均满足
    (Cxor(A+B)=CxorA+CxorB)
    (Cand(A+B)=CandA+CandB)
    (Cor(A+B)=CorA+CorB)

    性质2

    由于(n-1)(frac n 2-1)在二进制下相差一位的特殊性质
    (AxorB={A_0xorB_0)+(A_1xorB_1,A_0xorB_1)+(A_1xorB_0})
    (AandB={A_0andB_0)+(A_0andB_1)+(A_1andB_0,A_1andB_1})
    (AorB={A_0orB_0,A_oorB_1)+(A_1orB_0)+(A_1orB_1})

    定义FWT和IFWT

    (FWT(A)=A(n=1))
    n>1时
    xor:(FWT(A)={FWT(A_0+A_1),FWT(A_0-A_1)})
    xor:(DWT(A)={DWT(frac {A_0+A_1} 2),DWT(frac {A_0-A_1} 2)})

    and:(FWT(A)={FWT(A_0+A_1),FWT(A_1)})
    and:(DWT(A)={DWT(A_0-A_1),DWT(A_1)})

    or:(FWT(A)={FWT(A_0),FWT(A_1+A_0)})
    or:(DWT(A)={DWT(A_0),DWT(A_1-A_0)})

    这跟FFT递归树是一个道理的啊
    FFT要分奇偶递归树先按最低位为0分两段
    到FWT里啥顺序都行,reverse都不用了

    性质

    1.(FWT(Apm B)=FWT(A)pm FWT(B) 线性性)
    2.(FWT(A⊕B)=FWT(A)*FWT(B) (点乘))
    3.(DWT(FWT(A))=A)

    证明

    代入一下再根据性质一化简一下,数学归纳法

    模板

    链接

  • 相关阅读:
    C# 将Excel中的数据到DataSet中
    Struts select标签在 FreeMarker 中的使用。
    .Net 中显式实现接口
    C#抽象类和抽象方法的应用
    iframe 自动控制高
    兔子问题总结(总结)
    MySQL group_concat 方法的使用
    服务发现与负载均衡机制的实现
    ChannelFuture
    服务发布、订阅及远程通信
  • 原文地址:https://www.cnblogs.com/acha/p/6406825.html
Copyright © 2011-2022 走看看