集合幂级数学习笔记
集合幂级数
定义与 FWT
类似于形式幂级数,
对于一个全集,我们定义集合幂级数 。
我们可以用一个长为 的 2 进制数表示一个集合,集合的并、交、对称差分别对应二进制数的 。
我们可以定义集合幂级数的并卷积、交卷积、对称差卷积:
我们思考我们熟知的形式幂级数 以及循环卷积的快速做法,对需要卷积的两个序列的系数施以一个合适的线性变换,进行点积,再进行逆变换得到答案。(三种卷积的线性变换分别是前缀和,后缀和,DFT)
由于对于 来说按位独立,我们考虑将一个 位 2 进制数看成 维向量,我们可以将原本的集合幂级数看成 元的形式幂级数:。
那么集合幂级数的三种卷积就是对 元都做 以及循环卷积的结果。
我们可以得到 3 种 FWT 的线性变换:
并卷积:。
交卷积:。
异或卷积:。
FWT 的应用
使用 FWT 可以高效的处理集合幂级数卷积,有一些经典的技巧值得注意。
例 1
考虑求解集合幂级数 (异或卷积)。
我们可以直接考虑 这样的式子 FWT 后的形式,即 。
那么 只有两种取值:0 或 2。我们如果知道 个二项式 FWT 后的结果有多少个 0,2,那么这 个值乘起来后的结果也唾手可得,再进行一次 IFWT 即可得到答案。
我们考虑统计 即可解得 0,2 的个数。使用 FWT 计算该式即可。
子集卷积
单纯的并、交、对称差卷积可能并不够用,存在一些特别的问题可以抽象成子集卷积的形式。
我们定义子集卷积:
考虑通过扩元转化成我们已知的卷积。
,定义 元做并卷积, 做加法卷积,那么子集卷积出的形式幂级数取 即可。
由于每一元独立,我们考虑先对 元做 FWT 变换,直接处理 元的加法卷积,最后对 元逆变换回来即可。
时间复杂度 。
子集卷积意义下的初等函数
对于 的集合幂级数,在子集卷积意义下可以定义 ,我们将并卷积意义下的集合幂级数看成黑盒,由于其有乘法,乘常数,和普通加法卷积意义下形式幂级数一样考虑 就行了。
具体的,将子集卷积中间处理 元的加法卷积的部分,改成处理 的部分即可, 同理,均可以做到 。
可以以一道例题理解其组合意义:给定一个无向图,求其每个子集的划分成若干独立集的方案数。
记 表示集合 是否为独立集,那么对其做子集卷积意义下的 运算得到的集合幂级数就是答案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】