集合幂级数
集合到整数
设 \(n\) 元集 \(A = a_1, a_2, \cdots, a_n\),定义 \(A\) 的幂集 \(2^{A} = \{S\mid S \subseteq A\}\) 到整数集 \(\mathbb{Z}\) 的映射 \(\text{id}\) 为:
若 \(S = \{a_{i_1}, a_{i_2}, \cdots, a_{i_k}\}\),则 \(\text{id}(S) = \sum_{j = 1}^{k}2^{i_j - 1}\),即状态压缩。
- \(\text{id}\) 定义了 \(2^A\) 到 \([0, 2^{n} - 1]\) 的一一映射。
- \(\text{id}(S\cup T) = \text{id}(S) \text{ | } \text{id}(T)\)。
- \(\text{id}(S\cap T) = \text{id}(S) \text{ & } \text{id}(T)\)。
- \(\text{id}(S \triangle T) = \text{id}(S) \text{ ^ } \text{id}(T)\)。(\(S \triangle T = S\cup T - S\cap T\))
子集枚举:(枚举子集的子集)
for(int i = 0; i < 1 << n; ++ i) {
for(int s = i; s; s = (s - 1) & i) {
//
if(s == 0) break;
}
}
集合幂级数
给每个 \(S \in 2^A\) 赋予一个权值 \(w(S)\),则它关联的集合幂级数为 \(f(x) = \sum_{S\subseteq A} w(S)x^{\text{id}(S)}\)。
与、或、异或卷积
对于集合幂级数 \(A, \ B\),他们的与卷积 \(C = A * B\),满足 \(c_k = \sum\limits_{i \&j = k}a_ib_j\),或和异或有类似定义。
与卷积中的单位元:\(e(x) = x^{2^n - 1}\),满足 \(\forall f(x) * e(x) = f(x)\)。
性质:\(\sum_{S\subseteq T}w(T) = [x^{\text{id}(S)}]f(x) * (1 + x + \cdots+ x^{2^n - 1})\)。(超集和)
快速沃尔什变换
对于集合幂级数 \(A, B\),求他们的与卷积 \(C\)。
思路:\(A, B \xrightarrow{\mathcal F} A', B' \rightarrow C'\xrightarrow{\mathcal F^{-1}} C\)。(\(\mathcal F\) 是某种变换)
标签:卷积,text,sum,笔记,幂级数,集合,FWT,id From: https://www.cnblogs.com/Luxinze/p/18206815