Pearblossom

FMT/FWT学习笔记

FMT

卷积

\(FMT\) 或卷积和与卷积是相似的,都是一个类似高维前缀和,这里只讲述或卷积.

或卷积就是要实现一个 \(C=A \times B\),这里的乘号表示卷积,使得\(C_{S}=\sum_{u \cup v=S}A_{u} \times B_{v}\) ,这里的乘号表示数值的相乘.

首先我们可以直接暴力枚举子集,复杂度是 \(O(4^n)\) 的,考虑优化.

分治

我们将当前集合中的最大元拎出来单独考虑,那么 \(C=C^{-}+x^{n}C^{+}\)\(A,B\) 同理,那么\(A\times B = (A^{-}+x^{n}A^{+})\times(B^{-}+x^{n}B^{+})=A^{-}\times B^{-}+x^{n}(A^{+}\times B^{-}+A^{-}\times B^{-}+A^{+}\times B^{+})=A^{-}\times B^{-}+x^{n}((A^{-}+A^{+})\times(B^{-}+B^{+})-A^{-}\times B^{-})\) ,那么复杂度就变成了 \(T(n)=2T(\frac{n}{2})+O(n)=O(nlogn)\),所以复杂度就变成了\(O(n2^n)\).

FMT(迭代)

考虑将上述递归过程改成迭代的形式,观察式子发现可以先让前一半的系数加到后一半上,再对应位相乘(因为到底部是就是对应位相乘),再用后半部分减去前半部分即可.

FWT

集合对称差卷积

分治

还是将 \(A\) 根据是否有最大元拆开,\(A=A^{-}+x^{n}A^{+}\) ,那么卷积就会变成\(A^{-} \times B^{-}+A^{+}\times B^{+}+x^{n}(A^{+}\times B^{-}+A^{+}\times B^{-})\),如果直接两两卷积,时间复杂度仍然是 \(O(n^4)\).令\(p=(A^{+}+A^{-})\times(B^{+}+B^{-}),q=(A^{+}-A^{-})\times(B^{+}-B^{-})\) ,那么原式就变成了 $ \frac{p+q}{2} + x^{n} \frac{p-q}{2}$,这样就只用进行两次卷积.

FWT

异或卷积就是形如 \(C=A \times B\),使得 \(C_{S}=\sum_{u \oplus v=S}A_{u}\times B_{v}\).

首先有恒等式 \(\frac{1}{2^n}\sum_{T \in 2^U}(-1)^{|S \cap T|}=[S= \emptyset]\).

同时还有式子 \(A = B \leftrightarrow A \oplus B= \emptyset\)\((A \oplus B)\cap C=(A\cap C)\oplus(B\cap C)\)

那么现在就可以化柿子了,\(C_{S}=\sum_{u \oplus v \oplus S = \emptyset} \sum_{T \in 2^U}(-1)^{|(u \oplus v \oplus S)\cap T|}A_{u}\times B_{v}=\sum_{T\in 2^U}(-1)^{|S \cap T|} \times \sum_{u\in 2^U}(-1)^{|u\cap T|}f_u \sum_{v\in 2^U}(-1)^{|v\cap T|}g_v\) ,那么我们就可以让 \(f^{'}{u}=(-1)^{|u|}f_u\) ,那么就有 \(h^{'}=f^{'}\times g^{'}\) ,逆变换同样可以根据上面的式子得出 \(f_S=\sum_{T\in 2^U}(-1)^{|S\cup T|}f^{'}S\) .

考虑怎么计算这个东西,枚举子集 \(O(3^n)\) ,但还不够.

由于位运算的各位独立性,我们逐位的考虑贡献,\(f=f^{-}+x{n}f^{+}\) ,发现正负由交集的大小决定,那么对于 \(f_S^{'-}\) 中对 \(f_S\) 的贡献系数为 \(1\) ,对 \(f_{S∪n}\) 的贡献系数同样为 \(1\) ,剩下的系数为 \(1,0\) ,逆变换的话还要在最后乘上 \(\frac{1}{2^n}\) .

其他的也同理.

矩阵实现的理解

记号 :\(\cdot\) 表示卷积 ,\(\times\) 表示直接的数值乘积.

我们希望实现一个这样的卷积 \(h_S=\sum_{u \oplus v=S} f_u \times g_v\) ,其中的 \(\oplus\) 为按位异或/按位与/按位或的操作,定义 \(f^{'}_S=\sum_{T\in 2^U} C(S,T)\times f_T\),希望能够实现 \(h^{'}=f^{'} \times g^{'}\) ,化柿子,\(h^{'}_S=\sum_{T\in 2^U} C(S,T)h_T =\sum_{T\in 2^U}C(S,T)\sum_{u\in 2^U}f_u \sum_{v\in 2^U}[u\oplus v=T]f_u\times g_v = \sum_{u\in 2^U} \sum_{v\in 2^U} C(S,u\oplus v) f_u\times g_v = \sum_{u\in 2^U} C(S,u)f_u \times \sum_{v\in 2^U}C(S,v)g_v \times [u\oplus v=S]\),那么就要求 \(C(S,u\oplus v)=C(S,u)\times C(S,v)\) .这是第一个限制.

于此同时,我们希望 \(C(S,T)\) 的各位之间的运算结果相互独立,即有 \(C(S,T)=\prod_{i} C(S_i,T_i)\) .

当前在考虑第 \(i\) 位,那么当 \(S\) 的第 \(i\) 位为 \(0\) 时,有转移 \(f_S=C(0,0)\times f_S^{-} + C(0,1)\times f_S^{+}\).第 \(i\) 位为 \(1\) 也一样.

Problem

AT_arc100_c [ARC100E] Or Plus Max

对于第 \(i\) 位,在其他位相同的情况下,第 \(i\) 位为 \(0\) 的可以贡献给第 \(i\) 位为 \(1\) 的答案,那么就是一个高维前缀和的形式,直接进行一个前缀 \(max\) 即可.

posted on 2025-09-27 23:00  Pearblossom  阅读(0)  评论(0)    收藏  举报

导航