哈集幂大学习

15adb8f3-6ae5-47b4-ab93-ba8268332979

集合幂级数

对于序列 \(a_0\sim a_{2^n-1}\) ,定义多元多项式 \(A(x_1\sim x_n)=\sum_{0\le I\le 2^n} a_I x_1^{i_1}x_2^{i_2}\cdots x_n^{i_n}\) ,其中 \(i_1\sim i_n\)\(I\) 的二进制表示。

然后你就可以发现,这个东西本质就是集合的生成函数。

简记序列 \(a\) 的集合幂级数为 \(A(x)=\sum a_I x^I\)

进一步定义集合幂级数的乘法,也就是 \(A(x)\cdot B(x)\)

在此之前,应该先定义单项式的乘法,也就是 \(x^I\cdot x^J\),在普通的生成函数里,乘法就是普通的乘法,所以 \(x^I\cdot x^J=x^{I+J}\),这也构成了乘法卷积是下标相加的形式。集合幂级数中的乘法一般为位运算,有以下几种形式:

  1. \(x^I\cdot x^J=x^{I\oplus J}\)
  2. \(x^I\cdot x^J=x^{I\cup J}\)
  3. \(x^I\cdot x^J=x^{I\cap J}\)

性质:

与生成函数有同样的性质,对于 \(a * b= c\),有 \(A(x)\cdot B(x)=C(x)\)。其中位运算相同,以下拿或举例:

\[\begin{align*} A(x)\cdot B(x)&=(\sum a_I x^I) (\sum b_J x^J)\\ &=\sum a_Ib_Jx^{I\cup J}\\ &=C(x) \end{align*} \]

占位集合幂级数

也就是在普通的集合幂级数上加入了集合大小,定义为 \(A[z](x)=\sum a_Ix^Iz^{|I|}\),可以发现普通的集合幂级数就是 \(A[1](x)\)

子集卷积的集合幂级数做法

\(z\) 做元和参会有两种不同的做法,\(z\) 做元就是在FWT中讲到的子集卷积的做法,主要说说做参的做法。

\(A[z](x)=\sum (a_Iz^{|I|})x^I\) 其中 \(a_Iz^{|I|}\) 是第 \(I\) 项的系数,这是关于 \(z\)\(n\) 次多项式,那么在\(DMT\)\(IDMT\) 中的加减法变成了多项式的加减法,那么时间复杂度同样为 \(O(2^nn^2)\)

然后你会集合幂级数就可以学习子集卷积全家桶了,先咕咕。

posted @ 2025-12-17 11:35  liduoduo2021  阅读(14)  评论(0)    收藏  举报