容斥原理相关

不打扰是莪最后的温柔 提交于 2019-11-29 11:47:45

一.补集转化.

有些计数题直接做并不好做,但是统计所有情况和它的反面情况更加容易的时候,我们就可以考虑用所有情况减去反面情况来做.

形式化的,若集合SS的大小不好求,但是对于一个集合UU满足SUS \subseteq UUU的大小很好求,而且同时SS的补集US\complement_{U}^{S}的大小也很好求,那么就可以使用这个式子:
S=UUS |S|=|U|-|\complement_{U}^{S}|

很多计数题中都需要用到这个套路,我们称这个套路为补集转化.


二.容斥原理.

考虑对于一种情况下,我们要求i=1nSi\bigcup_{i=1}^{n}S_i的大小,但是那并不好求怎么办?

考虑两个集合的情况,可以补集转化,先分别加上S1S_1S2S_2的大小,再减去S1S2S_1\cap S_2的大小.

形式化的,即:
S1S2=S1+S2S1S2 |S_1\cup S_2|=|S_1|+|S_2|-|S_1\cap S_2|

考虑三个集合的情况,仍然是补集转化,先分别加上S1,S2,S3S_1,S_2,S_3的大小,再减去S1S2,S1S3,S2S3S_1\cap S_2,S_1\cap S_3,S_2\cap S_3的并的大小.

但是我们会发现这三个交的并的大小也并不好求,考虑再次补集转化,变为分别减去S1S2,S1S3,S2S3S_1\cap S_2,S_1\cap S_3,S_2\cap S_3的大小,再加上S1S2S3S_1\cap S_2\cap S_3的大小.

形式化的,即:
S1S2S3=S1+S2+S3S1S2S1S3S2S3+S1S2S3 |S_1\cup S_2\cup S_3|=|S_1|+|S_2|+|S_3|-|S_1\cap S_2|-|S_1\cap S_3|-|S_2\cap S_3|+|S_1\cap S_2\cap S_3|

一次类推,我们可以得到一个结论.即nn个集合的并的大小等于这nn个集合的大小之和减去所有两个集合的交的大小之和,再加上所有三个集合的交的大小之和,再减去…

形式化的,即:
i=1nSi=T[n],T≠(1)T1iTSi \left|\bigcup_{i=1}^{n}S_i\right|=\sum_{T\subseteq [n],T=\not{}\empty}(-1)^{|T|-1}\left|\bigcap_{i\in T}S_i\right|

我们称这个结论为容斥原理.

当然容斥原理反过来也是正确的,即:
i=1nSi=T[n],T≠(1)T1iTSi \left|\bigcap_{i=1}^{n}S_i\right|=\sum_{T\subseteq [n],T=\not{}\empty}(-1)^{|T|-1}\left|\bigcup_{i\in T}S_i\right|



三.严谨证明容斥原理.

证明:
考虑数学归纳法,假设现在已经加入了nn个集合:
1.当n=1,2n=1,2时,定理显然成立.
2.当n>2n>2时,假设k<nk<n时定理成立,则k=nk=n时有:
i=1kSi=(i=1k1Si)Sk=(i=1k1Si)+Sk(i=1k1Si)Sk=(i=1k1Si)+Ski=1k1(SiSk)=T[k1](1)T1iTSi+Sk+T[k1](1)T1iT(SiSk)=T[k1](1)T1iTSi+Sk+T[k1](1)T1(iTSi)Sk=T[k](1)T1iTSi \left|\bigcup_{i=1}^{k}S_i\right|=\left|\left(\bigcup_{i=1}^{k-1}S_i\right)\cup S_k\right|\\ =\left|\left(\bigcup_{i=1}^{k-1}S_i\right)\right|+|S_k|-\left|\left(\bigcup_{i=1}^{k-1}S_i\right)\cap S_k\right|\\ =\left|\left(\bigcup_{i=1}^{k-1}S_i\right)\right|+|S_k|-\left|\bigcup_{i=1}^{k-1}(S_i\cap S_k)\right|\\ =\sum_{T\subseteq [k-1]}(-1)^{|T|-1}\left|\bigcap_{i\in T}S_i\right|+|S_k|+\sum_{T\subseteq [k-1]}(-1)^{|T|-1}\left|\bigcap_{i\in T}(S_i\cap S_k)\right|\\ =\sum_{T\subseteq [k-1]}(-1)^{|T|-1}\left|\bigcap_{i\in T}S_i\right|+|S_k|+\sum_{T\subseteq [k-1]}(-1)^{|T|-1}\left|\left(\bigcap_{i\in T}S_i\right)\cap S_k\right|\\ =\sum_{T\subseteq [k]}(-1)^{|T|-1}\left|\bigcap_{i\in T}S_i\right|

证毕.


四.二项式反演.

二项式反演具体有三个形式:
fi=j=0i(1)j(ij)gjgi=j=0i(1)j(ij)fjfi=j=0i(ij)gjgi=j=0i(1)ij(ij)fjfi=j=in(ji)gjgi=j=in(1)ji(ji)fj f_i=\sum_{j=0}^{i}(-1)^{j}\binom{i}{j}g_j\Leftrightarrow g_i=\sum_{j=0}^{i}(-1)^{j}\binom{i}{j}f_j\\ f_i=\sum_{j=0}^{i}\binom{i}{j}g_j\Leftrightarrow g_i=\sum_{j=0}^{i}(-1)^{i-j}\binom{i}{j}f_j\\ f_i=\sum_{j=i}^{n}\binom{j}{i}g_j\Leftrightarrow g_i=\sum_{j=i}^{n}(-1)^{j-i}\binom{j}{i}f_j

这个东西具体的证明啥的就去参考二项式定理相关吧…


五.广义容斥原理.

我们把二项式反演看成容斥原理在对于任意kk满足kk个集合的交的贡献都相等的情况就行了,这样式子就变得清晰了很多.

具体来说,如果ii个集合并起来的贡献为fif_i,那么式子fi=j=0i(1)j(ij)gjf_i=\sum_{j=0}^{i}(-1)^{j}\binom{i}{j}g_j中的gig_i就表示ii个集合交起来的贡献,这是我们熟知的容斥原理,但是我们突然发现交的贡献也可以通过并的贡献来求出了.

那么这个式子在贡献不同的情况下是否成立呢?当然是成立的,也就是说我们有了一个新的公式.

广义容斥原理
f(i=1nSi)=T[n](1)T1f(iTSi)f(i=1nSi)=T[n](1)T1f(iTSi) f\left(\bigcup_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}f\left(\bigcap_{i\in T}S_i\right)\Leftrightarrow f\left(\bigcap_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}f\left(\bigcup_{i\in T}S_i\right)

当然这个式子在乘积的意义下也是成立的,即:
f(i=1nSi)=T[n]f(1)T1(iTSi)f(i=1nSi)=T[n]f(1)T1(iTSi) f\left(\bigcup_{i=1}^{n}S_i\right)=\prod_{T\subseteq [n]}f^{(-1)^{|T|-1}}\left(\bigcap_{i\in T}S_i\right)\Leftrightarrow f\left(\bigcap_{i=1}^{n}S_i\right)=\prod_{T\subseteq [n]}f^{(-1)^{|T|-1}}\left(\bigcup_{i\in T}S_i\right)

当然我们还可以构造出一个等价的式子(注意这个式子中必须算入空集的贡献):
f(i=1nSi)=T[n]f(iTSi)f(i=1nSi)=T[n](1)nTf(iTSi) f\left(\bigcup_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}f\left(\bigcap_{i\in T}S_i\right)\Leftrightarrow f\left(\bigcap_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}(-1)^{n-|T|}f\left(\bigcup_{i\in T}S_i\right)



六.min-max反演.

min-max反演算是上面广义容斥原理的一个应用,它的作用是用反演实现一个集合内元素的min和max之间的转化.

我们将每一个整数nn看成一个集合S(n)={1,2,3,...,n}S(n)=\{1,2,3,...,n\},那么集合SS对应的原数就是max{S}\max\{S\}.

显然我们有:
mini=1n{ai}=max(i=1nS(ai))maxi=1n{ai}=max(i=1nS(ai)) \min_{i=1}^{n}\{a_i\}=\max\left( \bigcap_{i=1}^{n} S(a_i)\right)\\ \max_{i=1}^{n}\{a_i\}=\max\left( \bigcup_{i=1}^{n} S(a_i) \right)

定义max()=0\max(\empty)=0.

然后就可以推导:
maxi=1n{ai}=max{i=1nS(ai)}=T[n](1)T1max{i=1mS(ai)}=T[n](1)T1miniT{ai} \max_{i=1}^{n}\{a_i\}=\max\left\{\bigcup_{i=1}^{n}S(a_i)\right\}\\ =\sum_{T\subseteq [n]}(-1)^{|T|-1}\max\left\{ \bigcap_{i=1}^{m}S(a_i) \right\}\\ =\sum_{T\subseteq [n]}(-1)^{|T|-1}\min_{i\in T}\{a_i\}

同理有:
mini=1n{ai}=T[n](1)T1maxiT{ai} \min_{i=1}^{n}\{a_i\}=\sum_{T\subseteq [n]}(-1)^{|T|-1}\max_{i\in T}\{a_i\}

那么我们得到了一个反演,称之为min-max反演
maxi=1n{ai}=T[n](1)T1miniT{ai}mini=1n{ai}=T[n](1)T1maxiT{ai} \max_{i=1}^{n}\{a_i\}=\sum_{T\subseteq [n]}(-1)^{|T|-1}\min_{i\in T}\{a_i\}\Leftrightarrow \min_{i=1}^{n}\{a_i\}=\sum_{T\subseteq [n]}(-1)^{|T|-1}\max_{i\in T}\{a_i\}

根据期望的线性性,这个式子在期望的意义下仍然成立,即:
E(maxi=1n{ai})=T[n](1)T1E(miniT{ai})E(mini=1n{ai})=T[n](1)T1E(maxiT{ai}) E\left(\max_{i=1}^{n}\{a_i\}\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}E\left(\min_{i\in T}\{a_i\}\right)\Leftrightarrow E\left(\min_{i=1}^{n}\{a_i\}\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}E\left(\max_{i\in T}\{a_i\}\right)



七.多重集的广义容斥原理.

对于多重集S1={c1xx},S2{c2xx}S_1=\{c1_x*x\},S_2\{c2_x*x\},分别定义它们的并和交为:
S1S2={xS1xS2max{c1x,c2x}x}S1S2={xS1xS2min{c1x,c2x}x} S_1\cup S_2=\{x\in S_1\cup x\in S_2|\max\{c1_x,c2_x\}*x\}\\ S_1\cap S_2=\{x\in S_1\cap x\in S_2|\min\{c1_x,c2_x\}*x\}

对于这个意义下的多重集,集合的广义容斥原理仍然成立,有:
f(i=1nSi)=T[n](1)T1f(iTSi)f(i=1nSi)=T[n](1)T1f(iTSi) f\left(\bigcup_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}f\left(\bigcap_{i\in T}S_i\right)\Leftrightarrow f\left(\bigcap_{i=1}^{n}S_i\right)=\sum_{T\subseteq [n]}(-1)^{|T|-1}f\left(\bigcup_{i\in T}S_i\right)

至于为什么成立,可以把多重集中每个元素xx看成x1,x2, ,xcxx_{1},x_{2},\cdots,x_{c_x},只是它们的贡献是相同的(相当于一个二维的广义容斥原理),这样就可以把式子转化为普通集合的广义容斥原理了.

同样的,多重集的广义容斥原理在乘积的意义下同样成立.


八.gcd-lcm反演.

与min-max反演类似,gcd-lcm反演是通过多重集的广义容斥原理来推导出一个集合的gcd和lcm之间的反演关系式的.

我们考虑把一个数nn唯一分解成素因数,记这个素因数多重集为S(n)S(n).

然后我们定义函数f(S)f(S)表示将SS内的所有数的乘积,即f(S)=iSif(S)=\prod_{i\in S}i.

显然我们有:
gcdi=1n(ai)=f(i=1nS(ai))lcmi=1n(ai)=f(i=1nS(ai)) gcd_{i=1}^{n}(a_i)=f\left( \bigcap_{i=1}^{n}S(a_i) \right)\\ lcm_{i=1}^{n}(a_i)=f\left( \bigcup_{i=1}^{n}S(a_i) \right)

定义max()=1\max(\empty)=1.

开始推导:
lcmi=1n{ai}=f(i=1nS(ai))=T[n]f(1)T1(i=1nS(ai))=T[n]gcdiT(1)T1(ai) lcm_{i=1}^{n}\{a_i\}=f\left(\bigcup_{i=1}^{n} S(a_i)\right)\\ =\prod_{T\subseteq [n]}f^{(-1)^{|T|-1}}\left(\bigcap_{i=1}^{n}S(a_i)\right)\\ =\prod_{T\subseteq[n]}gcd^{(-1)^{|T|-1}}_{i\in T}(a_i)

反过来也是一样的,所以gcd-lcm反演即:
lcmi=1n{ai}=T[n]gcdiT(1)T1(ai)gcdi=1n{ai}=T[n]lcmiT(1)T1(ai) lcm_{i=1}^{n}\{a_i\}=\prod_{T\subseteq[n]}gcd^{(-1)^{|T|-1}}_{i\in T}(a_i)\Leftrightarrow gcd_{i=1}^{n}\{a_i\}=\prod_{T\subseteq[n]}lcm^{(-1)^{|T|-1}}_{i\in T}(a_i)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!