容斥与反演

容斥与反演

容斥

容斥原理

用于不重不漏地【表达/转化】某集合

广义容斥:合法方案数 = 总方案数 - 不合法方案数

狭义容斥:

\[\left|\bigcup_{i = 1}^{n}S_i\right|=\sum_{x = 1}^{n}(-1)^{x - 1}\sum_{i_1<i_2<\cdots <i_x}\left|\bigcap_{j = 1}^{x}S_{i_j}\right| \]

我们来证明一下容斥系数为什么是 \((-1)^{x - 1}\)

一个被n个集合包含的元素,那么它的容斥系数之和为:

\[\sum_{i = 1}^{n}(-1)^{i - 1}\binom{n}{i}=\sum_{i = 0}^{n}(-1)^{i-1}\binom{n}{i}-(-1)\binom{n}{0}=0-(-1)=1 \]

Min-Max容斥

\[\max(S)=\sum_{T\subseteq S}(-1)^{|T|-1}\min(T)\\ \min(S)=\sum_{T\subseteq S}(-1)^{|T|-1}\max(T) \]

其中 max(S) 表示集合 S 中所有元素的最大值。

证明:对于第k+1大的元素,有k个比它小的集合。以它为最小值的,大小为 i 的集合有 \(\binom k{i-1}\) 个,所以它的统计次数为:

\[\sum_{i = 1}^{k + 1}\binom{k}{i - 1}(-1)^{i - 1}=\sum_{i = 0}^{k}\binom{k}{i}(-1)^{i}=[k = 0] \]

推广到求第 k 大的元素:

\[\mathrm{kthmax}(S)=\sum_{T\subseteq S}(-1)^{|T|-k}\binom{|T|-1}{k - 1}\min(T)\\ \mathrm{kthmin}(S)=\sum_{T\subseteq S}(-1)^{|T|-k}\binom{|T|-1}{k - 1}\max(T) \]

其中 kthmax(S) 表示集合 S 中所有元素的第 k 大值。证明与上面的类似。

min-max容斥还有很好的期望意义,这是min-max容斥得以广泛使用的重要原因:

\[E(\max(S))=\sum_{T\subseteq S}(-1)^{|T|-1}E(\min(T))\\ E(\min(S))=\sum_{T\subseteq S}(-1)^{|T|-1}E(\max(T))\\ E(\mathrm{kthmax}(S))=\sum_{T\subseteq S}(-1)^{|T|-k}\binom{|T|-1}{k - 1}E(\min(T))\\ E(\mathrm{kthmin}(S))=\sum_{T\subseteq S}(-1)^{|T|-k}\binom{|T|-1}{k - 1}E(\max(T)) \]

反演

反演的本质就是容斥。

我们从一下几种常见的反演来讲:

二项式反演

\[f(n)=\sum_{i = 0}^{n}\binom{n}{i}g(i)\Leftrightarrow g(n)=\sum_{i = 0}^{n}(-1)^{n - i}\binom{n}{i}f(i)\\ f(n)=\sum_{i = n}^{m}\binom{i}{n}g(i)\Leftrightarrow g(n)=\sum_{i = n}^{m}(-1)^{i - n}\binom{i}{n}f(i) \]

因为第二个式子可以由第一个式子推出,所以我们先证明第一个。

组合意义证明

\(f_n\)表示恰好使用n个不同元素形成特定结构的方案数,\(g_n\)表示从n个不同元素中钦定若干个元素形成特定结构的总方案数。

于是有:\(g_n = \sum^n_{i=0}\binom{n}{i}f_i\)

使用容斥原理,可以得到:\(f_n = \sum^n_{i=0}(-1)^{n-i}\binom nmg_i\)

这个因该很好感性理解,下面是严谨证明$\downarrow $

代数证明:(某知名竞赛教练在白板上的珍贵推导过程)



例:例题

我们用矩阵描述这一过程:

\[\underbrace{ \begin{pmatrix} \binom{0}{0} & 0 & \cdots & 0 \\ \binom{1}{0} & \binom{1}{1} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ \binom{n}{0} & \binom{n}{1} & \cdots & \binom{n}{n} \end{pmatrix} }_{\boldsymbol{A}} \begin{pmatrix} f_0 \\ f_1 \\ \vdots \\ f_n \end{pmatrix} = \begin{pmatrix} g_0 \\ g_1 \\ \vdots \\ g_n \end{pmatrix} \Leftrightarrow \]

\[\underbrace{ \begin{pmatrix} \binom{0}{0} & 0 & \cdots & 0 \\ -\binom{1}{0} & \binom{1}{1} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ (-1)^n\binom{n}{0} & (-1)^{n - 1}\binom{n}{1} & \cdots & \binom{n}{n} \end{pmatrix} }_{\boldsymbol{B}} \begin{pmatrix} g_0 \\ g_1 \\ \vdots \\ g_n \end{pmatrix}= \begin{pmatrix} f_0 \\ f_1 \\ \vdots \\ f_n \end{pmatrix} \]

刚才给出的证明等价于证明A·B=I。

将A和B转置(延对角线翻着)之后得到的矩阵仍然是互逆的.

所以 \(g_m = \sum_{i = m}^{n} \binom{i}{m} f_i \Longleftrightarrow f_m = \sum_{i = m}^{n} (-1)^{i - m} \binom{i}{m} g_i\)

高维的二项式反演

\[f(x,y) = \sum_{i=x}\sum_{j=y}\binom ix\binom jyg(i,j) \Longleftrightarrow g(x,y)=\sum_{i=x}\sum_{j=y}(-1)^{i+j-x-y}\binom ix\binom jyf(x,y) \]

看起来就比较合理,具体怎么证的我还真不知道。

例题. (题解来自command_block,有小幅度改动)

题意:有一个 \(n\times n\) 的正方形网格,用三种颜色染。求有多少种方案使得至少一行或一列是同一种颜色。\(n\leq 10^6\)

令:

  • \(F(i,j)\)钦定\(i\)\(j\) 列是同种颜色,其余任意的方案数。

  • \(G(i,j)\):为恰好\(i\)\(j\) 列是同种颜色的方案数。

答案:\(3^{n^2}-G(0,0)\)

由组合意义易得

\[F(x,y)=\sum\limits_{i=x}^n\sum\limits_{j=y}^n\dbinom{i}{x}\dbinom{j}{y}G(i,j) \]

套用高维二项式反演

\[\begin{aligned} G(x,y) &=\sum\limits_{i=x}^n\sum\limits_{j=y}^n(-1)^{i+j-x-y}\dbinom{i}{x}\dbinom{j}{y}F(i,j)\\ G(0,0) &=\sum\limits_{i=0}^n\sum\limits_{j=0}^n(-1)^{i+j}F(i,j) \end{aligned} \]


接下来考虑如何快速计算 \(F(i,j)\),需要分类讨论。

  • \(i,j\neq 0\):所有被钦定的行和列必须是同种颜色

    \[F(i,j)=\dbinom{n}{i}\dbinom{n}{j}\cdot 3\cdot 3^{(n-i)(n-j)} \]

    即:选定行列 x 钦定颜色 x 其余自由部分

  • \(j=0\):被钦定的行不必是同种颜色。

    \[F(i,0)=\dbinom{n}{i}\cdot3^i\cdot3^{n(n-i)} \]

    即:选定行 x 钦定颜色 x 其余自由部分

    \(i=0\) 同理)

  • \(i=j=0\):完全自由,\(F(0,0)=3^{n^2}\)


回忆:

\[G(0,0)=\sum_{i=0}^n\sum_{j=0}^n(-1)^{i+j}F(i,j) \]

根据上述讨论,分三部分求和。

  • 第一部分:两个参数均不为 \(0\)

\[\begin{aligned} S_1 &=\sum_{i=1}^n\sum_{j=1}^n(-1)^{i+j}F(i,j)\\ &=\sum_{i=1}^n\sum_{j=1}^n(-1)^{i+j}\dbinom{n}{i}\dbinom{n}{j}3^{(n-i)(n-j)+1}\\ &=3^{n^2+1}\sum_{i=1}^n\dbinom{n}{i}(-1)^i3^{-in}\,\boxed{\sum_{j=1}^n\dbinom{n}{j}(-1)^{j}3^{j(i-n)}}\\ &=3^{n^2+1}\sum_{i=1}^n\dbinom{n}{i}(-1)^i3^{-in}\left((1-3^{i-n})^n-1\right) \end{aligned} \]

快速幂就可以 \(O(n\log n)\) 计算了。

  • 第二部分:一个参数为 \(0\)

\(i,j\)\(0\) 本质相同,只统计 \(j=0\) 的情形,然后将贡献翻倍即可。

\[\begin{aligned} S_2&=2\sum_{i=1}^n(-1)^{i}\dbinom{n}{i}^{i+n(n-i)}\\ &=2\cdot3^{n^2}\,\boxed{\sum_{i=1}^n\dbinom{n}{i}(-1)^{i}3^{i(1-n)}}\\ &=2\cdot3^{n^2}\left((1-3^{1-n})^n-1\right)\\ \end{aligned} \]

  • 第三部分:两个参数均为 \(0\)\(S_3=3^{n^2}\)

最终 \(G(0,0)=S_1+S_2+S_3\)

总复杂度 \(O(n\log n)\)

子集反演

\[f(S)=\sum_{T\subseteq S}g(T)\Longleftrightarrow g(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}f(T)\\ f(S)=\sum_{S\subseteq T}g(T)\Longleftrightarrow g(S)=\sum_{S\subseteq T}(-1)^{|T|-|S|}f(T) \]

第二个式子由第一个式子取补得到。

而对于第一个式子的证明,我们选择讲左式代入右式:

\[g(S) = \sum_{T\subseteq S}(-1)^{|S|-|T|}\sum_{X\subseteq T}g(X)=\sum_{X\subseteq S}g(X)\sum_{X\subseteq T\subseteq S}(-1)^{|S|-|T|} \]

改为枚举集合T的大小:

\[\begin{align*} \text{上式}&=\sum_{X\subseteq S}g(X)\sum_{i = |X|}^{|S|}\binom{|S|-|X|}{i - |X|}(-1)^{|S|-i}\\ &=\sum_{X\subseteq S}g(X)\sum_{i = 0}^{|S|-|X|}\binom{|S|-|X|}{i}(-1)^{|S|-|X|-i}\\ &=\sum_{X\subseteq S}g(X)[|X| = |S|]=g(S) \\\Box \end{align*} \]

对比二项式反演和子集反演,二项式反演针对的是集合的大小,是钦定 k 个数而不是钦定一个集合,而子集反演针对的就是一个集合。故二项式反演要乘上一个选数方案的组合数。

斯特林反转

\[f(n)=\sum_{k = 0}^{n}\left\{\begin{array}{l}n\\k\end{array}\right\}g(k)\Longleftrightarrow g(n)=\sum_{k = 0}^{n}(-1)^{n - k}\left[\begin{array}{l}n\\k\end{array}\right]f(k)\\ f(m)=\sum_{k = m}^{n}\left\{\begin{array}{l}k\\m\end{array}\right\}g(k)\Longleftrightarrow g(m)=\sum_{k = m}^{n}(-1)^{k - m}\left[\begin{array}{l}k\\m\end{array}\right]f(k) \]

带入用反转公式可以验证。

单位根反演

这里用 \(w_i\) 代表 \(w_i^n\)

\[\sum\limits_{i=0}^{n-1}{w_i^k}=n[n\mid k] \]

证明:

\[\sum\limits_{i=0}^{n-1}{w_i^k} = \sum\limits_{i=0}^{n-1}{w_k^i} \]

该式为等比数列,所以:

\[\sum\limits_{i=0}^{n-1}{w_k^i} = \begin{cases} &n \text{ if } w_k = 1 \\ &{1 - w_k^n \over 1 - w_k} \text{ if } w_k != 1 \end{cases} \]

观察到,\(w_k^n = w_{nk} = 1\),并且 \(w_k = 1 \Leftrightarrow n|k\)

所以上式化简为:\(\frac1n\sum\limits_{i=0}^{n-1}{w_n^{ik}}=[n\mid k]\)

用处:1. 证明 FFT。 2. 处理 [n|k]

例题:【集训队作业2018】复读机

题意:对一个长度为n的排列进行染色,一共k种颜色,要求每种颜色使用的次数都是d的倍数,求方案数。

\(d = 1\) 答案显然是 \(k^n\)

纯色生成函数:

\[F(x) = \sum_{d|i}\dfrac{x^i}{i!} \]

答案就是:

\[n![x^n]F(x)^k \]

开始大力推式子!

\[\begin{aligned} F(x) &= \sum_{d|i}\dfrac{x^i}{i!}\\ & = \sum_{i}[d|i]\dfrac{x^i}{i!}\\ & = \sum_{i}\frac1d\sum_{j=0}^{d-1}w_d^{ji}\dfrac{x^i}{i!}\\ & = \frac1d\sum_{i}\sum_{j=0}^{d-1}\dfrac{(w_d^jx)^i}{i!}\\ & = \frac1d\sum_{j=0}^{d-1}\sum_{i}\dfrac{(w_d^jx)^i}{i!}\\ & = \frac1d\sum_{j=0}^{d-1}e^{w_d^jx}\\ \end{aligned} \]

当 d = 2 时,带入原式,然后暴力二项式展开:

\[\begin{aligned} ans&=n![x^n](\frac1d\sum_{j=0}^{d-1}e^{w_d^jx})^k\\ & =n![x^n](\frac12(e^{w_0^jx}+e^{w_1^jx}))^k\\ & =n![x^n](\frac12(e^{x}+e^{-x}))^k\\ & =n![x^n]\frac1{2^k}(e^{x}+e^{-x})^k\\ & =n![x^n]\frac1{2^k}\sum_i\binom kie^{ix}e^{-(k-i)x}\\ & =n![x^n]\frac1{2^k}\sum_i\binom kie^{ix-(k-i)x}\\ & =\frac1{2^k}\sum_i\binom kin![x^n]e^{(2i-k)x}\\ & =\frac1{2^k}\sum_i\binom ki(2i-k)^n\\ \end{aligned} \]

复杂度 \(O(k\log n)\)

当 d = 3 时,还是暴力展开三项式:

\[=n![x^n]\dfrac{1}{3^k}\sum\limits_{i=0}^k\dbinom{k}{i}\sum\limits_{j=0}^i\dbinom{i}{j}e^{ix}e^{jw_3x}e^{(k-i-j)w_3^2x} \]

\[=n![x^n]\dfrac{1}{3^k}\sum\limits_{i=0}^k\dbinom{k}{i}\sum\limits_{j=0}^i\dbinom{i}{j}e^{(i+jw_3+(k-i-j)w_3^2)x} \]

提取系数得

\[=\dfrac{1}{3^k}\sum\limits_{i=0}^k\dbinom{k}{i}\sum\limits_{j=0}^i\dbinom{i}{j}\big(i+jw_3+(k-i-j)w_3^2\big)^n \]

计算复杂度为\(O(k^2\log k)\)

莫比乌斯反演

\[g(n)=\sum_{i|n}f(i)\Longleftrightarrow f(n)=\sum_{i|n}\mu\left(\frac{n}{i}\right)g(i) \]

不过这玩意一般不是这么用的,详见这里

posted @ 2025-01-30 22:49  花子の水晶植轮daisuki  阅读(41)  评论(1)    收藏  举报
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js