前言
我还是太菜了
容斥之类的方法并不能熟练应用
于是这次我就认真学习了一下容斥
你可能会发现,容斥与反演很多时候都会同时出现
那么,这两个东西分别是什么、究竟有什么关系呢?
容斥
我们先从定义说起
什么是容斥?
容斥原理: 先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理
贴出最经典的容斥原理的式子
设现在有
n
n
n个条件
P
1
,
P
2
⋅
⋅
⋅
P
n
P_1,P_2···P_n
P1,P2⋅⋅⋅Pn,满足这些条件的集合分别是
A
1
,
A
2
⋅
⋅
⋅
A
n
A_1,A_2···A_n
A1,A2⋅⋅⋅An
∣
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}}|
∣A1∪A2∪...∪An∣=i=1∑n(−1)i−1∣T∣=i,T={x1...xi}∑∣Ax1∩Ax2∩...∩Axi∣
当直接计算左式并不方便的时候,就能转化成右式解决问题了
证明:
对于某个
∣
T
∣
=
i
,
T
=
{
x
1
.
.
.
x
i
}
|T|=i,T=\{x_1...x_i\}
∣T∣=i,T={x1...xi},其对应的集合为
∣
A
x
1
∩
A
x
2
∩
.
.
.
∩
A
x
i
∣
|{A_{x_1}}\cap{A_{x_2}}\cap...\cap{A_{x_i}}|
∣Ax1∩Ax2∩...∩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=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
中间用到的是二项式定理(百度百科链接),然后证毕
在实际使用容斥的时候,我们如果要计算所有条件都不满足的方案数,只要用全集减就好了,即
∣
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}|
∣A1∩A2∩...∩An∣=∣U∣−∣A1∪A2∪...∪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=0∑iai,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,1g1⋅⋅⋅a0,ngna1,0g0+a1,1g1⋅⋅⋅a1,ngn⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ ⋅⋅⋅ an,0g0+an,1g1⋅⋅⋅an,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
<
j
i<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
j≤i,并且贡献为一个系数
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=0∑iai,jgj⇔gi=j=0∑ibi,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=0∑nai,jgj⇔gi=j=0∑nbi,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={0,i̸=j1,i=j
是不是看起来非常简单呢
然后就有个同样很显然的式子
f
i
=
∑
j
=
0
i
δ
i
j
f
j
f_i=\sum_{j=0}^i\delta_{ij}f_j
fi=j=0∑iδ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=0∑iai,jgj⇔gi=j=0∑ibi,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&=\sum_{j=0}^ia_{i,j}g_j\\ &=\sum_{j=0}^ia_{i,j}\sum_{k=0}^jb_{j,k}f_k\\ &=\sum_{k=0}^i(\sum_{j=k}^ia_{i,j}b_{j,k})f_k \end{aligned}
fi=j=0∑iai,jgj=j=0∑iai,jk=0∑jbj,kfk=k=0∑i(j=k∑iai,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=k∑iai,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=0∑nai,jgj⇔gi=j=0∑nbi,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=0∑nai,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=0∑i(−1)j(ji)gj⇔gi=j=0∑i(−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}&=\sum_{j=k}^i(-1)^j\binom{i}{j}*(-1)^k\binom{j}{k}\\ &=\sum_{j=k}^i(-1)^{j+k}\binom{i}{j}\binom{j}{k}\\ &=\sum_{j=k}^i(-1)^{j+k}\binom{i}{k}\binom{i-k}{i-j}\\ &=\binom{i}{k}(-1)^k\sum_{j=k}^i(-1)^j\binom{i-k}{i-j}\\ &=\binom{i}{k}(-1)^k\sum_{j=0}^{i-k}(-1)^{i-j}\binom{i-k}{j}\\ &=\begin{cases} \binom{i}{k}(-1)^k(1-1)^{i-k}&(i\neq k)\\ \binom{i}{k}(-1)^k&(i=k) \end{cases}\\ &=\begin{cases} 0&(i\neq k)\\ 1&(i=k) \end{cases}\\ &=\delta_{i,k} \end{aligned}
j=k∑iai,jbj,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
补充一下,对于中间有一部用到了如下式子:
(
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}&=\frac{a!}{b!(a-b)!}·\frac{b!}{c!(b-c)!}\\ &=\frac{a!}{(a-b)!c!(b-c)!}\\ &=\frac{a!}{c!(a-c)!}·\frac{(a-c)!}{(a-b)!(b-c)!}\\ &=\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)
更常用的式子:
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=0∑i(ji)gj⇔gi=j=0∑i(−1)i−j(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)i−j(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}&=\sum_{j=k}^i\binom{i}{j}*(-1)^{j-k}\binom{j}{k}\\ &=\sum_{j=k}^i\binom{i}{j}*(-1)^{j-k}\binom{j}{k}*(-1)^{k+k}\\ &=\sum_{j=k}^i(-1)^{j+k}\binom{i}{j}\binom{j}{k}\\ &=\delta_{i,k} \end{aligned}
j=k∑iai,jbj,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
容易发现,代入以后稍微转化一下就和第一个式子的证明一样了
当然,二项式反演还有一个形式(其实本质相同)
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=0∑i(n−in−j)gj⇔gi=j=0∑i(−1)i−j(n−in−j)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=(n−in−j),bi,j=(−1)i−j(n−in−j)
代入
∑
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}&=\sum_{j=k}^i\binom{n-j}{n-i}*(-1)^{j-k}\binom{n-k}{n-j}\\ &=\sum_{j=k}^i\binom{n-j}{n-i}*(-1)^{j-k}\binom{n-k}{n-j}*(-1)^{k+k}\\ &=\sum_{j=k}^i(-1)^{j+k}\binom{n-k}{n-j}\binom{n-j}{n-i}\\ &=\sum_{j=k}^i(-1)^{j+k}\binom{n-k}{n-i}\binom{i-k}{i-j}\\ &=\binom{n-k}{n-i}(-1)^k\sum_{j=k}^i(-1)^j\binom{i-k}{i-j}\\ &=\binom{n-k}{n-i}(-1)^k\sum_{j=0}^{i-k}(-1)^{i-j}\binom{i-k}{j}\\ &=\begin{cases} \binom{n-k}{n-i}(-1)^k(1-1)^{i-k}&(i\neq k)\\ \binom{n-k}{n-i}(-1)^k&(i=k) \end{cases}\\ &=\begin{cases} 0&(i\neq k)\\ 1&(i=k) \end{cases}\\ &=\delta_{i,k} \end{aligned}
j=k∑iai,jbj,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
=
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=i∑n(ij)g(j)⇔g(i)=j=i∑n(−1)j−i(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=0∑i{ij}gj⇔gi=j=0∑i[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=0∑n[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=0∑n{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}&=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i\\ &=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}x^{j\downarrow}\\ &=\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∑nj=0∑i[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=0∑nj=0∑i[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=0∑nj=0∑i[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}&=\sum_{j=k}^i\begin{Bmatrix}i\\j\end{Bmatrix}\begin{bmatrix}j\\k\end{bmatrix}\\ &=\delta_{i,k} \end{aligned}
j=k∑iai,jbj,k=j=k∑i{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=0∑i{ij}gj⇔gi=j=0∑i(−1)i−j[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=0∑i{n−jn−i}gj⇔gi=j=0∑i(−1)i−j[n−jn−i]fj
证明即先知道
∑
j
=
k
i
a
i
,
j
b
j
,
k
=
δ
i
,
k
\begin{aligned} \sum_{j=k}^ia_{i,j}b_{j,k}&=\delta_{i,k} \end{aligned}
j=k∑iai,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=i∑n{ji}g(j)⇔g(i)=j=i∑n(−1)j−i[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=j∣i∑gj⇔gi=j∣i∑μ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,若n无平方数因数且n=p1∗p2⋅⋅⋅pk0, 若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=[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
=
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}&=\sum_{j=1}^n[j|i][k|j]*\mu_{\frac jk}\\ &=[k|i]\sum_{j=1}^n[j|i][k|j]*\mu_{\frac jk}\\ &=[k|i]\sum_{j=1}^{\frac nk}[j|\frac ik]*\mu_j\\ &=[k|i]\sum_{j|\frac ik}\mu_j\\ &=[k=i] \end{aligned}
j=1∑nai,jbj,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博客
多项式乘法用到了离散傅里叶变换,它使插值的复杂度从
Θ
(
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&=\sum_{j=0}^{n-1}(\omega_n^i)^jg_j\\ &=\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∗jgj
现在已知
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&=\sum_{j=0}^{n-1}\frac{(\omega_n^i)^{-j}}nf_j\\ &=\sum_{j=0}^{n-1}\frac{\omega_n^{-i*j}}nf_j \end{aligned}
gi=j=0∑n−1n(ωni)−jfj=j=0∑n−1nωn−i∗jfj
然后我们来验证一下这个反演的正确性
已知
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=ωni∗j,bi,j=nωn−i∗j
我们将
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}&=\sum_{j=0}^{n-1}\omega_n^{i*j}\frac{\omega_n^{-j*k}}n\\ &=\sum_{j=0}^{n-1}\frac{\omega_n^{(i-k)*j}}n\\ &=\delta_{i,k} \end{aligned}
j=0∑n−1ai,jbj,k=j=0∑n−1ωni∗jnωn−j∗k=j=0∑n−1nωn(i−k)∗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+⋅⋅⋅+xn−1=x−1xn−1)
算出结果是
(
ω
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(ω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
]
=
1
n
∑
i
=
0
n
−
1
(
ω
n
x
)
i
[n|x]=\frac1n\sum_{i=0}^{n-1}(\omega_n^x)^i
[n∣x]=n1i=0∑n−1(ω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}=T⊆S∑(−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}=T⊆S∑(−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}&=\sum_{T\subseteq X\subseteq S}(-1)^{|X|+|T|}\\ &=\delta_{S,T}\\ \end{aligned}
T⊆X⊆S∑aS,XbX,T=T⊆X⊆S∑(−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)=T⊆S∑g(T)⇔g(S)=T⊆S∑(−1)∣S∣−∣T∣f(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)∣S∣−∣T∣
∑
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}&=\sum_{T\subseteq X\subseteq S}(-1)^{|X|-|T|}\\ &=\delta_{S,T}\\ \end{aligned}
T⊆X⊆S∑aS,XbX,T=T⊆X⊆S∑(−1)∣X∣−∣T∣=δS,T
和最值反演里的反演证明几乎一样,都很显然
容斥反演的联系
反演是一种特殊的容斥,任何反演都可以通过容斥推得
总结
反演作为一种特殊的容斥,还是会被经常用到的,活用各类反演非常重要