集合幂级数&FMT 学习笔记

1. 定义

设全集 U={1,2,3,,n}U=\{1,2,3,\dots,n\} 和环 RR(例如全体整数和加法、乘法构成的整数环)。在 UURR 上定义集合幂级数 FF 为从 SUS\subseteq URR 的映射,即一个大小为 2n2^n 的数组,FiF_iii 对应的集合 SS(用二进制表示每个元素是否存在)映射到的 RR 中的元素。

定义集合幂级数间的运算:

  • 加法:(F+G)S=FS+GS(F+G)_S=F_S+G_S
  • 并乘法:(FG)S=X,YU,XY=SFXGY(F*G)_S=\sum\limits_{X,Y\subseteq U,X\cup Y =S}F_XG_Y
  • 乘法(无交并乘法):(F×G)S=XSFXGSX(F\times G)_S=\sum\limits_{X\subseteq S} F_XG_{S-X}

2. 高维前缀和(FMT)

定义集合幂级数的高维前缀和(FMT):

FMT(F)S=TSFT\text{FMT}(F)_S=\sum\limits_{T\subseteq S} F_T

显然可以在 O(n2n)O(n2^n) 的复杂度内求出,而其逆变换 IFMT\text{IFMT} 也可以在 O(n2n)O(n2^n) 的复杂度内完成。

考虑其性质:

  • FMT(F+G)S=TSFT+GT=FMT(F)+FMT(G)\text{FMT}(F+G)_S=\sum\limits_{T\subseteq S}F_T+G_T=\text{FMT}(F)+\text{FMT}(G)
  • FMT(FG)S=TSX,YU,XY=TFXGY=X,YU,XYSFXGY=FMT(F)S×FMT(G)S\text{FMT}(F*G)_S=\sum\limits_{T\subseteq S}\sum\limits_{X,Y\subseteq U,X\cup Y = T} F_XG_Y=\sum\limits_{X,Y\subseteq U,X\cup Y\subseteq S} F_XG_Y=\text{FMT}(F)_S\times \text{FMT}(G)_S

于是 FGF*G 可以通过两次 FMT\text{FMT} 加一次 IFMT\text{IFMT} 完成,复杂度 O(n2n)O(n2^n)

而对于 FMT(F×G)\text{FMT}(F\times G),注意到相当于在计算 FMT(FG)\text{FMT}(F*G) 的同时要求 X+Y=S|X|+|Y|=|S|,那么我们可以令 R=R[x]R'=R[x],即 RR 上的多项式环,并令 FS=xSFSF'_S=x^{|S|}F_SGS=xSGSG'_S=x^{|S|}G_S,则 FMT(F×G)S=[xS]FMT(FG)S\text{FMT}(F\times G)_S=[x^{|S|}]\text{FMT}(F'*G')_S

于是 F×GF\times G 可以通过 R[x]R[x] 上的两次 FMT\text{FMT},一次多项式乘法和一次 IFMT\text{IFMT} 完成,复杂度 n22nn^22^n

3. 集合幂级数和形式幂级数复合

对于同样定义在 RR 上的正指数形式幂级数 H(x)R[x]H(x)\in R[x],设其为 H(x)=i=1hixiH(x)=\sum\limits_{i=1}^\infin h_ix^i。定义集合幂级数 FFHH 上的复合 H(F)H(F)

H(F)=i=1hiFiH(F)=\sum\limits_{i=1}^\infin h_iF^i

其中 FiF^iiiFF 的无交并乘积。

这里假定 F=0F_\empty=0,否则可能不收敛。那么显然 i>ni>nFiF_i 为全零映射,故 H(F)=i=1nhiFiH(F)=\sum\limits_{i=1}^n h_iF^i

考虑无交并乘积的计算过程,注意到有 FMT(H(F))S=i=1nhiFMT(Fi)S=i=1nhi[xS]FMT(F)Si\text{FMT}(H(F))_S=\sum\limits_{i=1}^nh_i\text{FMT}(F^i)_S=\sum\limits_{i=1}^nh_i[x^{|S|}]\text{FMT}(F')^i_S,所以可以直接 O(n32n)O(n^32^n) 算出。

但是对于一些特殊的 HH,例如 exp\expln\ln[xS]FMT(F)Si[x^{|S|}]\text{FMT}(F')^i_S 往往可以快速算出,可以做到 O(n22n)O(n^22^n)