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)

    证明

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

    模板

    链接

  • 相关阅读:
    linux
    查看字符的编码数字
    各种语系的unicode对应以及local编码方式
    Unicode字符集,各个语言的区间
    深入理解Python的字符编码
    php 快排
    归并排序
    检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
    分布式缓存MemcacheHelper
    单例模式
  • 原文地址:https://www.cnblogs.com/acha/p/6406825.html
Copyright © 2011-2022 走看看