前言

我还是太菜了
容斥之类的方法并不能熟练应用
于是这次我就认真学习了一下容斥
你可能会发现,容斥与反演很多时候都会同时出现
那么,这两个东西分别是什么、究竟有什么关系呢?

容斥

我们先从定义说起
什么是容斥?

容斥原理: 先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理

贴出最经典的容斥原理的式子
设现在有nnn个条件P1,P2⋅⋅⋅PnP_1,P_2···P_nP1​,P2​⋅⋅⋅Pn​,满足这些条件的集合分别是A1,A2⋅⋅⋅AnA_1,A_2···A_nA1​,A2​⋅⋅⋅An​
∣A1∪A2∪...∪An∣=∑i=1n(−1)i−1∑∣T∣=i,T={x1...xi}∣Ax1∩Ax2∩...∩Axi∣|{A_1}\cup{A_2}\cup...\cup{A_n}|=\sum_{i=1}^n(-1)^{i-1}\sum_{|T|=i,T=\{x_1...x_i\}}|{A_{x_1}}\cap{A_{x_2}}\cap...\cap{A_{x_i}}|∣A1​∪A2​∪...∪An​∣=i=1∑n​(−1)i−1∣T∣=i,T={x1​...xi​}∑​∣Ax1​​∩Ax2​​∩...∩Axi​​∣
当直接计算左式并不方便的时候,就能转化成右式解决问题了
证明:
对于某个∣T∣=i,T={x1...xi}|T|=i,T=\{x_1...x_i\}∣T∣=i,T={x1​...xi​},其对应的集合为∣Ax1∩Ax2∩...∩Axi∣|{A_{x_1}}\cap{A_{x_2}}\cap...\cap{A_{x_i}}|∣Ax1​​∩Ax2​​∩...∩Axi​​∣,它应当被计算一次,我们现在来进行证明
它被计算的次数根据组合数可得:
Ans=∑j=1i(−1)j−1(ij)=−(∑j=1i(−1)j(ij))+1−1=1−(∑j=0i(−1)j(ij))=1−(∑j=0i(−1)j1i−j(ij))=1−(1−1)j=1\begin{aligned} Ans&=\sum_{j=1}^i(-1)^{j-1}\binom{i}{j}\\ &=-(\sum_{j=1}^i(-1)^j\binom{i}{j})+1-1\\ &=1-(\sum_{j=0}^i(-1)^j\binom{i}{j})\\ &=1-(\sum_{j=0}^i(-1)^j1^{i-j}\binom{i}{j})\\ &=1-(1-1)^j\\ &=1 \end{aligned}Ans​=j=1∑i​(−1)j−1(ji​)=−(j=1∑i​(−1)j(ji​))+1−1=1−(j=0∑i​(−1)j(ji​))=1−(j=0∑i​(−1)j1i−j(ji​))=1−(1−1)j=1​
中间用到的是二项式定理(百度百科链接),然后证毕
在实际使用容斥的时候,我们如果要计算所有条件都不满足的方案数,只要用全集减就好了,即∣A1‾∩A2‾∩...∩An‾∣=∣U∣−∣A1∪A2∪...∪An∣|\overline{A_1}\cap\overline{A_2}\cap...\cap\overline{A_n}|=|U|-|{A_1}\cup{A_2}\cup...\cup{A_n}|∣A1​​∩A2​​∩...∩An​​∣=∣U∣−∣A1​∪A2​∪...∪An​∣
例题:[bzoj4455]小星星

反演

我对反演的理解

什么是反演呢?
有两个数组f,gf,gf,g,已知他们之间的关系:fi=∑j=0iai,jgjf_i=\sum_{j=0}^ia_{i,j}g_jfi​=j=0∑i​ai,j​gj​
现在你获得了所有的fff的值,求每个ggg的值
考虑这件事请的本质,相当于是给你nnn个线性方程
a0,0g0+a0,1g1⋅⋅⋅a0,ngn=f0a1,0g0+a1,1g1⋅⋅⋅a1,ngn=f1⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅=⋅⋅⋅an,0g0+an,1g1⋅⋅⋅an,ngn=fn\begin{aligned} a_{0,0}g_0+a_{0,1}g_1···a_{0,n}g_n&=f_0\\ a_{1,0}g_0+a_{1,1}g_1···a_{1,n}g_n&=f_1\\ ···\ \ \ \ \ \ \ \ ···\ \ \ ···\ \ ···\ \ \ &=\ ···\\ a_{n,0}g_0+a_{n,1}g_1···a_{n,n}g_n&=f_n\\ \end{aligned}a0,0​g0​+a0,1​g1​⋅⋅⋅a0,n​gn​a1,0​g0​+a1,1​g1​⋅⋅⋅a1,n​gn​⋅⋅⋅        ⋅⋅⋅   ⋅⋅⋅  ⋅⋅⋅   an,0​g0​+an,1​g1​⋅⋅⋅an,n​gn​​=f0​=f1​= ⋅⋅⋅=fn​​
已知所有的aaa和fff,求ggg
很不幸的是,这个直接高斯消元的复杂度是Θ(n3)\Theta(n^3)Θ(n3)的,不够优越
但是我们发现这里有一个性质,那就是所有ai,ja_{i,j}ai,j​满足i&lt;ji&lt;ji<j的值都是000
那么也就是说这是一个下三角矩阵,那么直接高斯消元就是Θ(n2)\Theta(n^2)Θ(n2)的了
真是非常优越,但是当前这个算法并不能Θ(n)\Theta(n)Θ(n)求单个gig_igi​的值
考虑Θ(n2)\Theta(n^2)Θ(n2)高斯消元的过程,我们发现对于gig_igi​的值有影响的fjf_jfj​一定满足j≤ij\le ij≤i,并且贡献为一个系数bi,jb_{i,j}bi,j​(这个系数可以从aaa推过来)
如果我们有办法快速的能将bbb求出来,那么我们就能Θ(n)\Theta(n)Θ(n)的求单个gig_igi​的值了
事实上,对于随便的一组aaa并没有办法快速求出bbb,但是如果aaa比较特殊那就可以
已知一组aaa,找到一组bbb满足:fi=∑j=0iai,jgj⇔gi=∑j=0ibi,jfjf_i=\sum_{j=0}^ia_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^ib_{i,j}f_jfi​=j=0∑i​ai,j​gj​⇔gi​=j=0∑i​bi,j​fj​
以上是常见反演的形式,之后的讲解以此类为主

ex(拓展)

当然反演还有一个更广义的形式,在下个部分中也会有exexex这一项提到这个
fi=∑j=0nai,jgj⇔gi=∑j=0nbi,jfjf_i=\sum_{j=0}^{n}a_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^{n}b_{i,j}f_jfi​=j=0∑n​ai,j​gj​⇔gi​=j=0∑n​bi,j​fj​
容易发现这个形式相当于是线性方程组的系数都是有值的,自然反演过来跟gig_igi​有关的也是所有的fif_ifi​了

反演的a,ba,ba,b之间的关系

既然我们是已知aaa求bbb,那么aaa和bbb之间一定有某种关系
首先我们引入克罗内克函数(Kronecker delta)
δij={0,i≠j1,i=j\delta_{ij}=\begin{cases}0,i\ne j\\ 1,i=j \end{cases}δij​={0,i̸​=j1,i=j​
是不是看起来非常简单呢
然后就有个同样很显然的式子fi=∑j=0iδijfjf_i=\sum_{j=0}^i\delta_{ij}f_jfi​=j=0∑i​δij​fj​
然后我们回到式子fi=∑j=0iai,jgj⇔gi=∑j=0ibi,jfjf_i=\sum_{j=0}^ia_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^ib_{i,j}f_jfi​=j=0∑i​ai,j​gj​⇔gi​=j=0∑i​bi,j​fj​把第二个式子代入第一个式子
fi=∑j=0iai,jgj=∑j=0iai,j∑k=0jbj,kfk=∑k=0i(∑j=kiai,jbj,k)fk\begin{aligned}f_i&amp;=\sum_{j=0}^ia_{i,j}g_j\\ &amp;=\sum_{j=0}^ia_{i,j}\sum_{k=0}^jb_{j,k}f_k\\ &amp;=\sum_{k=0}^i(\sum_{j=k}^ia_{i,j}b_{j,k})f_k \end{aligned}fi​​=j=0∑i​ai,j​gj​=j=0∑i​ai,j​k=0∑j​bj,k​fk​=k=0∑i​(j=k∑i​ai,j​bj,k​)fk​​
发现和前面的式子非常像
得出∑j=kiai,jbj,k=δi,k\sum_{j=k}^ia_{i,j}b_{j,k}=\delta_{i,k}j=k∑i​ai,j​bj,k​=δi,k​
如果a,ba,ba,b满足这个式子,那么上面的反演就可以成立了,如果一个反演是成立的,那么其也一定满足这个式子

ex(拓展)

考虑广义的反演
fi=∑j=0nai,jgj⇔gi=∑j=0nbi,jfjf_i=\sum_{j=0}^{n}a_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^{n}b_{i,j}f_jfi​=j=0∑n​ai,j​gj​⇔gi​=j=0∑n​bi,j​fj​
它也有相应的判定式子∑j=0nai,jbj,k=δi,k\sum_{j=0}^na_{i,j}b_{j,k}=\delta_{i,k}j=0∑n​ai,j​bj,k​=δi,k​
证明同理,有兴趣的同学可以自己手推

常见的反演

二项式反演

二项式这个东西非常常见,它也对应了一个非常经典的反演——二项式反演
二项式反演有两种式子,我们来分别证明吧
经典式
fi=∑j=0i(−1)j(ij)gj⇔gi=∑j=0i(−1)j(ij)fjf_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_jfi​=j=0∑i​(−1)j(ji​)gj​⇔gi​=j=0∑i​(−1)j(ji​)fj​
列出a,ba,ba,b的值,ai,j=(−1)j(ij),bi,j=(−1)j(ij)a_{i,j}=(-1)^j\binom{i}{j},b_{i,j}=(-1)^j\binom{i}{j}ai,j​=(−1)j(ji​),bi,j​=(−1)j(ji​)
代入
∑j=kiai,jbj,k=∑j=ki(−1)j(ij)∗(−1)k(jk)=∑j=ki(−1)j+k(ij)(jk)=∑j=ki(−1)j+k(ik)(i−ki−j)=(ik)(−1)k∑j=ki(−1)j(i−ki−j)=(ik)(−1)k∑j=0i−k(−1)i−j(i−kj)={(ik)(−1)k(1−1)i−k(i≠k)(ik)(−1)k(i=k)={0(i≠k)1(i=k)=δi,k\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&amp;=\sum_{j=k}^i(-1)^j\binom{i}{j}*(-1)^k\binom{j}{k}\\ &amp;=\sum_{j=k}^i(-1)^{j+k}\binom{i}{j}\binom{j}{k}\\ &amp;=\sum_{j=k}^i(-1)^{j+k}\binom{i}{k}\binom{i-k}{i-j}\\ &amp;=\binom{i}{k}(-1)^k\sum_{j=k}^i(-1)^j\binom{i-k}{i-j}\\ &amp;=\binom{i}{k}(-1)^k\sum_{j=0}^{i-k}(-1)^{i-j}\binom{i-k}{j}\\ &amp;=\begin{cases} \binom{i}{k}(-1)^k(1-1)^{i-k}&amp;(i\neq k)\\ \binom{i}{k}(-1)^k&amp;(i=k) \end{cases}\\ &amp;=\begin{cases} 0&amp;(i\neq k)\\ 1&amp;(i=k) \end{cases}\\ &amp;=\delta_{i,k} \end{aligned}j=k∑i​ai,j​bj,k​​=j=k∑i​(−1)j(ji​)∗(−1)k(kj​)=j=k∑i​(−1)j+k(ji​)(kj​)=j=k∑i​(−1)j+k(ki​)(i−ji−k​)=(ki​)(−1)kj=k∑i​(−1)j(i−ji−k​)=(ki​)(−1)kj=0∑i−k​(−1)i−j(ji−k​)={(ki​)(−1)k(1−1)i−k(ki​)(−1)k​(i̸​=k)(i=k)​={01​(i̸​=k)(i=k)​=δi,k​​
补充一下,对于中间有一部用到了如下式子:
(ab)(bc)=a!b!(a−b)!⋅b!c!(b−c)!=a!(a−b)!c!(b−c)!=a!c!(a−c)!⋅(a−c)!(a−b)!(b−c)!=(ac)(a−ca−b)\begin{aligned} \binom{a}{b}\binom{b}{c}&amp;=\frac{a!}{b!(a-b)!}·\frac{b!}{c!(b-c)!}\\ &amp;=\frac{a!}{(a-b)!c!(b-c)!}\\ &amp;=\frac{a!}{c!(a-c)!}·\frac{(a-c)!}{(a-b)!(b-c)!}\\ &amp;=\binom{a}{c}\binom{a-c}{a-b} \end{aligned}(ba​)(cb​)​=b!(a−b)!a!​⋅c!(b−c)!b!​=(a−b)!c!(b−c)!a!​=c!(a−c)!a!​⋅(a−b)!(b−c)!(a−c)!​=(ca​)(a−ba−c​)​
更常用的式子
fi=∑j=0i(ij)gj⇔gi=∑j=0i(−1)i−j(ij)fjf_i=\sum_{j=0}^i\binom{i}{j}g_j\Leftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}\binom{i}{j}f_jfi​=j=0∑i​(ji​)gj​⇔gi​=j=0∑i​(−1)i−j(ji​)fj​
同样可以证明
列出a,ba,ba,b的值:ai,j=(ij),bi,j=(−1)i−j(ij)a_{i,j}=\binom{i}{j},b_{i,j}=(-1)^{i-j}\binom{i}{j}ai,j​=(ji​),bi,j​=(−1)i−j(ji​)
代入
∑j=kiai,jbj,k=∑j=ki(ij)∗(−1)j−k(jk)=∑j=ki(ij)∗(−1)j−k(jk)∗(−1)k+k=∑j=ki(−1)j+k(ij)(jk)=δi,k\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&amp;=\sum_{j=k}^i\binom{i}{j}*(-1)^{j-k}\binom{j}{k}\\ &amp;=\sum_{j=k}^i\binom{i}{j}*(-1)^{j-k}\binom{j}{k}*(-1)^{k+k}\\ &amp;=\sum_{j=k}^i(-1)^{j+k}\binom{i}{j}\binom{j}{k}\\ &amp;=\delta_{i,k} \end{aligned}j=k∑i​ai,j​bj,k​​=j=k∑i​(ji​)∗(−1)j−k(kj​)=j=k∑i​(ji​)∗(−1)j−k(kj​)∗(−1)k+k=j=k∑i​(−1)j+k(ji​)(kj​)=δi,k​​
容易发现,代入以后稍微转化一下就和第一个式子的证明一样了
当然,二项式反演还有一个形式(其实本质相同)
fi=∑j=0i(n−jn−i)gj⇔gi=∑j=0i(−1)i−j(n−jn−i)fjf_i=\sum_{j=0}^i\binom{n-j}{n-i}g_j\Leftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}\binom{n-j}{n-i}f_jfi​=j=0∑i​(n−in−j​)gj​⇔gi​=j=0∑i​(−1)i−j(n−in−j​)fj​
列出a,ba,ba,b的值:ai,j=(n−jn−i),bi,j=(−1)i−j(n−jn−i)a_{i,j}=\binom{n-j}{n-i},b_{i,j}=(-1)^{i-j}\binom{n-j}{n-i}ai,j​=(n−in−j​),bi,j​=(−1)i−j(n−in−j​)
代入
∑j=kiai,jbj,k=∑j=ki(n−jn−i)∗(−1)j−k(n−kn−j)=∑j=ki(n−jn−i)∗(−1)j−k(n−kn−j)∗(−1)k+k=∑j=ki(−1)j+k(n−kn−j)(n−jn−i)=∑j=ki(−1)j+k(n−kn−i)(i−ki−j)=(n−kn−i)(−1)k∑j=ki(−1)j(i−ki−j)=(n−kn−i)(−1)k∑j=0i−k(−1)i−j(i−kj)={(n−kn−i)(−1)k(1−1)i−k(i≠k)(n−kn−i)(−1)k(i=k)={0(i≠k)1(i=k)=δi,k\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&amp;=\sum_{j=k}^i\binom{n-j}{n-i}*(-1)^{j-k}\binom{n-k}{n-j}\\ &amp;=\sum_{j=k}^i\binom{n-j}{n-i}*(-1)^{j-k}\binom{n-k}{n-j}*(-1)^{k+k}\\ &amp;=\sum_{j=k}^i(-1)^{j+k}\binom{n-k}{n-j}\binom{n-j}{n-i}\\ &amp;=\sum_{j=k}^i(-1)^{j+k}\binom{n-k}{n-i}\binom{i-k}{i-j}\\ &amp;=\binom{n-k}{n-i}(-1)^k\sum_{j=k}^i(-1)^j\binom{i-k}{i-j}\\ &amp;=\binom{n-k}{n-i}(-1)^k\sum_{j=0}^{i-k}(-1)^{i-j}\binom{i-k}{j}\\ &amp;=\begin{cases} \binom{n-k}{n-i}(-1)^k(1-1)^{i-k}&amp;(i\neq k)\\ \binom{n-k}{n-i}(-1)^k&amp;(i=k) \end{cases}\\ &amp;=\begin{cases} 0&amp;(i\neq k)\\ 1&amp;(i=k) \end{cases}\\ &amp;=\delta_{i,k} \end{aligned}j=k∑i​ai,j​bj,k​​=j=k∑i​(n−in−j​)∗(−1)j−k(n−jn−k​)=j=k∑i​(n−in−j​)∗(−1)j−k(n−jn−k​)∗(−1)k+k=j=k∑i​(−1)j+k(n−jn−k​)(n−in−j​)=j=k∑i​(−1)j+k(n−in−k​)(i−ji−k​)=(n−in−k​)(−1)kj=k∑i​(−1)j(i−ji−k​)=(n−in−k​)(−1)kj=0∑i−k​(−1)i−j(ji−k​)={(n−in−k​)(−1)k(1−1)i−k(n−in−k​)(−1)k​(i̸​=k)(i=k)​={01​(i̸​=k)(i=k)​=δi,k​​
式子通过推导可以变成
f(i)=∑j=in(ji)g(j)⇔g(i)=∑j=in(−1)j−i(ji)f(j)f(i)=\sum_{j=i}^n\binom jig(j)\Leftrightarrow g(i)=\sum_{j=i}^n(-1)^{j-i}\binom jif(j)f(i)=j=i∑n​(ij​)g(j)⇔g(i)=j=i∑n​(−1)j−i(ij​)f(j)
大体的过程都挺相似的,例题:[bzoj3622]已经没有什么好害怕的了

斯特林反演

接下来讲斯特林反演啦
预备知识是两类斯特林数
不会的同学可以看我的博客
第一类斯特林数
第二类斯特林数
列出斯特林反演的式子(注意,本式子中的第一类斯特林数是有符号的)
fi=∑j=0i{ij}gj⇔gi=∑j=0i[ij]fjf_i=\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}g_j\Leftrightarrow g_i=\sum_{j=0}^i\begin{bmatrix}i\\j\end{bmatrix}f_jfi​=j=0∑i​{ij​}gj​⇔gi​=j=0∑i​[ij​]fj​
证明:
首先,我们已知两类斯特林数很好的性质(证明在第二类斯特林数的博客中):xn↓=∑i=0n[ni]xix^{n\downarrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^ixn↓=i=0∑n​[ni​]xi
xn=∑i=0n{ni}xi↓x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}x^{i\downarrow}xn=i=0∑n​{ni​}xi↓
(这里插入一道应用例题CF 932 E)
将222式带入111式,得到
xn↓=∑i=0n[ni]xi=∑i=0n[ni]∑j=0i{ij}xj↓=∑i=0n∑j=0i[ni]{ij}xj↓\begin{aligned} x^{n\downarrow}&amp;=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i\\ &amp;=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}x^{j\downarrow}\\ &amp;=\sum_{i=0}^n\sum_{j=0}^i\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}x^{j\downarrow}\\ \end{aligned}xn↓​=i=0∑n​[ni​]xi=i=0∑n​[ni​]j=0∑i​{ij​}xj↓=i=0∑n​j=0∑i​[ni​]{ij​}xj↓​
容易发现∑i=0n∑j=0i[ni]{ij}\sum_{i=0}^n\sum_{j=0}^i\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}i=0∑n​j=0∑i​[ni​]{ij​}
在n=jn=jn=j的时候等于111,其它时候等于000
即∑i=0n∑j=0i[ni]{ij}=δn,j\sum_{i=0}^n\sum_{j=0}^i\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}=\delta_{n,j}i=0∑n​j=0∑i​[ni​]{ij​}=δn,j​

根据套路,我们列出a,ba,ba,b的值:ai,j={ij},bi,j=[ij]a_{i,j}=\begin{Bmatrix}i\\j\end{Bmatrix},b_{i,j}=\begin{bmatrix}i\\j\end{bmatrix}ai,j​={ij​},bi,j​=[ij​]
∑j=kiai,jbj,k=∑j=ki{ij}[jk]=δi,k\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&amp;=\sum_{j=k}^i\begin{Bmatrix}i\\j\end{Bmatrix}\begin{bmatrix}j\\k\end{bmatrix}\\ &amp;=\delta_{i,k} \end{aligned}j=k∑i​ai,j​bj,k​​=j=k∑i​{ij​}[jk​]=δi,k​​
就得证了
有个更常见的式子(其中的是无符号斯特林数)
fi=∑j=0i{ij}gj⇔gi=∑j=0i(−1)i−j[ij]fjf_i=\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}g_j\Leftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}\begin{bmatrix}i\\j\end{bmatrix}f_jfi​=j=0∑i​{ij​}gj​⇔gi​=j=0∑i​(−1)i−j[ij​]fj​
我们可以直接通过ss(n,m)=(−1)n+msu(n,m)s_s(n,m)=(−1)^{n+m}s_u(n,m)ss​(n,m)=(−1)n+msu​(n,m)来转化
然后就好了
容易发现,这些式子和二项式反演非常相似
所以,斯特林反演也有一个式子(其中的是无符号斯特林数):fi=∑j=0i{n−jn−i}gj⇔gi=∑j=0i(−1)i−j[n−jn−i]fjf_i=\sum_{j=0}^i\begin{Bmatrix}{n-j}\\{n-i}\end{Bmatrix}g_j\Leftrightarrow g_i=\sum_{j=0}^i(-1)^{i-j}\begin{bmatrix}{n-j}\\{n-i}\end{bmatrix}f_jfi​=j=0∑i​{n−jn−i​}gj​⇔gi​=j=0∑i​(−1)i−j[n−jn−i​]fj​
证明即先知道
∑j=kiai,jbj,k=δi,k\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&amp;=\delta_{i,k} \end{aligned}j=k∑i​ai,j​bj,k​​=δi,k​​
然后带入公式,转化无符号斯特林数即可(由于和二项式的差不多,所以这里就不列式子了,如果实在不懂可以问我)
这个式子经过一些推导可以推出:
f(i)=∑j=in{ji}g(j)⇔g(i)=∑j=in(−1)j−i[ji]f(j)f(i)=\sum_{j=i}^n\begin{Bmatrix}j\\i\end{Bmatrix}g(j)\Leftrightarrow g(i)=\sum_{j=i}^n(-1)^{j-i}\begin{bmatrix}j\\i\end{bmatrix}f(j)f(i)=j=i∑n​{ji​}g(j)⇔g(i)=j=i∑n​(−1)j−i[ji​]f(j)
例题:
bzoj4671

莫比乌斯反演(数论)

这其实是数论里面的内容,可以通过狄利克雷卷积进行证明
然而,既然这是反演,那么也同样可以通过这里提供的方法进行证明
先列出莫比乌斯反演的式子
fi=∑j∣igj⇔gi=∑j∣iμijfjf_i=\sum_{j|i}g_j\Leftrightarrow g_i=\sum_{j|i}\mu_{\frac ij}f_jfi​=j∣i∑​gj​⇔gi​=j∣i∑​μji​​fj​
给出莫比乌斯函数的定义
μ(n)={1,若n=1(−1)k,若n无平方数因数且n=p1∗p2⋅⋅⋅pk0,若n有平方数因数\mu(n)=\begin{cases} 1,\ \ \ \ \ \ \ \ 若n=1 \\ (-1)^k,若n无平方数因数且n=p_1*p_2···p_k\\ 0,\ \ \ \ \ \ \ \ 若n有平方数因数 \end{cases}μ(n)=⎩⎪⎨⎪⎧​1,        若n=1(−1)k,若n无平方数因数且n=p1​∗p2​⋅⋅⋅pk​0,        若n有平方数因数​
当然也可以看我的博客数论学习
然后我们来进行证明
列出a,ba,ba,b的值:ai,j=[j∣i],bi,j=[j∣i]∗μija_{i,j}=[j|i],b_{i,j}=[j|i]*\mu_{\frac ij}ai,j​=[j∣i],bi,j​=[j∣i]∗μji​​
注意:[A]={0(A为假)1(A为真)[A]=\begin{cases}0(A为假)\\1(A为真)\end{cases}[A]={0(A为假)1(A为真)​
代入:
∑j=1nai,jbj,k=∑j=1n[j∣i][k∣j]∗μjk=[k∣i]∑j=1n[j∣i][k∣j]∗μjk=[k∣i]∑j=1nk[j∣ik]∗μj=[k∣i]∑j∣ikμj=[k=i]\begin{aligned} \sum_{j=1}^na_{i,j}b_{j,k}&amp;=\sum_{j=1}^n[j|i][k|j]*\mu_{\frac jk}\\ &amp;=[k|i]\sum_{j=1}^n[j|i][k|j]*\mu_{\frac jk}\\ &amp;=[k|i]\sum_{j=1}^{\frac nk}[j|\frac ik]*\mu_j\\ &amp;=[k|i]\sum_{j|\frac ik}\mu_j\\ &amp;=[k=i] \end{aligned}j=1∑n​ai,j​bj,k​​=j=1∑n​[j∣i][k∣j]∗μkj​​=[k∣i]j=1∑n​[j∣i][k∣j]∗μkj​​=[k∣i]j=1∑kn​​[j∣ki​]∗μj​=[k∣i]j∣ki​∑​μj​=[k=i]​
用到了一个式子∑d∣nμ(d)=[n=1]\sum_{d|n}\mu(d)=[n=1]∑d∣n​μ(d)=[n=1]
其实非常显然,直接根据含义讨论其相异质因子数量,根据定义计算,用二项式定理即可(证明也可以在我的数论学习博客中找到)
然后就好了
没啥裸的例题,主要是在数论中的推公式的时候会用到

单位根反演(离散傅里叶变换中有应用)

学新的东西自然先从已经会的东西来拓展辣,贴出链接我的FFT博客
多项式乘法用到了离散傅里叶变换,它使插值的复杂度从Θ(n3)\Theta(n^3)Θ(n3)的暴力高斯消元降到和求值一样的复杂度
我们考虑插值的本质
设gig_igi​为多项式的iii次项系数,设fif_ifi​为将ωni\omega_n^iωni​带入的点值
那么满足
fi=∑j=0n−1(ωni)jgj=∑j=0n−1ωni∗jgj\begin{aligned} f_i&amp;=\sum_{j=0}^{n-1}(\omega_n^i)^jg_j\\ &amp;=\sum_{j=0}^{n-1}\omega_n^{i*j}g_j \end{aligned}fi​​=j=0∑n−1​(ωni​)jgj​=j=0∑n−1​ωni∗j​gj​​
现在已知fff,求ggg
一看就知道是经典的反演
离散傅里叶给出的结论是:
gi=∑j=0n−1(ωni)−jnfj=∑j=0n−1ωn−i∗jnfj\begin{aligned} g_i&amp;=\sum_{j=0}^{n-1}\frac{(\omega_n^i)^{-j}}nf_j\\ &amp;=\sum_{j=0}^{n-1}\frac{\omega_n^{-i*j}}nf_j \end{aligned}gi​​=j=0∑n−1​n(ωni​)−j​fj​=j=0∑n−1​nωn−i∗j​​fj​​
然后我们来验证一下这个反演的正确性
已知ai,j=ωni∗j,bi,j=ωn−i∗jna_{i,j}=\omega_n^{i*j},b_{i,j}=\frac{\omega_n^{-i*j}}nai,j​=ωni∗j​,bi,j​=nωn−i∗j​​
我们将a,ba,ba,b代入广义反演的判定式:
∑j=0n−1ai,jbj,k=∑j=0n−1ωni∗jωn−j∗kn=∑j=0n−1ωn(i−k)∗jn=δi,k\begin{aligned} \sum_{j=0}^{n-1}a_{i,j}b_{j,k}&amp;=\sum_{j=0}^{n-1}\omega_n^{i*j}\frac{\omega_n^{-j*k}}n\\ &amp;=\sum_{j=0}^{n-1}\frac{\omega_n^{(i-k)*j}}n\\ &amp;=\delta_{i,k} \end{aligned}j=0∑n−1​ai,j​bj,k​​=j=0∑n−1​ωni∗j​nωn−j∗k​​=j=0∑n−1​nωn(i−k)∗j​​=δi,k​​
i=ki=ki=k时每一项的值为1n\frac1nn1​
i≠ki\neq ki̸​=k时等比数列求和(x0+x1+⋅⋅⋅+xn−1=xn−1x−1x^0+x^1+···+x^{n-1}=\frac {x^n-1}{x-1}x0+x1+⋅⋅⋅+xn−1=x−1xn−1​)
算出结果是(ωni−k)n−1n(ωni−k−1)=(ωnn)i−k−1n(ωni−k−1)=1i−k−1n(ωni−k−1)=0\frac {(\omega_n^{i-k})^n-1}{n(\omega_n^{i-k}-1)}=\frac {(\omega_n^n)^{i-k}-1}{n(\omega_n^{i-k}-1)}=\frac {1^{i-k}-1}{n(\omega_n^{i-k}-1)}=0n(ωni−k​−1)(ωni−k​)n−1​=n(ωni−k​−1)(ωnn​)i−k−1​=n(ωni−k​−1)1i−k−1​=0
然后反演的正确性得证(我怎么现在才知道这是反演啊)

另外单位根反演也有例题应用
具体形式是[n∣x]=1n∑i=0n−1(ωnx)i[n|x]=\frac1n\sum_{i=0}^{n-1}(\omega_n^x)^i[n∣x]=n1​i=0∑n−1​(ωnx​)i
详见例题:单位根反演&[loj6485]LJJ 学二项式定理

最值反演(min-max容斥)

设现在有一个集合A,定义max{A}为集合A中最大元素的值的大小,min{A}为集合A中最小元素值的大小
那么有如下式子:
max{S}=∑T⊆S(−1)∣T∣+1min{T}max\{S\}=\sum_{T\subseteq S}(-1)^{|T|+1}min\{T\}max{S}=T⊆S∑​(−1)∣T∣+1min{T}
反演一下也对
min{S}=∑T⊆S(−1)∣T∣+1max{T}min\{S\}=\sum_{T\subseteq S}(-1)^{|T|+1}max\{T\}min{S}=T⊆S∑​(−1)∣T∣+1max{T}
证明?
这可能是广义的反演(这个叫它反演我认为没有什么意义,因为其本身的存在是基于fff和ggg确定的情况的)
还是写一下吧:aS,T=(−1)∣T∣+1,bS,T=(−1)∣T∣+1a_{S,T}=(-1)^{|T|+1},b_{S,T}=(-1)^{|T|+1}aS,T​=(−1)∣T∣+1,bS,T​=(−1)∣T∣+1
∑T⊆X⊆SaS,XbX,T=∑T⊆X⊆S(−1)∣X∣+∣T∣=δS,T\begin{aligned} \sum_{T\subseteq X\subseteq S}a_{S,X}b_{X,T}&amp;=\sum_{T\subseteq X\subseteq S}(-1)^{|X|+|T|}\\ &amp;=\delta_{S,T}\\ \end{aligned}T⊆X⊆S∑​aS,X​bX,T​​=T⊆X⊆S∑​(−1)∣X∣+∣T∣=δS,T​​
非常明显吧
但是这个所谓反演其实并没有啥用,这两个式子其实重在容斥的推导
推导??
借用csdn用户DOFYPXY的一句话:min-max容斥,感觉很神奇,其实很sb
我们可以通过分析来证明这个式子(这真的算容斥吗???)
设x=max{S}x=max\{S\}x=max{S}所有集合分包含xxx和不包含xxx两种。对于每个不包含xxx的非空集合,其加入xxx后的集合的minminmin值不变,符号相反,于是相互抵消;空集由于没有元素,所以不贡献答案,其加入一个元素xxx后最小值为xxx,故贡献值为xxx
对于反演后的式子的推导同理
其本身似乎并没有什么用,但是好像可以套上期望
例题:PKUWC2018随机游走

莫比乌斯变换(FMT)

在FMT中,我们用到了一个反演的式子,来由莫比乌斯变换(FMT) 推导莫比乌斯反演(FMI)
列出式子:
f(S)=∑T⊆Sg(T)⇔g(S)=∑T⊆S(−1)∣S∣−∣T∣f(T)f(S)=\sum_{T\subseteq S}g(T)\Leftrightarrow g(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}f(T)f(S)=T⊆S∑​g(T)⇔g(S)=T⊆S∑​(−1)∣S∣−∣T∣f(T)
证明:aS,T=1,bS,T=(−1)∣S∣−∣T∣a_{S,T}=1,b_{S,T}=(-1)^{|S|-|T|}aS,T​=1,bS,T​=(−1)∣S∣−∣T∣
∑T⊆X⊆SaS,XbX,T=∑T⊆X⊆S(−1)∣X∣−∣T∣=δS,T\begin{aligned} \sum_{T\subseteq X\subseteq S}a_{S,X}b_{X,T}&amp;=\sum_{T\subseteq X\subseteq S}(-1)^{|X|-|T|}\\ &amp;=\delta_{S,T}\\ \end{aligned}T⊆X⊆S∑​aS,X​bX,T​​=T⊆X⊆S∑​(−1)∣X∣−∣T∣=δS,T​​
和最值反演里的反演证明几乎一样,都很显然

容斥反演的联系

反演是一种特殊的容斥,任何反演都可以通过容斥推得

总结

反演作为一种特殊的容斥,还是会被经常用到的,活用各类反演非常重要

对于容斥原理反演的思考和总结相关推荐

  1. 关于广义莫比乌斯反演的思考

    本文总结关于广义莫比乌斯反演的一些思想. 1. 广义莫比乌斯反演 为区别平时所说的整数上定义整除关系后,在dirichlet卷积下的莫比乌斯反演,这里更关心其一般化,所以称之为广义莫比乌斯反演. 在R ...

  2. 斯特林反演[bzoj4671]异或图

    前言 继续学习容斥的技巧! 题意简介 题面链接 题目大意 定义两个无重边无自环图G1,G2G_1,G_2G1​,G2​的异或为G3G_3G3​(G1,G2,G3G_1,G_2,G_3G1​,G2​,G ...

  3. 单位根反演[loj6485]LJJ 学二项式定理

    前言 之前写反演的博客对于单位根反演只提了FFT 这里补一下一个应用 单位根反演 fi=∑j=0n−1ωni∗jgj⇔gi=∑j=0n−1ωn−i∗jnfjf_i=\sum_{j=0}^{n-1}\o ...

  4. UVALive 7040 Color

    题目链接:LA-7040 题意为用m种颜色给n个格子染色.问正好使用k种颜色的方案有多少. 首先很容易想到的是\( k * (k-1)^{n-1}\),这个算出来的是使用小于等于k种颜色给n个方格染色 ...

  5. 莫比乌斯函数(数论)(转载+原创)

    一.莫比乌斯函数(Möbius function)是指以下的函数: 在这里,λ(n)是刘维尔函数 莫比乌斯函数是一个数论函数,它同时也是一个积性函数(i.e.μ(ab) =μ(a)μ(b), a,b互 ...

  6. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 4032  Solved: 1817 [Submi ...

  7. 《算法竞赛进阶指南》数论篇(3)-组合计数,Lucas定理,Catalan数列,容斥原理,莫比乌斯反演,概率与数学期望,博弈论之SG函数

    文章目录 组合计数 例题:Counting swaps Lucas定理 Cnm≡Cnmodpmmodp∗Cn/pm/p(modp)C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ ...

  8. (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...

  9. hdu1695 容斥原理 莫比乌斯反演

    给定两个数b,d,问[1,b]和[1,d]区间上有多少对互质的数.(x,y)和(y,x)算一个. 对于[1,b]部分,用欧拉函数直接求.对于大于b的部分,求n在[1,b]上有多少个互质的数,用容斥原理 ...

最新文章

  1. 如何把Office365的更新从半年通道改成月度通道
  2. java中使用json以及所导入的包
  3. numpy二维数组改变某些数_【每天15分钟,5天学会NumPy】第1天:基本概念
  4. CF-825 G.Tree Queries(DFS)
  5. Download Apache Commons BeanUtils
  6. win10玩cf不能全屏_游戏莫名卡顿三招搞定!Win10游戏优化教程
  7. 工信部证书含金量_关于推荐考取BIM工程师、装配式工程师证书
  8. 【恋上数据结构】MySQL的索引底层为何使用 B+树?
  9. windows搭建virtualbox虚拟机安装的android环境
  10. php代码给用户安装浏览器,PHP判断用户浏览器是否安装alexa工具条程序
  11. 图扑软件数字孪生 SMT 产线,智能工业可视化管理
  12. ad引脚名字设置_AD软件管脚名称如何放置负信号?
  13. 58上租房显示服务器异常,“58同城租房信息”满是套路,你中招了吗?
  14. 华为使用计算机投屏要打开什么,华为手机怎么投屏到电脑?这些小屏变大屏的操作你会吗...
  15. hibernate之HQL属性查询
  16. PS和AI安装后报代码为16的错误解决方法
  17. 2021-08-29 UML笔记
  18. LK(Lucas-Kanade)稀疏光流法
  19. 求某一年的某一月有多少天
  20. 【二】Html5的浏览器支持

热门文章

  1. SOA实现方式与模式
  2. 加密与安全 - Java加密与安全
  3. 数据拆分缺点和解决方案
  4. oracle与jdbc连接数据库,JDBC与Oracle数据库连接
  5. 创建用户赋权限_MySQL实战第84篇:MySQL数据库添加用户和赋权限,在8.0版本!
  6. drop 很慢 物化视图_终于解决了物化视图复制的问题
  7. 图片去字工具_这些免费工具轻松提取图片中的文字,别再傻傻地手工去输了
  8. mac自带python怎么用_怎么在mac上使用python
  9. 谷歌浏览器32位版本安装包_Windows 10 OEM渠道告别32位版本 这意味着什么?
  10. 200801一阶段1函数封装