快速沃尔什变换(FWT)学习笔记】的更多相关文章

一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智商 ,网上的FWT博客我大多看不懂,下面这篇博客是留给我我再次忘记FWT时看的,所以像我一样的没智商选手应该也能看懂!有智商选手更能看懂咯! (写得非常匆忙,如有任何错误请在评论区指正!TAT) 什么是FWT FWT是用来快速做位运算卷积的.位运算卷积是什么?给出两个数组\(A\)和\(B\)(长度相等且是2…
〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂级数的性质与应用及其快速算法 by 吕凯风 一.FWT 是什么 FWT 是快速沃尔什变换.它和快速傅里叶变换一样,原本都用于物理中的频谱分析. 但是由于它可分治的特点,在算法竞赛中常被用来计算位运算卷积. 二.FWT 能干什么 它可以在 \(O(n\log n)\) 的时间复杂度内由数组 \(a,b…
证明均来自xht37 的洛谷博客 作用 在 \(OI\) 中,\(FWT\) 是用于解决对下标进行位运算卷积问题的方法. \(c_{i}=\sum_{i=j \oplus k} a_{j} b_{k}\) 其中 \(\oplus\) 是二元位运算中的一种. 实现 \(or\) 运算 构造 \(fwt[a]_i = \sum_{j|i=i} a_j\) 则 \(\begin{aligned} fwt[a] \times fwt[b] &= \left(\sum_{j|i=i} a_j\right)…
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor 三种问题的解决思路都是对多项式 \( a \) 构造一个 \( a' \),令 \( a' = b' * c' \): 那么只需要把 \( b \) 变换成 \( b' \),\( c \) 变换成 \( c' \),然后乘出 \( a' \),再逆变换得到 \( a \): 下面问题就变成如何快…
[学习笔鸡]快速沃尔什变换FWT OR的FWT 快速解决: \[ C[i]=\sum_{j|k=i} A[j]B[k] \] FWT使得我们 \[ FWT(C)=FWT(A)*FWT(B) \] 其中\(*\)是点积,就是对应位置乘起来. 而对于\(orFWT\), \[ C'[i]=FWT(C)[i]=\sum_{j\subseteq i}C[j] \] 那么证明一下: \[ \begin{array} &C'[i]&=\sum_{j\subseteq i} C[j] \\ &=…
目录 FMT/FWT学习笔记 FMT 快速莫比乌斯变换 OR卷积 AND卷积 快速沃尔什变换(FWT/XOR卷积) FMT/FWT学习笔记 FMT/FWT是算法竞赛中求or/and/xor卷积的算法,数据处理中也有应用. 网上的命名方法有很多. 这里我们选这个博客的,把AND/OR命名为FMT,XOR命名为FWT 如果是整数,我们认为\(\cup\)和\(\cap\)运算是二进制下的,也就是\(\text{|和&}\),这可以帮我们理解之后的集合幂级数. FMT 快速莫比乌斯变换 OR卷积 与F…
FWT学习笔记 引入 一般的多项式乘法是这样子的: \(c_i=\sum_{i,j}a_j*b_k*[j+k==i]\) 但是如果我们将这个乘法式子里面的+号变换一下变成其他的运算符号呢? \(c_i=\sum_{i,j}a_j*b_k*[j\oplus k==i]\) 其中\(\oplus\)可以取\(and,or,xor\) 这个时候FFT和NTT就没有什么用了... 前人的智慧是无穷的! 考虑一个神奇的算法:FWT(快速沃尔什变化) or卷积 先从最容易的or卷积下手. 我们考虑他给出的式…
快速沃尔什变换\(FWT\) 是一种可以快速完成集合卷积的算法. 什么是集合卷积啊? 集合卷积就是在集合运算下的卷积.比如一般而言我们算的卷积都是\(C_i=\sum_{j+k=i}A_j*B_k\),而集合卷积计算的就是\(C_i=\sum_{j\otimes k=i}A_j*B_k\),其中\(\otimes\)是一种集合运算,可以是与.或.异或. 类似于快速傅里叶变换\(FFT\),\(FWT\)也需要寻求一种变换方式\(FWT(A)\),使\(FWT(C)=FWT(A)*FWT(B)\)…
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…
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级数也是形式幂级数的一种,只是集合的一种表现形式,无需考虑收敛或发散的含义 定义一个集合 \(S\) 的集合幂级数为 \(f\) ,那么我们就可以把集合 \(S\) 表示为如下形式 \(\begin{aligned}f=\sum _{T\subseteq S}f_{T}\cdot x^{T}\end{align…