1. 定义
设全集 U={1,2,3,…,n} 和环 R(例如全体整数和加法、乘法构成的整数环)。在 U 和 R 上定义集合幂级数 F 为从 S⊆U 到 R 的映射,即一个大小为 2n 的数组,Fi 为 i 对应的集合 S(用二进制表示每个元素是否存在)映射到的 R 中的元素。
定义集合幂级数间的运算:
- 加法:(F+G)S=FS+GS;
- 并乘法:(F∗G)S=X,Y⊆U,X∪Y=S∑FXGY;
- 乘法(无交并乘法):(F×G)S=X⊆S∑FXGS−X
2. 高维前缀和(FMT)
定义集合幂级数的高维前缀和(FMT):
FMT(F)S=T⊆S∑FT
显然可以在 O(n2n) 的复杂度内求出,而其逆变换 IFMT 也可以在 O(n2n) 的复杂度内完成。
考虑其性质:
- FMT(F+G)S=T⊆S∑FT+GT=FMT(F)+FMT(G);
- FMT(F∗G)S=T⊆S∑X,Y⊆U,X∪Y=T∑FXGY=X,Y⊆U,X∪Y⊆S∑FXGY=FMT(F)S×FMT(G)S;
于是 F∗G 可以通过两次 FMT 加一次 IFMT 完成,复杂度 O(n2n)。
而对于 FMT(F×G),注意到相当于在计算 FMT(F∗G) 的同时要求 ∣X∣+∣Y∣=∣S∣,那么我们可以令 R′=R[x],即 R 上的多项式环,并令 FS′=x∣S∣FS,GS′=x∣S∣GS,则 FMT(F×G)S=[x∣S∣]FMT(F′∗G′)S。
于是 F×G 可以通过 R[x] 上的两次 FMT,一次多项式乘法和一次 IFMT 完成,复杂度 n22n。
3. 集合幂级数和形式幂级数复合
对于同样定义在 R 上的正指数形式幂级数 H(x)∈R[x],设其为 H(x)=i=1∑∞hixi。定义集合幂级数 F 在 H 上的复合 H(F):
H(F)=i=1∑∞hiFi
其中 Fi 为 i 个 F 的无交并乘积。
这里假定 F∅=0,否则可能不收敛。那么显然 i>n 的 Fi 为全零映射,故 H(F)=i=1∑nhiFi。
考虑无交并乘积的计算过程,注意到有 FMT(H(F))S=i=1∑nhiFMT(Fi)S=i=1∑nhi[x∣S∣]FMT(F′)Si,所以可以直接 O(n32n) 算出。
但是对于一些特殊的 H,例如 exp 和 ln,[x∣S∣]FMT(F′)Si 往往可以快速算出,可以做到 O(n22n)。