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(A\pm B)=FWT(A)\pm FWT(B) 线性性\)
2.\(FWT(A⊕B)=FWT(A)*FWT(B) (点乘)\)
3.\(DWT(FWT(A))=A\)
证明
代入一下再根据性质一化简一下,数学归纳法
模板
FWT 学习笔记的更多相关文章
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- FWT学习笔记
FWT学习笔记 引入 一般的多项式乘法是这样子的: \(c_i=\sum_{i,j}a_j*b_k*[j+k==i]\) 但是如果我们将这个乘法式子里面的+号变换一下变成其他的运算符号呢? \(c_i ...
- FMT/FWT学习笔记
目录 FMT/FWT学习笔记 FMT 快速莫比乌斯变换 OR卷积 AND卷积 快速沃尔什变换(FWT/XOR卷积) FMT/FWT学习笔记 FMT/FWT是算法竞赛中求or/and/xor卷积的算法, ...
- $\text {FWT}$学习笔记
\(\text {FWT}\) 学习笔记 正常项的\(\text {FWT}\) 在\(\text {OI}\)中,我们经常会碰到这种问题: 给出一个长度为\(n\)的序列\(a_{1,2,...,n ...
- 快速沃尔什变换 (FWT)学习笔记
证明均来自xht37 的洛谷博客 作用 在 \(OI\) 中,\(FWT\) 是用于解决对下标进行位运算卷积问题的方法. \(c_{i}=\sum_{i=j \oplus k} a_{j} b_{k} ...
- 快速沃尔什变换 FWT 学习笔记【多项式】
〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂 ...
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- 卷积理论 & 高维FWT学习笔记
之前做了那么多生成函数和多项式卷积的题目,结果今天才理解了优化卷积算法的实质. 首先我们以二进制FWT or作为最简单的例子入手. 我们发现正的FWT or变换就是求$\hat{a}_j=\sum_{ ...
- FWT快速沃尔什变换学习笔记
FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...
随机推荐
- JAVA - Annotation 注解 入门
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- C#动态数组ArrayList
在C#中,如果需要数组的长度和元素的个数随着程序的运行不断改变,就可以使用ArrayList类,该类是一个可以动态增减成员的数组. 一.ArrayList类的常用属性和方法 1. ArrayList类 ...
- linux配置邮件客户端
linux配置邮件客户端 1. 申请一个163邮箱,并配置客户端授权密码 l 开启POP3/SMTP/IMAP l 设置客户端授权密码 ###此密码不能跟邮箱密码相同,此密码用来在linux邮件客户端 ...
- NSCharacterSet去除字符串中的空格、删除指定\任意字符集
一.去除首尾的空格 /** 1.去除首尾的空格*/ NSString *strMsg=@" 简书作者:CoderZb "; NSString *strResult = [strMs ...
- C#MySQL增删改查
首先在项目中添加引用 using MySql.Data.MySqlClient; 连接字符串 private string connString="server=localhost;use ...
- Codeforces Round #513 (rated, Div. 1 + Div. 2)
前记 眼看他起高楼:眼看他宴宾客:眼看他楼坍了. 比赛历程 开考前一分钟还在慌里慌张地订正上午考试题目. “诶这个数位dp哪里见了鬼了???”瞥了眼时间,无奈而迅速地关去所有其他窗口,临时打了一个缺省 ...
- R,RJAVA 安装配置 详细版
准备工作 系统必须已经安装JDK 并配置好了环境变量. 注:安装的jdk r 以及系统 尽量保持位数一致 1.下载 R https://mirrors.tuna.tsinghua.edu.cn ...
- ubuntu16.04安装 java JDK8
安装openjdk1.更新软件包列表: sudo apt-get update 2.安装openjdk-8-jdk: sudo apt-get install openjdk-8-jdk 3.查看ja ...
- 使用powershell批量更新git仓库
Get-ChildItem D:\GitHub\NetCore | ForEach-Object -Process{ cd $_.name; git pull; cd ../ }
- FastJsonUtils工具类
fastjson是由alibaba开源的一套json处理器.与其他json处理器(如Gson,Jackson等)和其他的Java对象序列化反序列化方式相比,有比较明显的性能优势. 版权声明:本文为博主 ...