zoukankan      html  css  js  c++  java
  • 反演学习小计

    参考资料

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

    二项式反演

    简单的错排递推式

    i=0n(1)iCni(ni)!sum_{i=0}^n(-1)^iC_n^i(n-i)!

    • 即枚举每一次至少几个位置不合法,最后容斥出0个位置不合法的方案。
    • 考虑恰好有m(m>0)个位置不合法的方案,对于一种m个位置的选择来说,它会在枚举至少0…m-1的时候被算一次。即i=0m(1)iCmi=(11)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)niCnif(i)g(n)=sum_{i=0}^{n}(-1)^{n-i}C_n^if(i)

    推导:

    • 首先有
      i=0n(1)iCni=i=0n(1)iCni1ni=(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[ni=0]Cnig(i)g(n)=sum_{i=0}^n[n-i=0]*C_n^ig(i)
      =i=0nj=0ni(1)jCnijCnig(i)=sum_{i=0}^nsum_{j=0}^{n-i}(-1)^jC_{n-i}^j*C_n^ig(i)
      =i=0nj=0ni(1)jCnjiCnjg(i)=sum_{i=0}^nsum_{j=0}^{n-i}(-1)^jC_{n-j}^i*C_n^jg(i)
      =j=0n(1)jCnji=0njCnjig(i)=sum_{j=0}^n(-1)^jC_n^jsum_{i=0}^{n-j}C_{n-j}^ig(i)
      =j=0n(1)jCnjf(nj)=sum_{j=0}^n(-1)^jC_n^jf(n-j)
      =i=0n(1)niCnif(i)=sum_{i=0}^{n}(-1)^{n-i}C_n^if(i)

    莫比乌斯反演

    f(n)=dng(d)f(n)=sum_{d|n}g(d)
    g(n)=dnμ(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]
    • 类比莫比乌斯反演,我们也可以构造一个容斥系数,既然之前是求和的关系,现在我们要考虑因数的关系,所以自然就有了这个dnμ(d)=[n=1]sum_{d|n}mu(d)=[n=1],后面我们会发现μ(d)mu(d)的求法。
    • 同上,我们也可以这样子推导:
      g(n)=dn[nd=1]g(d)g(n)=sum_{d|n}[frac{n}{d}=1]*g(d)
      =dnkndμ(k)g(d)=sum_{d|n}sum_{k|frac{n}{d}}mu(k)*g(d)
      =knμ(k)dnkg(d)=sum_{k|n}mu(k)*sum_{d|frac{n}{k}}g(d)
      =knμ(k)f(nk)=sum_{k|n}mu(k)f(frac{n}{k})
      =dnμ(nd)f(d)=sum_{d|n}mu(frac{n}{d})f(d)
    • 妙啊,殊途同归。
    • 实际上对于以下的莫比乌斯反演的变式也是一样的推法。
      f(n)=ndg(d)f(n)=sum_{n|d}g(d)
      g(n)=ndμ(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]=ij=ka[i]b[j]c[k]=sum_{i |j=k}a[i]*b[j]
    • FWT一波 。考虑比较容易计算c[S]=TSc[T]c'[S]=sum_{Tsubseteq S}c[T]
    • c[S]=iSa[i]jSb[j]c'[S]=sum_{isubseteq S}a[i]*sum_{j subseteq S}b[j]
    • 然后再反演一波得到c???
    • 实际上是c的高维前缀和为c’,倒着差分回去。。。
    • 但是用这个推式子可不行,于是就有了下面的反演。

    正经的式子

    f(S)=TSg(T)f(S)=sum_{Tsubseteq S}g(T)
    g(S)=TS(1)STf(T)g(S)=sum_{Tsubseteq S}(-1)^{|S-T|}f(T)

    推导

    • 同上和上上,我们也可以来一个容斥的系数
      TS(1)T=[S=0]sum_{Tsubseteq S}(-1)^{|T|}=[S=0]
    • 和二项式反演的意义是一样的,组合数就是在S中选一个|T|=i的方案。
    • 然后再再再用相同的方法。
      g(S)=TS[ST=0]g(T)g(S)=sum_{Tsubseteq S}[S-T=0]g(T)
      =TSRST(1)Rg(T)=sum_{Tsubseteq S}sum_{Rsubseteq S-T}(-1)^{|R|}g(T)
      =RS(1)RTSRg(T)=sum_{Rsubseteq S}(-1)^{|R|}sum_{Tsubseteq S-R}g(T)
      =RS(1)Rf(SR)=sum_{Rsubseteq S}(-1)^{|R|}f(S-R)
      =TS(1)STf(T)=sum_{Tsubseteq S}(-1)^{|S-T|}f(T)
    • 妙啊!
    • 或者也可以这样:
      f(S)=STg(T)f(S)=sum_{Ssubseteq T}g(T)
      g(S)=ST(1)TSf(T)g(S)=sum_{Ssubseteq T}(-1)^{|T-S|}f(T)

    更神奇的多重子集反演

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

    • 就有f(S)=TSg(T)f(S)=sum_{Tsubseteq S}g(T)g(S)=TSμ(ST)f(T)g(S)=sum_{Tsubseteq S}mu(S-T)f(T)

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

    卷积

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

    总结

    • 反演实际上就是一种容斥(所以上面相当于是在证明容斥为什么是对的)
    • 对于推式子来说,反演有很大的作用。
    • 但是还是要根据实际的题目而论。
    • 之后做到好题再记录下来吧。
  • 相关阅读:
    [原]Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目
    [原]jenkins(六)---jenkins远程部署脚本
    [原]jenkins(五)---jenkins添加项目
    [原]Jenkins(四)---Jenkins添加密钥对
    [原]Jenkins(三)---Jenkins初始配置和插件配置
    [原]Jenkins(二)---jenkins之Git+maven+jdk+tomcat
    mysql给root开启远程访问权限
    [原]git的使用(六)---远程仓库
    [原]git的使用(五)---删除文件
    [原]git的使用(四)---撤销修改
  • 原文地址:https://www.cnblogs.com/DeepThinking/p/13090917.html
Copyright © 2011-2022 走看看