反演


什么是反演

对于已知Fi=ai,jGj

反演得到Gi=bi,jFj

NTT,FFT,FWT的逆卷积都可以认为是一种反演


子集反演

即反解高位前缀和

常见我们写成代码是

1
2
3
4
5
void FWT(int n,int *a,int f){
for(int i=1;i<n;i<<=1)
for(int j=1;j<n;++j) if(j&i)
a[j]+=a[j^i]*f;
}

FS=TSGT

GS=TS(1)|TS|FS

证明

GS=TS(1)|TS|FS

GS=TS(1)|TS|RTFR

GS=TSGRTR,RS(1)|SR|

GS=TSGRR(ST)(1)|R|

TSGT[ST=\empty]

成立


莫比乌斯反演

n的质因数分解为n=Π1mpici

前置知识:莫比乌斯系数


μ(n)={1n=1(1)mci=10ci>1

性质:i|nμ(i)=[n=1]

证明:

ci>1μ(n)=0

ci{0,1}

i|nμ(i)=S{pi}(1)|S|=[m=0]


Fi=j|iGi

Gi=j|iμ(ij)F(j)

证明

Gi=j|iμ(ij)F(j)

Gi=j|iμ(ij)k|jGk

Gi=j|iGjk|ijμ(k)

带入上面的μ(n)性质,这个式子成立


 

二项式反演

前置知识 0nC(n,i)=[n=0]

Gi=0iC(i,j)Fj

直接容斥这个式子,就能得到

Fi=Gij<iC(i,j)Fj

但是容斥过程是n2的,如果n较大,用分治NTT实现也是nlog2n

所以需要二项式反演

反演:Gi=0iC(i,j)FjFi=0i(1)ijC(i,j)Gj

有时候看到是Gi=inC(j,i)FjFi=in(1)ijC(j,i)Gj

证明

Fi=in(1)ijC(j,i)Gj

Fi=in(1)ijC(i,j)jnC(j,k)Fk

Fi=0iFjjiC(i,k)C(k,j)(1)ik

jiC(i,k)C(k,j)(1)ik=[i=j]

C(i,k)C(k,j)=i!j!(ik)!(kj)!

=i!j!(ij)!(ij)!(ik)!(kj)!=C(i,j)C(ij,ik)

jiC(i,k)C(k,j)(1)ik=C(i,j)0ij(1)kC(ij,k)=[i=j]C(i,j)=[i=j]


待补。。。