集合幂级数学习笔记

集合幂级数学习笔记

一、集合幂级数基础

类比形式幂级数将序列对应为一个多项式,我们可以用类似的方法,把一个集合及其所有子集变为一个多项式的形式,对于集合 U 标准形式如下:

F(x)=SUfSxS

这里 xS 只是一个占位符,就像形式幂级数的 xi 一样。

加减法

集合幂级数的加减法很简单,就是对应位置相加,即:

f±g=SU(fS±gS)xS

乘法

类比一般多项式乘法,有:

h=fg=(SUfSxS)(SUgSxS)=LURUfLgRxLR

其中 是集合间的一种二元运算,并使得 有交换律,结合律,以及单位元

常见的 集合并,集合交,集合对称差,子集卷积

二、分治解法

集合并卷积

,则有:

hS=LURU[LR=S]fLgR

暴力进行复杂度 O(4n)

集合对称差卷积

定义集合上的二元运算 表示 AB={x|(xA)(xB)} 后者的 表示异或运算。

则有:

hS=LURU[LR=S]fLgR

集合交卷积

类似,咕了。

三、快速沃尔什变换/快速莫比乌斯变换

算了我觉得 Alex_Wei 老师写太好了,我太懒了所以就不写了直接写应用吧。

四、性质

  • f=I(T(f)) ,这是因为集合卷积不会改变集合大小,而多项式乘法会让下标变大所以每次 FFT 乘法后要马上 IFFT 回来。
  • FWT 有线性性,即 T(icifi)=iciT(fi)

五、应用

下文中 T() 表示快速沃尔什变换,I() 表示快速沃尔什逆变换。Ti,T,f^ 表示对变换后的结果的每一位的值普通乘法。fi,f 表示卷积。

AT_abc212_h [ABC212H] Nim Counting - 洛谷

基础应用。

对每一堆石子生成函数有:f=S[S{A}]xS

答案为:i=1nfi 中非 x 项之外的系数之和。

那么有 i=1nfi=i=1nI(Ti(f))=I(i=1nTi(f))

其中第二个等号成立是因为 FWT 有线性性。于是用等比数列求和公示可以解决。

CF449D Jzzhu and Numbers - 洛谷

对每个数生成函数有 fi=xai+xU,其中 U=2201 即全集。那么答案为 [x]fi 其中 表示集合交卷积。

有:[x]fi=[x]I(T(fi))=[x]I(Sf^i,S) 但是这样直接计算是 O(n2) 的。

我们知道集合交卷积的 FMT 本质是高维后缀和,那么 f^i,S=[Sai]+1 所以 f^i,S=2i[Sai] 这里我们直接令 gS 表示 S{ai} 中出现的次数然后求一个 FMT 就变成了 i[Sai],即 f^i,S=2g^S 于是可以一次 FMT 加一次 IFMT 解决这道题。

CF662C Binary Table - 洛谷

注意到 n 很小,m 很大,有一种暴力的方法是枚举每行翻不翻转,然后对于每一列贡献 0/1 数量较少的那个个数。

翻转后的状态由初始状态与翻转操作状态异或得来

设第 i 列的初始状态为 ai,形式化的式子为:minx{igxai} 其中 gs 表示 s01 个数的较小值。

由于 i 与位置有关,x 与值有关,不好处理,令 ci 表示状态 i{a} 中出现的次数,答案转化为:minx{icigix} 发现 min 里面就是一个子集卷积。没发现?没关系,令 j=ixfx=icigix,有 fij=icigj 那么这用个集合对称差卷积可以求出所有的 fx 最后取最小值即可。

复杂度 O(n22n+m)

AT_abc288_g [ABC288G] 3^N Minesweeper - 洛谷

这道题设计 FWT 的一个核心思想——各位独立。

类比在推 f^i=j=02k1C(i,j)fj 的时候将 C(i,j) 拆做 i=0k1c(ik,jk),其中 ik 表示 i 在二进制下的第 k 位。 这道题本来有 Ai=j=03n1C(i,j)Bj,但是 C(i,j) 的限制也是独立的,于是同样令 C(i,j)=c(ik,jk)。我们考虑求出矩阵 c 的值。因为:

{a0=b0+b1a1=b0+b1+b2a2=b1+b2

求出 c=[110111011],直接算出 c1=[011111110]。用IFWT的方式可以算出 {B}

CF1119H Triple - 洛谷

这是一类求 i=1nj=1kwjxai,j 的值的方法,其中 为集合对称差卷积。即非 0 项系数相同但是位置不同。本题为 k=3 的特例。

首先 i=1nj=1kwjxai,j=I(i=1nT(j=1kwjxai,j))

根据 FWT 的变换式,S,[xS]j=1kwjT(xai,j) 总共有 2k 中可能的取值,即:j=1k±wi,现在我们想对于每种取值求出其出现次数。

T1,2,k,且若 T 的第 i 位为 0 就令 wi 的系数为1 否则为 0 。每种状态看作集合 T,令其出现次数为cS,T

GT=i=1nxjTai,j,考虑 [xS]FWT(G)cS, 的关系,应该有 FWT(GT)=VC(T,V)cV 讨论其系数发现 C(T,V)=(1)|TS| 这与 FWT 的 系数正好相同。即[xS]FWT(G)cS, 的 FWT,想求 c 就对 T 进行 IFWT 就行了。

复杂度 O(n2k+2m+k),其中 m 表示 ai,j 表示的集合大小,即 ai,j{0,1,2m1}

P4221 [WC2018] 州区划分 - 洛谷

半半在线子集卷积模板

由于子集卷积 fS=cSTS,TfSTgT|T|<|S|,所以完全可以仿照普通子集卷积的方式按照 |S| 的大小转移。

参考

集合幂级数相关 - qAlex_Weiq - 博客园

集合幂级数 - 题单 - 洛谷 | 计算机科学教育新生态

题解 CF1119H 【Triple】 - 洛谷专栏

CF1119H Triple - 洛谷专栏

作者:lupengheyyds

出处:https://www.cnblogs.com/lupengheyyds/p/18733711

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   lupengheyyds  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示