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=\ ...
随机推荐
- thinkphp的使用——隐藏index.php
官方默认的.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine ...
- tomcat - CPU高占用问题记录
先查询进程 top 再根据进程号,查出进程的线程 ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd 得到最高使用率CPU的线程TID,转换成16进制 printf ...
- PAT (Basic Level) Practise (中文)- 1013. 数素数 (20)
http://www.patest.cn/contests/pat-b-practise/1013 令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有 ...
- Linux运维笔记--第四部
第四部 3. Linux扩展正则表达式实战 扩展的正则表达式:ERE(主要用于egrep或grep -E) + 重复一个或一个以上前面的字符. (*是0或多个) ? 重复0个或一个 ...
- VueX源码分析(4)
VueX源码分析(4) /module store.js /module/module.js import { forEachValue } from '../util' // Base data s ...
- DeepFaceLab小白入门(3):软件使用!
换脸程序执行步骤,大部分程序都是类似.DeepFaceLab 虽然没有可视化界面,但是将整个过程分成了8个步骤,每个步骤只需点击BAT文件即可执行.只要看着序号,一个个点过去就可以了,这样的操作应该不 ...
- matplotlib学习记录 四
# 绘制3月每天最高温和10月每天最高温散点图 from matplotlib import pyplot as plt # 让matplotlib能够显示中文 plt.rcParams['font. ...
- python模块之sys
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxi ...
- AOP面向切面编程笔记
1.AOP概念:Aspect Oriented Programming 面向切面编程 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理 …… 3.情景举例 ①数学计算器接口[Ma ...
- UVA - 11134 Fabled Rooks问题分解,贪心
题目:点击打开题目链接 思路:为了满足所有的车不能相互攻击,就要保证所有的车不同行不同列,于是可以发现,行与列是无关的,因此题目可以拆解为两个一维问题,即在区间[1-n]之间选择n个不同的整数,使得第 ...