一.补集转化.
有些计数题直接做并不好做,但是统计所有情况和它的反面情况更加容易的时候,我们就可以考虑用所有情况减去反面情况来做.
形式化的,若集合S的大小不好求,但是对于一个集合U满足S⊆U,U的大小很好求,而且同时S的补集∁US的大小也很好求,那么就可以使用这个式子:
∣S∣=∣U∣−∣∁US∣
很多计数题中都需要用到这个套路,我们称这个套路为补集转化.
二.容斥原理.
考虑对于一种情况下,我们要求⋃i=1nSi的大小,但是那并不好求怎么办?
考虑两个集合的情况,可以补集转化,先分别加上S1和S2的大小,再减去S1∩S2的大小.
形式化的,即:
∣S1∪S2∣=∣S1∣+∣S2∣−∣S1∩S2∣
考虑三个集合的情况,仍然是补集转化,先分别加上S1,S2,S3的大小,再减去S1∩S2,S1∩S3,S2∩S3的并的大小.
但是我们会发现这三个交的并的大小也并不好求,考虑再次补集转化,变为分别减去S1∩S2,S1∩S3,S2∩S3的大小,再加上S1∩S2∩S3的大小.
形式化的,即:
∣S1∪S2∪S3∣=∣S1∣+∣S2∣+∣S3∣−∣S1∩S2∣−∣S1∩S3∣−∣S2∩S3∣+∣S1∩S2∩S3∣
一次类推,我们可以得到一个结论.即n个集合的并的大小等于这n个集合的大小之和减去所有两个集合的交的大小之和,再加上所有三个集合的交的大小之和,再减去…
形式化的,即:
∣∣∣∣∣i=1⋃nSi∣∣∣∣∣=T⊆[n],T≠∅∑(−1)∣T∣−1∣∣∣∣∣i∈T⋂Si∣∣∣∣∣
我们称这个结论为容斥原理.
当然容斥原理反过来也是正确的,即:
∣∣∣∣∣i=1⋂nSi∣∣∣∣∣=T⊆[n],T≠∅∑(−1)∣T∣−1∣∣∣∣∣i∈T⋃Si∣∣∣∣∣
三.严谨证明容斥原理.
证明:
考虑数学归纳法,假设现在已经加入了n个集合:
1.当n=1,2时,定理显然成立.
2.当n>2时,假设k<n时定理成立,则k=n时有:
∣∣∣∣∣i=1⋃kSi∣∣∣∣∣=∣∣∣∣∣(i=1⋃k−1Si)∪Sk∣∣∣∣∣=∣∣∣∣∣(i=1⋃k−1Si)∣∣∣∣∣+∣Sk∣−∣∣∣∣∣(i=1⋃k−1Si)∩Sk∣∣∣∣∣=∣∣∣∣∣(i=1⋃k−1Si)∣∣∣∣∣+∣Sk∣−∣∣∣∣∣i=1⋃k−1(Si∩Sk)∣∣∣∣∣=T⊆[k−1]∑(−1)∣T∣−1∣∣∣∣∣i∈T⋂Si∣∣∣∣∣+∣Sk∣+T⊆[k−1]∑(−1)∣T∣−1∣∣∣∣∣i∈T⋂(Si∩Sk)∣∣∣∣∣=T⊆[k−1]∑(−1)∣T∣−1∣∣∣∣∣i∈T⋂Si∣∣∣∣∣+∣Sk∣+T⊆[k−1]∑(−1)∣T∣−1∣∣∣∣∣(i∈T⋂Si)∩Sk∣∣∣∣∣=T⊆[k]∑(−1)∣T∣−1∣∣∣∣∣i∈T⋂Si∣∣∣∣∣
证毕.
四.二项式反演.
二项式反演具体有三个形式:
fi=j=0∑i(−1)j(ji)gj⇔gi=j=0∑i(−1)j(ji)fjfi=j=0∑i(ji)gj⇔gi=j=0∑i(−1)i−j(ji)fjfi=j=i∑n(ij)gj⇔gi=j=i∑n(−1)j−i(ij)fj
这个东西具体的证明啥的就去参考二项式定理相关吧…
五.广义容斥原理.
我们把二项式反演看成容斥原理在对于任意k满足k个集合的交的贡献都相等的情况就行了,这样式子就变得清晰了很多.
具体来说,如果i个集合并起来的贡献为fi,那么式子fi=∑j=0i(−1)j(ji)gj中的gi就表示i个集合交起来的贡献,这是我们熟知的容斥原理,但是我们突然发现交的贡献也可以通过并的贡献来求出了.
那么这个式子在贡献不同的情况下是否成立呢?当然是成立的,也就是说我们有了一个新的公式.
广义容斥原理:
f(i=1⋃nSi)=T⊆[n]∑(−1)∣T∣−1f(i∈T⋂Si)⇔f(i=1⋂nSi)=T⊆[n]∑(−1)∣T∣−1f(i∈T⋃Si)
当然这个式子在乘积的意义下也是成立的,即:
f(i=1⋃nSi)=T⊆[n]∏f(−1)∣T∣−1(i∈T⋂Si)⇔f(i=1⋂nSi)=T⊆[n]∏f(−1)∣T∣−1(i∈T⋃Si)
当然我们还可以构造出一个等价的式子(注意这个式子中必须算入空集的贡献):
f(i=1⋃nSi)=T⊆[n]∑f(i∈T⋂Si)⇔f(i=1⋂nSi)=T⊆[n]∑(−1)n−∣T∣f(i∈T⋃Si)
六.min-max反演.
min-max反演算是上面广义容斥原理的一个应用,它的作用是用反演实现一个集合内元素的min和max之间的转化.
我们将每一个整数n看成一个集合S(n)={1,2,3,...,n},那么集合S对应的原数就是max{S}.
显然我们有:
i=1minn{ai}=max(i=1⋂nS(ai))i=1maxn{ai}=max(i=1⋃nS(ai))
定义max(∅)=0.
然后就可以推导:
i=1maxn{ai}=max{i=1⋃nS(ai)}=T⊆[n]∑(−1)∣T∣−1max{i=1⋂mS(ai)}=T⊆[n]∑(−1)∣T∣−1i∈Tmin{ai}
同理有:
i=1minn{ai}=T⊆[n]∑(−1)∣T∣−1i∈Tmax{ai}
那么我们得到了一个反演,称之为min-max反演:
i=1maxn{ai}=T⊆[n]∑(−1)∣T∣−1i∈Tmin{ai}⇔i=1minn{ai}=T⊆[n]∑(−1)∣T∣−1i∈Tmax{ai}
根据期望的线性性,这个式子在期望的意义下仍然成立,即:
E(i=1maxn{ai})=T⊆[n]∑(−1)∣T∣−1E(i∈Tmin{ai})⇔E(i=1minn{ai})=T⊆[n]∑(−1)∣T∣−1E(i∈Tmax{ai})
七.多重集的广义容斥原理.
对于多重集S1={c1x∗x},S2{c2x∗x},分别定义它们的并和交为:
S1∪S2={x∈S1∪x∈S2∣max{c1x,c2x}∗x}S1∩S2={x∈S1∩x∈S2∣min{c1x,c2x}∗x}
对于这个意义下的多重集,集合的广义容斥原理仍然成立,有:
f(i=1⋃nSi)=T⊆[n]∑(−1)∣T∣−1f(i∈T⋂Si)⇔f(i=1⋂nSi)=T⊆[n]∑(−1)∣T∣−1f(i∈T⋃Si)
至于为什么成立,可以把多重集中每个元素x看成x1,x2,⋯,xcx,只是它们的贡献是相同的(相当于一个二维的广义容斥原理),这样就可以把式子转化为普通集合的广义容斥原理了.
同样的,多重集的广义容斥原理在乘积的意义下同样成立.
八.gcd-lcm反演.
与min-max反演类似,gcd-lcm反演是通过多重集的广义容斥原理来推导出一个集合的gcd和lcm之间的反演关系式的.
我们考虑把一个数n唯一分解成素因数,记这个素因数多重集为S(n).
然后我们定义函数f(S)表示将S内的所有数的乘积,即f(S)=∏i∈Si.
显然我们有:
gcdi=1n(ai)=f(i=1⋂nS(ai))lcmi=1n(ai)=f(i=1⋃nS(ai))
定义max(∅)=1.
开始推导:
lcmi=1n{ai}=f(i=1⋃nS(ai))=T⊆[n]∏f(−1)∣T∣−1(i=1⋂nS(ai))=T⊆[n]∏gcdi∈T(−1)∣T∣−1(ai)
反过来也是一样的,所以gcd-lcm反演即:
lcmi=1n{ai}=T⊆[n]∏gcdi∈T(−1)∣T∣−1(ai)⇔gcdi=1n{ai}=T⊆[n]∏lcmi∈T(−1)∣T∣−1(ai)