集合幂级数与子集卷积
集合幂级数
在 FMT 和 FWT 里有提到过。
对于一个序列
这个多项式有
相较于 FMT 和 FWT 处,我们进一步定义集合幂级数的乘法。这是一个比较有用的概念。
简记集合幂级数为
关键在于怎么定义单项式的相乘,也就是
-
。 -
。 -
。
无论对于哪种定义,都满足交换律和结合律。同时,我们发现这三种定义和与、或、异或卷积都有关系。下面我们来看看。
引理:在
证明:
同理,把或卷积替换为与卷积、异或卷积,证明都是类似的。
这个引理表明在做集合幂级数乘法时,仍然可以使用卷积快速求得结果。类比多项式乘法用 FFT 快速计算。
子集卷积
假设我们有两个长为
就是或卷积额外要求其交集为空。也就是要求
这个问题可以
法一
来个新定义。
这可以理解为一个拆分,把序列按下标的集合大小分为不同类。
观察到
然后怎么求
将
容易给出一个算法:
-
预处理
。 -
枚举
。 -
枚举
满足 。 -
将
中大小为 的项加入 。
分析一下复杂度。
第一步预处理,
还是太慢了,我们再来一个优化:
定义
那
注:这里的点乘就是向量点乘。
注 2:这里能把
先预处理
然后
最后对每个
总复杂度为
法二
需要用到占位集合幂级数。这个东西也很有用,对集合幂级数的 exp 和 ln 都有用。
下面给出它的定义。
设有一个长度
占位集合幂级数也可以定义乘法:
我们定义
简写
引理:设
证明比较显然。不合法项在子集卷积中是不会出现的。
保留合法项是很容易的,只要
法 1
令
枚举
而对于
具体细节略去。这种方法本质和上面是相同的。不过是引入了
法 2
此种方法不同,它并非按
把
具体而言,
计算
其实没有区别,
复杂度呢?
普通数组做
对
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!