集合幂级数学习笔记
FWT
并非集幂核心内容,鸽了。
子集卷积
给定 \(f_S,g_S\),其中 \(S\subseteq\{0,1\}^n\),求
\[h_S=\sum_{T\subseteq S}f_Tg_{S/T}
\]
称这样的卷积方式为子集卷积,\(T\) 与 \(S/T\) 的不交并为 \(S\)。
考虑按 \(|S|\) 分类,这样 \(T_1\) 与 \(T_2\) 不交并为 \(S\) 等价于 \(|T_1|+|T_2|=|S|\) 且 \(T_1\cup T_2=S\)。
设 \(f'_{i,S}\) 和 \(g'_{i,S}\),将 \(f_S\rightarrow f_{|S|,S}\)。则先对每一行(第一维相同)分别或运算 FWT,再把每一列做卷积,再对每一行或运算 IFWT,\(h_S=h'_{|S|,S}\)。
这相当于枚举了子集卷积定义式中的 \(|T|\) 和 \(|S/T|\),从而保证不交。
占位多项式
考虑从另一个角度理解子集卷积,按 \(|S|\) 分组相当于 \(f_S\leftarrow x^{|S|}f_S\),称 \(x^{|S|}f_S\) 为占位多项式。子集卷积就是把转为占位多项式后的 \(f\) 先做 FWT,再对每一位卷积,再 IFWT。这是因为 FWT 把或卷积变为了逐位乘,只需要用占位多项式保证不交即可。
exp
求占位多项式,再 FWT,做多项式 exp(暴力做 \(\mathcal{O}(n^2)\)),再 IFWT 即可。还是因为 FWT 把所有运算都变成了逐位运算。
通用做法
求占位多项式,做 FWT,逐位做对应运算,再 IFWT 即可。

浙公网安备 33010602011771号