反演学习小计

参考资料

炫酷反演魔术,打开了我新世界的大门,原来这些反演都是一个东西!!!

二项式反演

简单的错排递推式

∑i=0n(−1)iCni(n−i)!\sum_{i=0}^n(-1)^iC_n^i(n-i)!

  • 即枚举每一次至少几个位置不合法,最后容斥出0个位置不合法的方案。
  • 考虑恰好有m(m>0)个位置不合法的方案,对于一种m个位置的选择来说,它会在枚举至少0…m-1的时候被算一次。即∑i=0m(−1)iCmi=(1−1)m=[m=0]\sum_{i=0}^m(-1)^iC_m^i=(1-1)^m=[m=0],最后对于m>0的贡献都为0,只有m=0的贡献为1,即我们要求的答案。

式子

f(n)=∑i=0nCnig(i)f(n)=\sum_{i=0}^{n}C_n^ig(i)
g(n)=∑i=0n(−1)n−iCnif(i)g(n)=\sum_{i=0}^{n}(-1)^{n-i}C_n^if(i)

推导:

  • 首先有
    ∑i=0n(−1)iCni=∑i=0n(−1)iCni∗1n−i=(−1+1)n=[n=0]\sum_{i=0}^{n}(-1)^iC_n^i=\sum_{i=0}^{n}(-1)^iC_n^i*1^{n-i}=(-1+1)^n=[n=0]
  • 然后
    g(n)=∑i=0n[n−i=0]∗Cnig(i)g(n)=\sum_{i=0}^n[n-i=0]*C_n^ig(i)
    =∑i=0n∑j=0n−i(−1)jCn−ij∗Cnig(i)=\sum_{i=0}^n\sum_{j=0}^{n-i}(-1)^jC_{n-i}^j*C_n^ig(i)
    =∑i=0n∑j=0n−i(−1)jCn−ji∗Cnjg(i)=\sum_{i=0}^n\sum_{j=0}^{n-i}(-1)^jC_{n-j}^i*C_n^jg(i)
    =∑j=0n(−1)jCnj∑i=0n−jCn−jig(i)=\sum_{j=0}^n(-1)^jC_n^j\sum_{i=0}^{n-j}C_{n-j}^ig(i)
    =∑j=0n(−1)jCnjf(n−j)=\sum_{j=0}^n(-1)^jC_n^jf(n-j)
    =∑i=0n(−1)n−iCnif(i)=\sum_{i=0}^{n}(-1)^{n-i}C_n^if(i)

莫比乌斯反演

f(n)=∑d∣ng(d)f(n)=\sum_{d|n}g(d)
g(n)=∑d∣nμ(nd)f(d)g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d)

推导

  • 注意到对于二项式反演,我们有一条式子∑i=0n(−1)iCni=[n=0]\sum_{i=0}^{n}(-1)^iC_n^i=[n=0]
  • 类比莫比乌斯反演,我们也可以构造一个容斥系数,既然之前是求和的关系,现在我们要考虑因数的关系,所以自然就有了这个∑d∣nμ(d)=[n=1]\sum_{d|n}\mu(d)=[n=1],后面我们会发现μ(d)\mu(d)的求法。
  • 同上,我们也可以这样子推导:
    g(n)=∑d∣n[nd=1]∗g(d)g(n)=\sum_{d|n}[\frac{n}{d}=1]*g(d)
    =∑d∣n∑k∣ndμ(k)∗g(d)=\sum_{d|n}\sum_{k|\frac{n}{d}}\mu(k)*g(d)
    =∑k∣nμ(k)∗∑d∣nkg(d)=\sum_{k|n}\mu(k)*\sum_{d|\frac{n}{k}}g(d)
    =∑k∣nμ(k)f(nk)=\sum_{k|n}\mu(k)f(\frac{n}{k})
    =∑d∣nμ(nd)f(d)=\sum_{d|n}\mu(\frac{n}{d})f(d)
  • 妙啊,殊途同归。
  • 实际上对于以下的莫比乌斯反演的变式也是一样的推法。
    f(n)=∑n∣dg(d)f(n)=\sum_{n|d}g(d)
    g(n)=∑n∣dμ(nd)f(d)g(n)=\sum_{n|d}\mu(\frac{n}{d})f(d)

转移的矩阵表示

  • 我们可以把转移看作矩阵乘法。
  • 相当于是[1,n]矩阵乘上一个[n,n]的矩阵。
  • 那么反演不就是矩阵求逆吗!

子集反演

一道简单题

  • 给出a[i],b[i](0<=i<2n)a[i],b[i](0<=i<2^n),求c[k]=∑i∣j=ka[i]∗b[j]c[k]=\sum_{i |j=k}a[i]*b[j]。
  • FWT一波 。考虑比较容易计算c′[S]=∑T⊆Sc[T]c'[S]=\sum_{T\subseteq S}c[T]
  • c′[S]=∑i⊆Sa[i]∗∑j⊆Sb[j]c'[S]=\sum_{i\subseteq S}a[i]*\sum_{j \subseteq S}b[j]。
  • 然后再反演一波得到c???
  • 实际上是c的高维前缀和为c’,倒着差分回去。。。
  • 但是用这个推式子可不行,于是就有了下面的反演。

正经的式子

f(S)=∑T⊆Sg(T)f(S)=\sum_{T\subseteq S}g(T)
g(S)=∑T⊆S(−1)∣S−T∣f(T)g(S)=\sum_{T\subseteq S}(-1)^{|S-T|}f(T)

推导

  • 同上和上上,我们也可以来一个容斥的系数
    ∑T⊆S(−1)∣T∣=[S=0]\sum_{T\subseteq S}(-1)^{|T|}=[S=0]
  • 和二项式反演的意义是一样的,组合数就是在S中选一个|T|=i的方案。
  • 然后再再再用相同的方法。
    g(S)=∑T⊆S[S−T=0]g(T)g(S)=\sum_{T\subseteq S}[S-T=0]g(T)
    =∑T⊆S∑R⊆S−T(−1)∣R∣g(T)=\sum_{T\subseteq S}\sum_{R\subseteq S-T}(-1)^{|R|}g(T)
    =∑R⊆S(−1)∣R∣∑T⊆S−Rg(T)=\sum_{R\subseteq S}(-1)^{|R|}\sum_{T\subseteq S-R}g(T)
    =∑R⊆S(−1)∣R∣f(S−R)=\sum_{R\subseteq S}(-1)^{|R|}f(S-R)
    =∑T⊆S(−1)∣S−T∣f(T)=\sum_{T\subseteq S}(-1)^{|S-T|}f(T)
  • 妙啊!
  • 或者也可以这样:
    f(S)=∑S⊆Tg(T)f(S)=\sum_{S\subseteq T}g(T)
    g(S)=∑S⊆T(−1)∣T−S∣f(T)g(S)=\sum_{S\subseteq T}(-1)^{|T-S|}f(T)

更神奇的多重子集反演

  • 定义μ(S)\mu(S),如果S中有重复元素就是0,否则是(−1)∣S∣(-1)^{|S|},因为没有重复元素,所以∑T⊆Sμ(T)=[S=0]\sum_{T\subseteq S}\mu(T)=[S=0],跟上面是一样的。

  • 就有f(S)=∑T⊆Sg(T)f(S)=\sum_{T\subseteq S}g(T),g(S)=∑T⊆Sμ(S−T)f(T)g(S)=\sum_{T\subseteq S}\mu(S-T)f(T)

  • 如果将每一个元素看作质因数,那这不就是莫比乌斯反演吗!!!

卷积

  • FFT也是反演???(雾)
  • 其实反演就是将ff分成两个独立的部分,例如[d∣gcd(i,j)]−>[d∣i][d∣j][d|gcd(i,j)]->[d|i][d|j]
  • 然后再把他们合起来。

总结

  • 反演实际上就是一种容斥(所以上面相当于是在证明容斥为什么是对的)
  • 对于推式子来说,反演有很大的作用。
  • 但是还是要根据实际的题目而论。
  • 之后做到好题再记录下来吧。
posted @ 2019-11-06 21:59  Deep_Thinking  阅读(207)  评论(0)    收藏  举报