容斥与反演

由于笔者数学很菜,本文可能包含一些不严谨/错误之处,向大家道歉。


容斥和反演本质相同,都是通过赋系数来修正贡献的方法。

依据个人习惯,简单的容斥称为差分/单步容斥,升维称为多步容斥,采用单步容斥+递推 / 提取系数积。

常见的证明方式:考虑 \(g_a\to g_b\) 的贡献,反演也可向左/右分别代入化简。然而构造系数时并非如此,往往用已知式子 / 推理 / 猜系数 / 使用 GF 求出。


反演:有列向量 \(f,g\),下标是集合 \(A\),现有下标是集合 \(A\) 的可逆方阵 \(M\)\(M_{i,j}\)\(j\)\(i\) 的贡献系数。

\[\begin{aligned} f=Mg&\Longleftrightarrow g=M^{-1}f \\ f_i=\sum_{j\in A}M_{i,j}g_j&\Longleftrightarrow g_i=\sum_{j\in A}M^{-1}_{i,j}f_j \end{aligned} \]

转置得到另一种形式。由于 \((M^T)^{-1}=(M^{-1})^T\)

\[\begin{aligned} f=M^Tg&\Longleftrightarrow g=(M^{-1})^Tf \\ f_i=\sum_{j\in A}M_{j,i}g_j&\Longleftrightarrow g_i=\sum_{j\in A}M^{-1}_{j,i}f_j \end{aligned} \]

列向量可以是项数有限的形式幂级数/集合幂级数,\(g_{i/S}\) 常表示恰好满足 \(i\) 个条件 / \(S\) 中条件的方案数,用 \(f\) 还原 \(g\)。我们只考虑“且”,而不讨论“或”(它容易用总方案数减去不满足任何条件的方案数求出)。

反演本质是矩阵求逆,我们学习特殊的反演是在学习特殊矩阵的逆。

有时不需要反演,只需要使用相关公式推式子,仍习惯性称为反演(如“莫比乌斯反演”“欧拉反演”)。


线路 1

莫比乌斯反演 \(\to\) 子集反演 \(\to\) 二项式反演 \(\to\)(广义)容斥原理 \(\to\)(扩展)\(\min-\max\) 容斥。

\[(x+y)^n=\sum_{i=0}^n{n\choose i}x^iy^{n-i} \]

莫比乌斯反演

即多重集的子集反演。记 \(\mu(S)=\begin{cases}(-1)^{|S|}&\text{S 中无重复元素}\\0&\text{S 中有重复元素}\end{cases}\),则 \(M_{S,T}=[S\subseteq T],M^{-1}_{S,T}=[S\subseteq T]\mu(T-S)\)\(S,T\in\) 集族 \(\mathcal A\),要求 \(\forall A,B\in\mathcal A,\forall A\subseteq C\subseteq B,C\in\mathcal A\)

组合意义:超集和/子集和 \(\to\) 自己。

单步容斥+递推:高维差分 / 狄利克雷前缀/后缀差分。

证明(\(\Rightarrow\)):

作为考虑贡献系数的例子。考虑 \(B\to A\) 的贡献系数:

\[coef=\sum_CM_{C,B}M^{-1}_{A,C}=\sum_{A\subseteq C\subseteq B}\mu(C-A) \]

对于 \(A\not\subseteq B\)\(coef=0\),接下来考虑 \(A\subseteq B\)。令 \(t\) 表示 \(B-A\) 的元素种类数,则 \(\mu(C-A)\neq0\)\(C-A\) 共有 \(2^t\) 种情况,于是:

\[coef=\sum_{i=0}^t{t\choose i}(-1)^i=0^t=[t=0]=[A=B] \]

并未证明 \(\Leftarrow\) 以及转置形式(也许可以类似地证),也并未说明矩阵可逆。

更简洁的证明(\(\Leftrightarrow\)):

\(A=M,B=M^{-1}\),证明 \(AB=BA=I\)

\[\begin{gathered} (AB)_{S,T}=\sum_P A_{S,P}B_{P,T}=\sum_{S\subseteq P\subseteq T}\mu(T-P) \\ (BA)_{S,T}=\sum_P B_{S,P}A_{P,T}=\sum_{S\subseteq P\subseteq T}\mu(P-S) \end{gathered} \]

与上一个证明同理:

\[\begin{gathered} (AB)_{S,T}=[S=T] \\ (BA)_{S,T}=[S=T] \end{gathered} \]

\(AB=BA=I\),说明 \(B=A^{-1}\)。于是 \(\Leftrightarrow\)、转置形式就都有了。

关于数论 & 两个公式

分解质因数,则正整数和可重集一一对应,故集合和数论、集合幂级数和 DGF 有联系。

(此处 \(*\) 为狄利克雷卷积。)

“莫比乌斯反演”:

\[\begin{gathered} \mu*1=\epsilon \\ \sum_{d\mid n}\mu(d)=[n=1] \end{gathered} \]

“欧拉反演”:

\[\begin{gathered} \varphi*1=Id \\ \sum_{d\mid n}\varphi(d)=n \end{gathered} \]

子集反演

从多重集简化为不可重的集合,\(M_{S,T}=[S\subseteq T],M^{-1}_{S,T}=[S\subseteq T](-1)^{|T-S|}\)

例题:P3349 [ZJOI2016] 小星星UOJ #37. 【清华集训2014】主旋律

二项式反演

从不可重集合简化为集合大小,即 \(\mathcal A=2^{\{1,2,\ldots,n\}},A'=\{0,1,2,\ldots,n\},f'_i=\sum_{S\in\mathcal A,|S|=i}f_S,g'_i=\sum_{S\in\mathcal A,|S|=i}g_S\),则 \(M_{i,j}={j\choose i},M^{-1}_{i,j}=(-1)^{j-i}{j\choose i}\)

组合数的性质框定 \(j\) 的范围:

\[\begin{aligned} f_i=\sum_{j=i}^n{j\choose i}g_j&\Longleftrightarrow g_i=\sum_{j=i}^n(-1)^{j-i}{j\choose i}f_j \\ f_i=\sum_{j=0}^i{i\choose j}g_j&\Longleftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}{i\choose j}f_j \end{aligned} \]

\(f_i\) 的组合意义:钦定/最多 \(i\) 个元素,注意“钦定”“至多”不同于通常的“至少”“最多”。

单步容斥+递推:

\[\begin{aligned} f_i=\sum_{j=i}^n{j\choose i}g_j&\Longleftrightarrow g_i=f_i-\sum_{j=i+1}^n{j\choose i}g_j \\ f_i=\sum_{j=0}^i{i\choose j}g_j&\Longleftrightarrow g_i=f_i-\sum_{j=0}^{i-1}{i\choose j}g_j \end{aligned} \]

事实上,\(\mathcal A=\{S\mid S\in2^{\{1,2,\ldots,n\}},l\leq|S|\leq r\},A'=\{l,l+1,\ldots,r\}\) 也可。

例题:P4859 已经没有什么好害怕的了P6478 [NOI Online #2 提高组] 游戏

(广义)容斥原理

将“钦定”展开为集合:

\[\begin{aligned} f_i=\sum_{j=i}^n{j\choose i}g_j\Longleftrightarrow g_i&=\sum_{j=i}^n(-1)^{j-i}{j\choose i}f_j \\ &=\sum_{j=i}^n(-1)^{j-i}{j\choose i}\sum_{S\subseteq\{1,2,\ldots,n\},|S|=j}f_S \\ &=\sum_{S\subseteq\{1,2,\ldots,n\}}(-1)^{|S|-i}{|S|\choose i}f_S \end{aligned} \]

\(i=0\) 时即为容斥原理。\(f_S\) 沿用子集反演中的定义,表示至少满足 \(S\) 中条件的方案数。

\(T_i\) 表示满足第 \(i\) 个条件的情况的集合,则 \(f_S=|\bigcap\limits_{i\in S}T_i|\);特殊地,\(f_\emptyset=|U|\)\(U\) 表示全部情况的集合。也可将 \(T\) 换为概率论中的事件 \(E\)\(|T|\) 换为 \(P(E)\)\(U\) 换为 \(\Omega\)\(P(U)=1\)

例题:P4336 [SHOI2016] 黑暗前的幻想乡

(扩展)\(\min-\max\) 容斥

\(S\neq\emptyset\)

\[\begin{aligned} \max S&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}\min T \\ \min S&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}\max T \\ E(\max S)&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}E(\min T) \\ E(\min S)&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}E(\max T) \end{aligned} \]

证明:

可以计算单个元素的贡献系数,但这里使用 Jeefy 学长传授的一种概率论证明方法,它也许更自然。

\(S=\{x_1,x_2,\ldots,x_n\},\forall 1\leq i\leq n,x_i\in[0,1]\)。令 \(U\)\([0,1]\) 内的随机变量,记事件 \(A_i=\{U\leq x_i\}\),记 \(g_i\) 表示恰好有 \(i\) 个事件发生的概率,\(f_i\) 表示钦定 \(i\) 个事件发生的概率,\(g_S,f_S\) 同理表示集合 \(S\) 中的事件发生。

根据容斥原理,有:

\[P(\bigcup_{i\in S}A_i)=1-g_0=1-\sum_{i\geq0}(-1)^if_i=\sum_{i\geq1}(-1)^{i-1}f_i=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}P(\bigcap_{i\in T}A_i) \]

而我们知道:

\[\begin{aligned} P(\bigcup_{i\in S}A_i)&=\max_{i\in S}x_i \\ P(\bigcap_{i\in S}A_i)&=\min_{i\in S}x_i \end{aligned} \]

于是 \(x_i\in[0,1]\) 时第一个式子成立。对于第二个式子,将 \(x_i\) 改为 \(1-x_i\),得到 \(1-\min x_i\)\(1-\) 右式得到 \(x_i\),提出右边的 \(1\) 发现 \(\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-1}\cdot1=-(0^{|S|}-1)=1\),故 \(x_i\in[0,1]\) 时第二个式子成立。

可以通过乘非零实数构造每组 \(x_i\) 与真实的集合 \(S\) 的双射,于是 \(x_i\in R\) 时第一、二个式子得证。又由于期望的线性性,第三、四个式子也成立。

扩展:

\[\begin{aligned} kth\max S&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-k}{|T|-1\choose k-1}\min T \\ kth\min S&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-k}{|T|-1\choose k-1}\max T \\ E(kth\max S)&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-k}{|T|-1\choose k-1}E(\min T) \\ E(kth\min S)&=\sum_{T\subseteq S,T\neq\emptyset}(-1)^{|T|-k}{|T|-1\choose k-1}E(\max T) \end{aligned} \]

证明:

我们先给重复的数加减微小值,使得 \(S\) 中的数两两不同,且不影响结果。接着套用广义容斥原理,过程应该与上面类似,来不及写了,咕。

应用:常结合具体意义用于计算期望,也有直接算 \(\min,\max\) 的时候。

线路 2

斯特林反演、集合划分容斥。都是集合划分。

(记得把反转公式放上来。咕。)

斯特林反演

\[M_{i,j}={j\brace i},M^{-1}_{i,j}=(-1)^{j-i}{j\brack i},A= \]

(不会证了,上式存疑,咕)

同样具有转置形式。

组合意义:最多(例如颜色数)/ 至少(例如连通块数)\(\to\) 恰好。

例题:关于颜色那道、P10591 BZOJ4671 异或图

集合划分容斥

再次大战,终于大致理解。等价是关键。

等价类”指一个集合及元素的共性(例如值是多少),其中的元素具有某种共性(例如值相同/作为 DAG 的同一层入度为 \(0\) 的点)。一个结构由若干“极大等价类”构成,但我们只能拼“等价类”,于是集合划分容斥给等价类赋合适的系数来等效。

给定极大等价类系数 \(F(x)\)、合并方式 \(G(x)\),求容斥系数 \(H(x)\)。解方程:

\[G(H(x))=F(x) \]

求出 \(H(x)\) 后,令 \(f_i/S\) 表示大小为 \(i\) / 集合为 \(S\) 的等价类的方案数,整个结构的 GF 即为:

\[G(\sum_{i/S}[x^{i/S}]H(x)\cdot f_{i/S}x^{i/S}) \]

说明正确性:

  1. “等价类”表明乘上方案数后容斥结果仍成立,且方案数不变,即求得的是“容斥系数”。具体要求:以 \(G(x)\) 的方式拼出某极大等价类的每种情况(\(\prod\)),方案数之积相同(通常就是 \(\prod1\))。
  2. 整个结构由极大等价类拼成,最后的 GF 用乘法分配律和乘法交换律“划分”了极大等价类。

可与符号化方法结合使用,且通常需要 \(F(x),G(x)\)\(x^{0/\emptyset}\) 项系数为 \(0\)\(f_{0/\emptyset}=0\)。(存疑)

扩展:恰好 \(k\) 个极大等价类。升维,添加占位元 \(y\) 表示极大等价类个数,插值即可。

例题:P6846 [CEOI 2019] Amusement ParkAT_abc236_h [ABC236Ex] Distinct Multiples

线路 3

卷积。单位根反演 \(\to\) 快速卷积(FFT/NTT)\(\to\) 快速高维卷积(FMT/FWT)。

单位根反演

\[[n\mid k]={1\over n}\sum_{i=0}^{n-1}\omega_n^{ki} \]

证明:

等比数列求和:

\[\sum_{i=0}^{n-1}\omega_n^{ki}= \begin{cases} {1-\omega_n^{kn}\over1-\omega_n^k}=0 & \omega_n^k\neq1 \\ n & \omega_n^k=1 \end{cases} \]

我们知道 \(\omega_n^k=1\) 当且仅当 \(n\mid k\),故原式成立。该结论可用于化简整除/取模/下取整一类的式子。

反演:

\[A=\{0,1,\ldots,n-1\},M_{i,j}=\omega_n^{ij},M_{i,j}^{-1}={1\over n}\omega_n^{-ij} \]

矩阵 \(M\) 即为 \(a_j=\omega_n^j \ (0\leq j\leq n-1)\) 的范德蒙德矩阵,这样的范德蒙德矩阵又称为傅里叶矩阵。

证明:

\[\begin{gathered} (MM^{-1})_{i,j}={1\over n}\sum_{k=0}^{n-1}\omega_n^{ik}\omega_n^{-kj}={1\over n}\sum_{k=0}^{n-1}\omega_n^{k(i-j)}=[n\mid(i-j)]=[i=j] \\ (M^{-1}M)_{i,j}={1\over n}\sum_{k=0}^{n-1}\omega_n^{-ik}\omega_n^{kj}={1\over n}\sum_{k=0}^{n-1}\omega_n^{k(j-i)}=[n\mid(j-i)]=[i=j] \end{gathered} \]

\(\sum_{n\geq0}[k\mid n]f_nx^n\)

\[\begin{aligned} &\sum_{n\geq0}[k\mid n]f_nx^n \\ =&\sum_{n\geq0}{1\over k}\sum_{i=0}^{k-1}\omega_k^{ni}f_nx^n \\ =&{1\over k}\sum_{i=0}^{k-1}\sum_{n\geq0}f_n(\omega_k^ix)^n \\ =&{1\over k}\sum_{i=0}^{k-1}F(\omega_k^ix) \end{aligned} \]

快速卷积

对下标为集合 \(A=\{0,1,2,\ldots,n-1\}\) 的向量 \(f,g\),定义卷积的贡献方式为:\(f_i\times g_j\to(f*g)_{i\oplus j}\)\(\oplus\) 通常表示 \(+/\operatorname{and}/\operatorname{or}/\operatorname{xor}\)(后三者属于高维卷积),且具有封闭性。

常见的快速卷积:将向量转为“点值”向量(正演:“求值”),“点值”向量做点积,再转回原来的形式(反演:“插值”)。令点值向量 \(F=Mf,G=Mg\),则 \((f*g)=M^{-1}(F\cdot G)\)。于是我们要构造满足条件的可逆矩阵 \(M\),而 FFT/NTT 则用于优化矩阵乘法。

考虑限制(必要条件):

\[\begin{gathered} (Mf)\cdot(Mg)=M(f*g) \\ (Mf)_t\cdot(Mg)_t=[M(f*g)]_t \\ (\sum_{i\in A}M_{t,i}f_i)(\sum_{j\in A}M_{t,j}g_j)=\sum_{i\in A}\sum_{j\in A}M_{t,i\oplus j}f_ig_j \end{gathered} \]

于是令 \(M_{t,i}M_{t,j}=M_{t,i\oplus j}\),利用该条件构造,再检验 \(M\) 是否可逆即可。对于小矩阵可以手动高消求逆;求逆也可找性质。

\(i\oplus j=\min\{i,j\}\)

\(M_{t,i}M_{t,j}=M_{t,\min\{i,j\}}\),乘起来相当于“且”,于是令 \(M_{t,i}=[i\geq t]\) 即可。

正演是后缀和,则反演是后缀差分,即 \(M^{-1}_{i,j}=\begin{cases}1&j=i\\-1&j=i+1\\0&\text{else}\end{cases}\)

\(i\oplus j=\max\{i,j\}\)

同理,正演是前缀和,反演是前缀差分。

\(i\oplus j=(i+j)\bmod n\)

循环卷积。令 \(M\) 为傅里叶矩阵,则 \(M\) 可逆,且 \(\omega_n\) 的性质使 \(M_{t,i}M_{t,j}=M_{t,(i+j)\bmod n}\)

FFT/NTT 利用单位根的性质来优化该矩乘。

\(F(x)=\sum_{i=0}^{n-1}f_ix^i\),则 \((Mf)_i=F(\omega_n^i)\),那么正演就是多项式多点求值,而反演就是插值。

\(i\oplus j=i+j\)

只需令 \(n\) 足够大,使得 \(\forall f_i\neq0,g_j\neq0,i+j<n\),就是循环卷积。

也可仍使用傅里叶矩阵,但由点值的意义直接得到 \((Mf)_t\cdot(Mg)_t=[M(f*g)]_t\)

推荐阅读:link1link2

快速高维卷积

通常是集合幂级数的卷积,例如 \(\operatorname{and}/\operatorname{or}/\operatorname{xor}\) 卷积,每个维度独立进行 \(\oplus\) 卷积,再拼到一起(甚至可以让不同维度有不同的 \(\oplus\))。

考虑限制:

  • \(M'_{t,i}M'_{t,j}=M'_{t,i\oplus j}\)\(t,i,j\) 是高维的,\(\oplus\) 表示所有维度的整个卷积)。令 \(M'_{i,j}=\prod_kM_{i_k,j_k}\)(枚举 \(i,j\) 在第 \(k\) 个维度上的值),则我们只对单个维度构造矩阵 \(M\) 即可。
  • \(M'\) 可逆。不方便,我们直接倒着做(要倒序枚举维度),乘 \(M\) 的逆矩阵(限制 \(M\) 可逆),这样也保证了结果唯一。

\(\operatorname{and}\) / 高维 \(\operatorname{min}\) 卷积

单个维度 \(\oplus=\min\),FMT/FWT。

\(\operatorname{or}\) / 高维 \(\operatorname{max}\) 卷积

单个维度 \(\oplus=\max\),FMT/FWT。

\(k\) 进制)\(\operatorname{xor}\) 卷积

单个维度 \(n=k\) 循环卷积(\(k\) 进制),FWT。

FMT

用于快速计算高维前缀/后缀和(正演)、高维前缀/后缀差分(反演),从而快速计算高维的 \(\min/\max\) 卷积。

高维前缀和:按任意顺序依次考虑维度,设 \(s_{i,j}\)\(i\) 是维度数,\(j\) 是高维的下标)表示前 \(i\) 个维度要求是 \(j\) 的前 \(i\) 个维度形成的可重集的子集,剩余维度要求与 \(j\) 相同的 \(k\)\(\sum f_k\)。扩大 \(i\),在当前维度做前缀和转移即可。

高维前缀差分:倒着 DP 回去(枚举维度的顺序与正演相反)。

FWT

用于快速计算高维卷积。

正演:

  • 按任意顺序考虑维度。设 \(s_{i,j}\) 表示 \(k\) 在第 \(>i\) 个维度相同的 \(f_k\) 分一类,对每一类的前 \(i\) 个维度跑正演的结果(\(>i\) 的维度数值不变)。

  • \(i-1\to i\) 转移时,首先枚举“等价类”(第 \(>i\) 个维度相同),再转移等价类内第 \(i\) 维的正演。由于贡献系数(\(M'\))是每一维的 \(\prod\),我们将等价类内第 \(<i\) 个维度相同的所有值写成一个向量,用这一维的矩阵 \(M'\) 乘它得到新的向量,再填回去即可。

  • 综合起来:枚举除第 \(i\) 维其他维度的情况,用 \(M'\) 分别乘每组的向量。

反演:

  • 倒序处理(枚举维度的顺序与正演相反),乘 \(M^{-1}\)

也可理解为分治。

  • 注意到每维独立,故可以乘不同的 \(M'\),于是可以有不同的 \(\oplus\)
  • 若单维度的卷积是循环卷积/多项式乘法,则可以用 FFT/NTT 优化。

杂项

反射容斥、走回容斥、拉格朗日反演。


参考:

2025.8.3&4&5&6 & 2025.9.1

posted @ 2025-12-11 11:44  FirCone  阅读(1)  评论(0)    收藏  举报