反演

反演

已知f 使得 an=i=0fn,ibi

g 满足 bn=i=0gn,iai

有不少的 fn,>n=0 所以 对应的替换成n也是同样道理

有不少文章从意义角度, 或者直接给表达式,让你验证正确性来写的, 而我没有智力, 总觉得很怪和难以理解, 这篇主要通过EGF和假设没有预知能力来写

基本理论

对于一个明确反演, f实际是给定的常数序列, 看成矩阵乘法有(其中a,b 为列向量)

a=Mfb

b=Mf1a=Mga

MfMg=I (单位矩阵)

k=0Mf,i,kMg,k,j=[i=j] 是充要条件

一般题目中 知道af, 需要求b时使用

下面一般步骤首先建立分别的EGF, 然后通过正向得到两个EGF的等价关系, 最后转换等价关系推得逆向的递推式

egf(指数形 生成 函数), 构建EGF:

F(x)=i=0aixii!

G(x)=i=0bixii!

常见反演

前缀和反演(差分)

从前缀和与差分开始 an=i=0n1bibn=anan1

前缀和差分 本身不需要用到反演知识, 但从性质上也属于一种反演, 作为对比和样例很好说明问题

前缀和 an=i=0n1bi

差分 bn=anan1

以大小为4为例 wolframalpha

Mf=(1000110011101111),Mg=(1000110001100011),MfMg=(1000010000100001)


F(x)=i=0(j=0i1bj)xii!

=j=0bji=jxii!

F(x)dx=j=0bji=jxi+1(i+1)!=j=0bji=j+1xii!

F(x)(F(x)dx)=j=0bj(i=jxii!i=j+1xii!)=j=0bjxjj!=G(x)

i=0bixii!=G(x)=F(x)(F(x)dx)=i=0(aiai1)xii!

同样得到了bi=aiai1


二维前缀和

两个维度在运算上其实互不影响, 所以两个维度的逆运算也是互不影响

二项式反演

an=i=0n(ni)(1)ibibn=i=0n(ni)(1)iai

正向

F(x)=i=0(j=0i(ij)(1)jbj)xii!

=j=0(1)jbji=j(ij)xii!

=j=0(1)jbjj!xji=j1(ij)!xij

=j=0(1)jbjj!xji=01i!xi

=j=0bjj!(x)ji=01i!xi

=j=0bjj!(x)jex

=G(x)ex

反过来

i=0bixii!=G(x)=F(x)e(x)=F(x)ex

这里依然可以像上面展开, 但是实际上发现 GF之间是相同的转化关系 所以对称直接就有了, 不需要再推一次

另一个形式 an=i=n(in)bibn=i=n(1)in(in)ai

F(x)=i=0(j=i(ji)bj)xii!

=j=0j!bji=0jxii!(ji)!i!

并不能搞, 那就先变形一下an=n!an,bn=n!bn

即要证 an=i=nbi(in)!bi=i=n(1)inai(in)!

F(x)=i=0(j=ibj(ji)!)xii!

=j=0bji=0jxi(ji)!i!

=j=0bjj!i=0j(ji)xi

=j=0bjj!(1+x)j

=G(1+x)

反过来

i=0bixii!=G(x)=F(x1)=i=0ai(x1)ii!

=i=0aij=0i(ij)xj(1)iji!

=i=0aij=0ixj(1)ij(ij)!j!

=j=0xjj!i=jai(1)ij(ij)! 得证

注意到 ex=(x)ii!, 有些时候a,b在下标大于某个值m时都是0, 所以可以翻转ai=ami

相当于a,b生成函数之间有 a(x)=y(x)ex, 这里还可以快速对序列 ab进行转换

Stirling反演

an=k=0n{nk}bkbn=k=0n[nk]ak

注: 这里的 第一类stirling数是带符号的, 如果要写成不带符号的则是[nk](1)nk

同样的原理 F^(z)=G^(ez1)


F(x)=i=0(j=0i{ij}bj)xii!

=j=0bji=j{ij}xii!

=j=0bj(ex1)jj!

=G(ex1)

反过来

i=0bixii!=G(x)=F(ln(x+1))=i=0ai(ln(x+1))ii!

=i=0ai(j=i[ji]xjj!)

=j=0xjj!i=0jai[ji]

莫比乌斯反演

an=inbibn=inμ(ni)ai

bn=inbi[i=n]

=inbni[i=1]

=inbnidiμ(d)

=dnμ(d)di,inbni

=dnμ(d)dnk,knbk

=jnμ(nj)njnk,knbk

=jnμ(nj)kjbk

=jnμ(nj)aj


莫反一般配合[n=1]使用,

因为dnμ(d)={1if n=1,0if n>1.

这个根据wikipedia 似乎也可以 生成函数搞, 但实际操作起来还是 直接推导简单

子集反演

g(S)=TSf(T)f(S)=TS(1)|ST|g(T)

核心原理就是奇偶正负抵消

类似 莫比乌斯的[n=1] , 这里需要的工具是[S=]

h(S)=TS(1)|ST|

=i=0|S|(|S|i)(1)|S|i

=(11)|S|

=[S=]


因此

f(S)=QSf(Q)[SQ=]

=QSf(Q)h(SQ)

=QSf(Q)TSQ(1)|SQT|

=QSf(Q)T+QS(1)|S(T+Q)|

=QSf(Q)QRS(1)|SR|

=RS(1)|SR|QRf(Q)

=RS(1)|SR|g(R)

Min-Max容斥

max(S)=TS(1)|T|1min(T), 核心原理就是奇偶正负抵消

对称 min(S)=TS(1)|T|1max(T), 相当于所有元素乘上1

在期望中使用

E(max(S))=E(TS(1)|T|1min(T))=TS(1)|T|1E(min(T))


设集合内元素从小到大 排序了

TS(1)|T|1min(T)

=TS,ai=min(T)(1)|T|1ai, 直接指定T

=i=1naiTS,ai=min(T)(1)|T|1, 先指定ai 再指定T

=i=1naij=1ni+1TS,ai=min(T),|T|=j(1)j1, 先指定ai, 再指定T的大小

=i=1naij=1ni+1(1)j1TS,ai=min(T),|T|=j

=i=1naij=1ni+1(1)j1(nij1)

=i=1naij=0ni(1)j(nij)

=i=1nai(11)ni

=an

=max(Sn)

单位根反演

FFT

NTT

FWT

示例代码

二项式反演

Stirling反演

莫比乌斯反演

子集反演

Min-Max容斥

单位根反演

FFT

NTT

FWT

相关文章

wikipedia 生成函数反演

https://vfleaking.blog.uoj.ac/slide/87

洛谷 炫酷反演魔术


abc 272 中使用二项式反演

abc 278 stirling反演

abc 242 min-max容斥

abc 215 子集反演

莫比乌斯反演