对于容斥原理&反演的思考和总结

14 篇文章 0 订阅
14 篇文章 0 订阅

前言

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

容斥

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

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

贴出最经典的容斥原理的式子
设现在有 n n n个条件 P 1 , P 2 ⋅ ⋅ ⋅ P n P_1,P_2···P_n P1,P2Pn,满足这些条件的集合分别是 A 1 , A 2 ⋅ ⋅ ⋅ A n A_1,A_2···A_n A1,A2An
∣ A 1 ∪ A 2 ∪ . . . ∪ A n ∣ = ∑ i = 1 n ( − 1 ) i − 1 ∑ ∣ T ∣ = i , T = { x 1 . . . x i } ∣ A x 1 ∩ A x 2 ∩ . . . ∩ A x i ∣ |{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}}| A1A2...An=i=1n(1)i1T=i,T={x1...xi}Ax1Ax2...Axi
当直接计算左式并不方便的时候,就能转化成右式解决问题了
证明:
对于某个 ∣ T ∣ = i , T = { x 1 . . . x i } |T|=i,T=\{x_1...x_i\} T=iT={x1...xi},其对应的集合为 ∣ A x 1 ∩ A x 2 ∩ . . . ∩ A x i ∣ |{A_{x_1}}\cap{A_{x_2}}\cap...\cap{A_{x_i}}| Ax1Ax2...Axi,它应当被计算一次,我们现在来进行证明
它被计算的次数根据组合数可得:
A n s = ∑ j = 1 i ( − 1 ) j − 1 ( i j ) = − ( ∑ j = 1 i ( − 1 ) j ( i j ) ) + 1 − 1 = 1 − ( ∑ j = 0 i ( − 1 ) j ( i j ) ) = 1 − ( ∑ j = 0 i ( − 1 ) j 1 i − j ( i j ) ) = 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=1i(1)j1(ji)=(j=1i(1)j(ji))+11=1(j=0i(1)j(ji))=1(j=0i(1)j1ij(ji))=1(11)j=1
中间用到的是二项式定理(百度百科链接),然后证毕
在实际使用容斥的时候,我们如果要计算所有条件都不满足的方案数,只要用全集减就好了,即 ∣ A 1 ‾ ∩ A 2 ‾ ∩ . . . ∩ A n ‾ ∣ = ∣ U ∣ − ∣ A 1 ∪ A 2 ∪ . . . ∪ A n ∣ |\overline{A_1}\cap\overline{A_2}\cap...\cap\overline{A_n}|=|U|-|{A_1}\cup{A_2}\cup...\cup{A_n}| A1A2...An=UA1A2...An
例题:[bzoj4455]小星星

反演

我对反演的理解

什么是反演呢?
有两个数组 f , g f,g f,g,已知他们之间的关系: f i = ∑ j = 0 i a i , j g j f_i=\sum_{j=0}^ia_{i,j}g_j fi=j=0iai,jgj
现在你获得了所有的 f f f的值,求每个 g g g的值
考虑这件事请的本质,相当于是给你 n n n个线性方程
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 \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,0g0+a0,1g1a0,ngna1,0g0+a1,1g1a1,ngn                an,0g0+an,1g1an,ngn=f0=f1= =fn
已知所有的 a a a f f f,求 g g g
很不幸的是,这个直接高斯消元的复杂度是 Θ ( n 3 ) \Theta(n^3) Θ(n3)的,不够优越
但是我们发现这里有一个性质,那就是所有 a i , j a_{i,j} ai,j满足 i &lt; j i&lt;j i<j的值都是 0 0 0
那么也就是说这是一个下三角矩阵,那么直接高斯消元就是 Θ ( n 2 ) \Theta(n^2) Θ(n2)的了
真是非常优越,但是当前这个算法并不能 Θ ( n ) \Theta(n) Θ(n)求单个 g i g_i gi的值
考虑 Θ ( n 2 ) \Theta(n^2) Θ(n2)高斯消元的过程,我们发现对于 g i g_i gi的值有影响的 f j f_j fj一定满足 j ≤ i j\le i ji,并且贡献为一个系数 b i , j b_{i,j} bi,j(这个系数可以从 a a a推过来)
如果我们有办法快速的能将 b b b求出来,那么我们就能 Θ ( n ) \Theta(n) Θ(n)的求单个 g i g_i gi的值了
事实上,对于随便的一组 a a a并没有办法快速求出 b b b,但是如果 a a a比较特殊那就可以
已知一组 a a a,找到一组 b b b满足: f i = ∑ j = 0 i a i , j g j ⇔ g i = ∑ j = 0 i b i , j f j f_i=\sum_{j=0}^ia_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^ib_{i,j}f_j fi=j=0iai,jgjgi=j=0ibi,jfj
以上是常见反演的形式,之后的讲解以此类为主

ex(拓展)

当然反演还有一个更广义的形式,在下个部分中也会有 e x ex ex这一项提到这个
f i = ∑ j = 0 n a i , j g j ⇔ g i = ∑ j = 0 n b i , j f j f_i=\sum_{j=0}^{n}a_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^{n}b_{i,j}f_j fi=j=0nai,jgjgi=j=0nbi,jfj
容易发现这个形式相当于是线性方程组的系数都是有值的,自然反演过来跟 g i g_i gi有关的也是所有的 f i f_i fi

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

既然我们是已知 a a a b b b,那么 a a a b b b之间一定有某种关系
首先我们引入克罗内克函数(Kronecker delta)
δ i j = { 0 , i ≠ j 1 , i = j \delta_{ij}=\begin{cases}0,i\ne j\\ 1,i=j \end{cases} δij={0i̸=j1i=j
是不是看起来非常简单呢
然后就有个同样很显然的式子 f i = ∑ j = 0 i δ i j f j f_i=\sum_{j=0}^i\delta_{ij}f_j fi=j=0iδijfj
然后我们回到式子 f i = ∑ j = 0 i a i , j g j ⇔ g i = ∑ j = 0 i b i , j f j f_i=\sum_{j=0}^ia_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^ib_{i,j}f_j fi=j=0iai,jgjgi=j=0ibi,jfj把第二个式子代入第一个式子
f i = ∑ j = 0 i a i , j g j = ∑ j = 0 i a i , j ∑ k = 0 j b j , k f k = ∑ k = 0 i ( ∑ j = k i a i , j b j , k ) f k \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=0iai,jgj=j=0iai,jk=0jbj,kfk=k=0i(j=kiai,jbj,k)fk
发现和前面的式子非常像
得出 ∑ j = k i a i , j b j , k = δ i , k \sum_{j=k}^ia_{i,j}b_{j,k}=\delta_{i,k} j=kiai,jbj,k=δi,k
如果 a , b a,b a,b满足这个式子,那么上面的反演就可以成立了,如果一个反演是成立的,那么其也一定满足这个式子

ex(拓展)

考虑广义的反演
f i = ∑ j = 0 n a i , j g j ⇔ g i = ∑ j = 0 n b i , j f j f_i=\sum_{j=0}^{n}a_{i,j}g_j\Leftrightarrow g_i=\sum_{j=0}^{n}b_{i,j}f_j fi=j=0nai,jgjgi=j=0nbi,jfj
它也有相应的判定式子 ∑ j = 0 n a i , j b j , k = δ i , k \sum_{j=0}^na_{i,j}b_{j,k}=\delta_{i,k} j=0nai,jbj,k=δi,k
证明同理,有兴趣的同学可以自己手推

常见的反演

二项式反演

二项式这个东西非常常见,它也对应了一个非常经典的反演——二项式反演
二项式反演有两种式子,我们来分别证明吧
经典式
f i = ∑ j = 0 i ( − 1 ) j ( i j ) g j ⇔ g i = ∑ j = 0 i ( − 1 ) j ( i j ) f j 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 fi=j=0i(1)j(ji)gjgi=j=0i(1)j(ji)fj
列出 a , b a,b a,b的值, a i , j = ( − 1 ) j ( i j ) , b i , j = ( − 1 ) j ( i j ) 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 = k i a i , j b j , k = ∑ j = k i ( − 1 ) j ( i j ) ∗ ( − 1 ) k ( j k ) = ∑ j = k i ( − 1 ) j + k ( i j ) ( j k ) = ∑ j = k i ( − 1 ) j + k ( i k ) ( i − k i − j ) = ( i k ) ( − 1 ) k ∑ j = k i ( − 1 ) j ( i − k i − j ) = ( i k ) ( − 1 ) k ∑ j = 0 i − k ( − 1 ) i − j ( i − k j ) = { ( i k ) ( − 1 ) k ( 1 − 1 ) i − k ( i ≠ k ) ( i k ) ( − 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=kiai,jbj,k=j=ki(1)j(ji)(1)k(kj)=j=ki(1)j+k(ji)(kj)=j=ki(1)j+k(ki)(ijik)=(ki)(1)kj=ki(1)j(ijik)=(ki)(1)kj=0ik(1)ij(jik)={(ki)(1)k(11)ik(ki)(1)k(i̸=k)(i=k)={01(i̸=k)(i=k)=δi,k
补充一下,对于中间有一部用到了如下式子:
( a b ) ( b c ) = a ! b ! ( a − b ) ! ⋅ b ! c ! ( b − c ) ! = a ! ( a − b ) ! c ! ( b − c ) ! = a ! c ! ( a − c ) ! ⋅ ( a − c ) ! ( a − b ) ! ( b − c ) ! = ( a c ) ( a − c a − 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!(ab)!a!c!(bc)!b!=(ab)!c!(bc)!a!=c!(ac)!a!(ab)!(bc)!(ac)!=(ca)(abac)
更常用的式子
f i = ∑ j = 0 i ( i j ) g j ⇔ g i = ∑ j = 0 i ( − 1 ) i − j ( 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 fi=j=0i(ji)gjgi=j=0i(1)ij(ji)fj
同样可以证明
列出 a , b a,b a,b的值: a i , j = ( i j ) , b i , j = ( − 1 ) i − j ( i j ) a_{i,j}=\binom{i}{j},b_{i,j}=(-1)^{i-j}\binom{i}{j} ai,j=(ji)bi,j=(1)ij(ji)
代入
∑ j = k i a i , j b j , k = ∑ j = k i ( i j ) ∗ ( − 1 ) j − k ( j k ) = ∑ j = k i ( i j ) ∗ ( − 1 ) j − k ( j k ) ∗ ( − 1 ) k + k = ∑ j = k i ( − 1 ) j + k ( i j ) ( j k ) = δ 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=kiai,jbj,k=j=ki(ji)(1)jk(kj)=j=ki(ji)(1)jk(kj)(1)k+k=j=ki(1)j+k(ji)(kj)=δi,k
容易发现,代入以后稍微转化一下就和第一个式子的证明一样了
当然,二项式反演还有一个形式其实本质相同
f i = ∑ j = 0 i ( n − j n − i ) g j ⇔ g i = ∑ j = 0 i ( − 1 ) i − j ( n − j n − i ) f j f_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_j fi=j=0i(ninj)gjgi=j=0i(1)ij(ninj)fj
列出 a , b a,b a,b的值: a i , j = ( n − j n − i ) , b i , j = ( − 1 ) i − j ( n − j n − i ) a_{i,j}=\binom{n-j}{n-i},b_{i,j}=(-1)^{i-j}\binom{n-j}{n-i} ai,j=(ninj)bi,j=(1)ij(ninj)
代入
∑ j = k i a i , j b j , k = ∑ j = k i ( n − j n − i ) ∗ ( − 1 ) j − k ( n − k n − j ) = ∑ j = k i ( n − j n − i ) ∗ ( − 1 ) j − k ( n − k n − j ) ∗ ( − 1 ) k + k = ∑ j = k i ( − 1 ) j + k ( n − k n − j ) ( n − j n − i ) = ∑ j = k i ( − 1 ) j + k ( n − k n − i ) ( i − k i − j ) = ( n − k n − i ) ( − 1 ) k ∑ j = k i ( − 1 ) j ( i − k i − j ) = ( n − k n − i ) ( − 1 ) k ∑ j = 0 i − k ( − 1 ) i − j ( i − k j ) = { ( n − k n − i ) ( − 1 ) k ( 1 − 1 ) i − k ( i ≠ k ) ( n − k n − 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=kiai,jbj,k=j=ki(ninj)(1)jk(njnk)=j=ki(ninj)(1)jk(njnk)(1)k+k=j=ki(1)j+k(njnk)(ninj)=j=ki(1)j+k(nink)(ijik)=(nink)(1)kj=ki(1)j(ijik)=(nink)(1)kj=0ik(1)ij(jik)={(nink)(1)k(11)ik(nink)(1)k(i̸=k)(i=k)={01(i̸=k)(i=k)=δi,k
式子通过推导可以变成
f ( i ) = ∑ j = i n ( j i ) g ( j ) ⇔ g ( i ) = ∑ j = i n ( − 1 ) j − i ( j i ) 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=in(ij)g(j)g(i)=j=in(1)ji(ij)f(j)
大体的过程都挺相似的,例题:[bzoj3622]已经没有什么好害怕的了

斯特林反演

接下来讲斯特林反演啦
预备知识是两类斯特林数
不会的同学可以看我的博客
第一类斯特林数
第二类斯特林数
列出斯特林反演的式子(注意,本式子中的第一类斯特林数是有符号的)
f i = ∑ j = 0 i { i j } g j ⇔ g i = ∑ j = 0 i [ i j ] f j f_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_j fi=j=0i{ij}gjgi=j=0i[ij]fj
证明:
首先,我们已知两类斯特林数很好的性质(证明在第二类斯特林数的博客中): x n ↓ = ∑ i = 0 n [ n i ] x i x^{n\downarrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i xn=i=0n[ni]xi
x n = ∑ i = 0 n { n i } x i ↓ x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}x^{i\downarrow} xn=i=0n{ni}xi
(这里插入一道应用例题CF 932 E)
2 2 2式带入 1 1 1式,得到
x n ↓ = ∑ i = 0 n [ n i ] x i = ∑ i = 0 n [ n i ] ∑ j = 0 i { i j } x j ↓ = ∑ i = 0 n ∑ j = 0 i [ n i ] { i j } x j ↓ \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=0n[ni]xi=i=0n[ni]j=0i{ij}xj=i=0nj=0i[ni]{ij}xj
容易发现 ∑ i = 0 n ∑ j = 0 i [ n i ] { i j } \sum_{i=0}^n\sum_{j=0}^i\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix} i=0nj=0i[ni]{ij}
n = j n=j n=j的时候等于 1 1 1,其它时候等于 0 0 0
∑ i = 0 n ∑ j = 0 i [ n i ] { i j } = δ 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=0nj=0i[ni]{ij}=δn,j

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

莫比乌斯反演(数论)

这其实是数论里面的内容,可以通过狄利克雷卷积进行证明
然而,既然这是反演,那么也同样可以通过这里提供的方法进行证明
先列出莫比乌斯反演的式子
f i = ∑ j ∣ i g j ⇔ g i = ∑ j ∣ i μ i j f j f_i=\sum_{j|i}g_j\Leftrightarrow g_i=\sum_{j|i}\mu_{\frac ij}f_j fi=jigjgi=jiμjifj
给出莫比乌斯函数的定义
μ ( n ) = { 1 ,          若 n = 1 ( − 1 ) k , 若 n 无 平 方 数 因 数 且 n = p 1 ∗ p 2 ⋅ ⋅ ⋅ p k 0 ,          若 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,nn=p1p2pk0,        n
当然也可以看我的博客数论学习
然后我们来进行证明
列出 a , b a,b a,b的值: a i , j = [ j ∣ i ] , b i , j = [ j ∣ i ] ∗ μ i j a_{i,j}=[j|i],b_{i,j}=[j|i]*\mu_{\frac ij} ai,j=[ji],bi,j=[ji]μji
注意: [ A ] = { 0 ( A 为 假 ) 1 ( A 为 真 ) [A]=\begin{cases}0(A为假)\\1(A为真)\end{cases} [A]={0(A)1(A)
代入:
∑ j = 1 n a i , j b j , k = ∑ j = 1 n [ j ∣ i ] [ k ∣ j ] ∗ μ j k = [ k ∣ i ] ∑ j = 1 n [ j ∣ i ] [ k ∣ j ] ∗ μ j k = [ k ∣ i ] ∑ j = 1 n k [ j ∣ i k ] ∗ μ j = [ k ∣ i ] ∑ j ∣ i k μ 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=1nai,jbj,k=j=1n[ji][kj]μkj=[ki]j=1n[ji][kj]μkj=[ki]j=1kn[jki]μj=[ki]jkiμj=[k=i]
用到了一个式子 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] dnμ(d)=[n=1]
其实非常显然,直接根据含义讨论其相异质因子数量,根据定义计算,用二项式定理即可(证明也可以在我的数论学习博客中找到)
然后就好了
没啥裸的例题,主要是在数论中的推公式的时候会用到

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

学新的东西自然先从已经会的东西来拓展辣,贴出链接我的FFT博客
多项式乘法用到了离散傅里叶变换,它使插值的复杂度从 Θ ( n 3 ) \Theta(n^3) Θ(n3)的暴力高斯消元降到和求值一样的复杂度
我们考虑插值的本质
g i g_i gi为多项式的 i i i次项系数,设 f i f_i fi为将 ω n i \omega_n^i ωni带入的点值
那么满足
f i = ∑ j = 0 n − 1 ( ω n i ) j g j = ∑ j = 0 n − 1 ω n i ∗ j g j \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=0n1(ωni)jgj=j=0n1ωnijgj
现在已知 f f f,求 g g g
一看就知道是经典的反演
离散傅里叶给出的结论是:
g i = ∑ j = 0 n − 1 ( ω n i ) − j n f j = ∑ j = 0 n − 1 ω n − i ∗ j n f j \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=0n1n(ωni)jfj=j=0n1nωnijfj
然后我们来验证一下这个反演的正确性
已知 a i , j = ω n i ∗ j , b i , j = ω n − i ∗ j n a_{i,j}=\omega_n^{i*j},b_{i,j}=\frac{\omega_n^{-i*j}}n ai,j=ωnijbi,j=nωnij
我们将 a , b a,b a,b代入广义反演的判定式:
∑ j = 0 n − 1 a i , j b j , k = ∑ j = 0 n − 1 ω n i ∗ j ω n − j ∗ k n = ∑ j = 0 n − 1 ω n ( i − k ) ∗ j n = δ 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=0n1ai,jbj,k=j=0n1ωnijnωnjk=j=0n1nωn(ik)j=δi,k
i = k i=k i=k时每一项的值为 1 n \frac1n n1
i ≠ k i\neq k i̸=k时等比数列求和( x 0 + x 1 + ⋅ ⋅ ⋅ + x n − 1 = x n − 1 x − 1 x^0+x^1+···+x^{n-1}=\frac {x^n-1}{x-1} x0+x1++xn1=x1xn1
算出结果是 ( ω n i − k ) n − 1 n ( ω n i − k − 1 ) = ( ω n n ) i − k − 1 n ( ω n i − k − 1 ) = 1 i − k − 1 n ( ω n i − 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)}=0 n(ωnik1)(ωnik)n1=n(ωnik1)(ωnn)ik1=n(ωnik1)1ik1=0
然后反演的正确性得证(我怎么现在才知道这是反演啊

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

最值反演(min-max容斥)

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

莫比乌斯变换(FMT)

FMT中,我们用到了一个反演的式子,来由莫比乌斯变换(FMT) 推导莫比乌斯反演(FMI)
列出式子:
f ( S ) = ∑ T ⊆ S g ( 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)=TSg(T)g(S)=TS(1)STf(T)
证明: a S , T = 1 , b S , T = ( − 1 ) ∣ S ∣ − ∣ T ∣ a_{S,T}=1,b_{S,T}=(-1)^{|S|-|T|} aS,T=1,bS,T=(1)ST
∑ T ⊆ X ⊆ S a S , X b X , 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} TXSaS,XbX,T=TXS(1)XT=δS,T
和最值反演里的反演证明几乎一样,都很显然

容斥反演的联系

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

总结

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

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值