FWT
问题描述
给定 \(n\),有 \(a_{0\sim 2^n-1}\) 和 \(b_{0\sim 2^n-1}\),求出 \(c_{0\sim 2^n-1}\),满足
其中 $\oplus $ 为一种位运算(这里的位运算指结果的某一位的取值只和两运算数同一位的取值有关的运算)
符号 和 约定
令 \(\text{FWT}_n(a)\) 表示 \(a\) 数组进行 \(\text{FWT}\) 变换之后的结果,\(\text{FWT}^{-1}_n(a)\) 为其逆变换
令 \(a\cdot b\) 表示数组 \(a\) 和 \(b\) 逐项相乘的结果
对于 \([0,2^n)\) 内的整数 \(i,j\),定义 \(i\subseteq j\) 表示 \(i\) 的所有二进制为 \(1\) 的位为 \(j\) 二进制为 \(1\) 的位的子集,其余集合运算同理
基本思想
类似 \(\text{FFT}\),找到 \(\text{FWT}\) 满足
即
Or
对于 \(\oplus\) 为按位或的情况,构造 \(\text{FWT}_n(a)_i=\sum_{j\subseteq i}a_j\),即高维前缀和,显然满足要求,\(\text{FWT}^{-1}\) 即为高维前缀差分,有 \(\text{FWT}_n(a)_i=\sum_{j\subseteq i}(-1)^{|i|-|j|}a_j\)
And
对于 \(\oplus\) 为按位与的情况,构造 \(\text{FWT}_n(a)_i=\sum_{j\supseteq i}a_j\),即高维后缀和,显然满足要求,\(\text{FWT}^{-1}\) 即为高维后缀差分,有 \(\text{FWT}_n(a)_i=\sum_{j\supseteq i}(-1)^{|i|-|j|}a_j\)
Xor
对于 \(\oplus\) 为按位异或的情况,构造 \(\text{FWT}_n(a)_i=\sum_{j}(-1)^{\text{popcount}(i\cap j)}a_j\),满足要求,容易推出正变换的矩阵为 \(\begin{bmatrix}1&1\\1&-1\\\end{bmatrix}\),逆变换的矩阵为 \(\begin{bmatrix}\frac12&\frac12\\\frac12&-\frac12\\\end{bmatrix}\),有 \(\text{FWT}_n(a)_i=2^{-n}\sum_{j}(-1)^{\text{popcount}(i\cap j)}a_j\)
Xnor
对于 \(\oplus\) 为按位同或的情况,构造 \(\text{FWT}_n(a)_i=\sum_{j}(-1)^{\text{popcount}(i\cup j)}a_j\),正变换矩阵为 \(\begin{bmatrix}1&-1\\1&1\\\end{bmatrix}\),逆变换的矩阵为 \(\begin{bmatrix}\frac12&-\frac12\\\frac12&\frac12\\\end{bmatrix}\),有 \(\text{FWT}_n(a)_i=2^{-n}\sum_{j}(-1)^{\text{popcount}(i\cup j)}a_j\)
一般情况
令 $\oplus $ 为一种位运算,则
设
由于
因此
因此取 \(f(x,i\oplus j)=f(x,i)f(x,j)\) 即可满足要求

浙公网安备 33010602011771号