首页 > TAG信息列表 > IFwt
快速沃尔什变换(FWT)
快速沃尔什变换 解决什么问题? 回顾之前学过的快速傅里叶变换,能在 \(O(n\log n)\) 的时间复杂度内计算下面这个卷积式: \[C[k] = \sum_{i+j=k}A[i]\times B[j] \]而快速沃尔什变换解决的问题与上式略有不同: \[C[k] = \sum_{i\bigoplus j = k} A[i]\times B[j] \]其中,\(\bigoplus\)【笔记】快速莫比乌斯/沃尔什变换 (FMT/FWT)
在看懂之前看大家就写了下面三个式子,感觉个个都是谜语人,然而确实只需要下面三个式子就行了... 对于 FFT,我们求的就是多项式卷积,思路是对数组变换一波,然后点乘,然后再逆变换回来 对于数组 A 和 B,求 C 定义为:$$C_i=\sum_{j\oplus k = i}A_j \times B_k$$ 其中 \(\oplus\) 分别可以是快速沃尔什变换(FWT)
FWT 熟知两个序列 \(A=\{a_i\}_{i=0}^n\),\(B=\{b_i\}_{i=0}^n\) 的加法卷积为: \[c_i=\sum\limits_{j+k=i}^na_jb_k \]计算方式是: \[A^\prime=FFT(A),B^\prime=FFT(B) \\ C=A^\prime\times B^\prime,IFFT(C) \]那如果我们要计算or卷积,and卷积或是xor卷积呢? 也就是说我们要计算: \[c_「UNR#2」黎明前的巧克力
「UNR#2」黎明前的巧克力 解题思路 考虑一个子集 \(S\) 的异或和如果为 \(0\) 那么贡献为 \(2^{|S|}\) ,不难列出生产函数的式子,这里的卷积是异或卷积。 \[ [x^0]\prod_{i=1}^{n} (2x^{a_i}+1) \] 因为每一项只有两项 \(x^0,x^{a_i}\) 有值,记 \(f_i(x) =2x^{a_i}+1\), \(f'_i(x)=【模板】快速沃尔什变换
基本思路和代码写起来与 \(FFT\) 都极像。 比较重要的几个式子: or卷积 \(FWT(A_0,A_1)=(FWT(A_0),FWT(A_0+A_1))\) \(IFWT(A_0,A_1)=(IFWT(A_0),IFWT(A_0-A_1))\) and卷积 \(FWT(A_0,A_1)=(FWT(A_0+A_1),FWT(A_1))\) \(IFWT(A_0,A_1)=(IFWT(A_0-A_1),IFWT(A_1))\) xor卷积 \(FWT(A_【学习笔记】fwt&&fmt&&子集卷积
前言:yyb神仙的博客 FWT 基本思路:将多项式变成点值表达,点值相乘之后再逆变换回来得到特定形式的卷积; 多项式的次数界都为\(2^n\)的形式,\(A_0\)定义为前一半多项式(下标二进制第一位为\(0\)),\(A_1\)同理定义; \((A,B)\)表示多项式\(A\)和\(B\)的直接拼接,FWT的结果都是一个点值表达,FWT(快速沃尔什变换)简要讲解
写在前面 本蒟蒻很菜,所以这篇博客依然几乎不会有证明 还是先说这东西是干什么的 平时我们所见的卷积是这样的: \[ h(k) = \sum_{i + j = k} f(i) \cdot g(j) \] 但是偶尔还会遇到条件中的加号变成其它符号的情况,\(FWT\)就是这个符号是按位与,或,异时快速求解\(h\)的 主要的三种情况 其浅谈算法——FWT(快速沃尔什变换)
其实FWT我啥都不会,反正就是记一波结论,记住就好…… 具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记 现有一些卷积,形如 \(C_k=\sum\limits_{i\lor j=k}A_i*B_j\) \(C_k=\sum\limits_{i\land j=k}A_i*B_j\) \(C_k=\sum\limits_{i\oplus j=k}A_i*B_j\) 然后普通的FFT肯定应付不了这