FWT小记
终于可以开始写了。
这玩意也不难来着。
高维前缀和。
本质就是分维度
例题:先暂时没有。
FWT
造轮子。
\(C_i =\sum\limits_{j \otimes k} A_j B_k\)
\(\otimes\) 表示某种运算。
FFT 告诉我们卷积直接很困难,但是点积很简单,所以考虑找到他的线性变换。
令变换后的项叫做 \(\text{FWT(A)}\)
使用待定系数 $\text{FWT(A)} = \sum\limits_{j=0}^{n-1} c(i,j) A_j $
\[\begin{aligned}
\text{FWT(C)} &= \text{FWT(A)} \cdot \text{FWT(B)} \\
\sum\limits_{i=0}^{n-1} c(i,j) C_j &= \sum\limits_{j=0}^{n-1} c(i,j) A_j \times \sum\limits_{j=0}^{n-1} c(i,j) B_j \\
\sum\limits_{j=0}^{n-1} c(i,j) C_j &= \sum_{j=0} ^{n-1} \sum_{k=0}^{n-1} c(i,j) c(i,k) A_j B_k
\end{aligned}
\]
\[\begin{aligned}
C_i &=\sum\limits_{j \otimes k} A_j B_k \\
\text{FWT(C)}_i &=\sum_{p=0}^{n-1} c(i,p) \sum\limits_{j \otimes k = p} A_j B_k
\end{aligned}
\]
联立上下
\[\begin{aligned}
\sum_{j=0} ^{n-1} \sum_{k=0}^{n-1} c(i,j) c(i,k) A_j B_k &= \sum_{p=0}^{n-1} c(i,p) \sum\limits_{j \otimes k = p} A_j B_k \\
\sum_{j=0} ^{n-1} \sum_{k=0}^{n-1} c(i,j) c(i,k) A_j B_k & =\sum_{p=0}^{n-1} \sum\limits_{j \otimes k = p} c(i, j \otimes k) A_j B_k \\
\sum_{j=0} ^{n-1} \sum_{k=0}^{n-1} c(i,j) c(i,k) A_j B_k &=\sum_{j=0} ^{n-1} \sum_{k=0}^{n-1} c(i, j \otimes k) A_j B_k
\end{aligned}
\]
所以我们有 \(c(i,j)c(i,k)= c(i, j \otimes k)\),枚举状态,得到矩阵。

浙公网安备 33010602011771号