反演学习小计

31 篇文章 0 订阅
14 篇文章 0 订阅

参考资料

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

二项式反演

简单的错排递推式

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

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

式子

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

推导:

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

二项式反演的另一种对偶形式

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

  • f ( n ) f(n) f(n)推导 g ( n ) g(n) g(n)相当于是求一个集合的补集的交集。
  • 那么补集的补集就是原集,所以从 g ( n ) g(n) g(n)推导 f ( n ) f(n) f(n)也是一样的式子。

莫比乌斯反演

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

推导

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

转移的矩阵表示

  • 我们可以把转移看作矩阵乘法。
  • 相当于是[1,n]矩阵乘上一个[n,n]的矩阵。
  • 那么反演不就是矩阵求逆吗!
  • 或者说,如果转移矩阵 A A A为系数,反演矩阵为 B B B,那么这个反演成功当且仅当 A ∗ B = I A*B=I AB=I.

子集反演

一道简单题

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

正经的式子

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

推导

  • 同上和上上,我们也可以来一个容斥的系数
    ∑ T ⊆ S ( − 1 ) ∣ T ∣ = [ S = 0 ] \sum_{T\subseteq S}(-1)^{|T|}=[S=0] TS(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) g(S)=TS[ST=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) =TSRST(1)Rg(T)
    = ∑ R ⊆ S ( − 1 ) ∣ R ∣ ∑ T ⊆ S − R g ( T ) =\sum_{R\subseteq S}(-1)^{|R|}\sum_{T\subseteq S-R}g(T) =RS(1)RTSRg(T)
    = ∑ R ⊆ S ( − 1 ) ∣ R ∣ f ( S − R ) =\sum_{R\subseteq S}(-1)^{|R|}f(S-R) =RS(1)Rf(SR)
    = ∑ T ⊆ S ( − 1 ) ∣ S − T ∣ f ( T ) =\sum_{T\subseteq S}(-1)^{|S-T|}f(T) =TS(1)STf(T)
  • 妙啊!
  • 或者也可以这样:
    f ( S ) = ∑ S ⊆ T g ( T ) f(S)=\sum_{S\subseteq T}g(T) f(S)=STg(T)
    g ( S ) = ∑ S ⊆ T ( − 1 ) ∣ T − S ∣ f ( T ) g(S)=\sum_{S\subseteq T}(-1)^{|T-S|}f(T) g(S)=ST(1)TSf(T)

更神奇的多重子集反演

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

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

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

卷积

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

总结

  • 反演实际上就是一种容斥(所以上面相当于是在证明容斥为什么是对的)
  • 对于推式子来说,反演有很大的作用。
  • 但是还是要根据实际的题目而论。
  • 之后做到好题再记录下来吧。

单位根反演

upd in 2020.07.20

  • 类似二项式反演的基本式子,单位根也有一个基本式子:
    [ n ∣ k ] = 1 n ∑ i = 0 n − 1 w n i k [n|k]=\frac{1}{n}\sum_{i=0}^{n-1}w_n^{ik} [nk]=n1i=0n1wnik
  • 证明考虑如果 n ∣ k n|k nk那么所有 w n i k w_n^{ik} wnik都为1.
  • 否则等比数列求和即为:
    1 n ∗ w n n k − w n 0 w n k − 1 = 0 \frac{1}{n}*\frac{w_n^{nk}-w^0_n}{w_n^k-1}=0 n1wnk1wnnkwn0=0
  • 有了这个东西我们就可以得到一个反演的常用式子,用于求解多项式某些位置的系数之和:
    ∑ i = 0 n [ k ∣ i ] [ x i ] f ( x ) = ∑ j = 0 k − 1 f ( w k j ) \sum_{i=0}^n[k|i][x^i]f(x)=\sum_{j=0}^{k-1}f(w_k^j) i=0n[ki][xi]f(x)=j=0k1f(wkj)

推导

∑ i = 0 n [ k ∣ i ] [ x i ] f ( x ) = ∑ i = 0 n [ x i ] f ( x ) ∑ j = 0 k − 1 1 k w k i j \sum_{i=0}^n[k|i][x^i]f(x)=\sum_{i=0}^n[x^i]f(x)\sum_{j=0}^{k-1}\frac{1}{k}w_k^{ij} i=0n[ki][xi]f(x)=i=0n[xi]f(x)j=0k1k1wkij
= 1 k ∑ j = 0 k − 1 ∑ i = 0 n a i ( w k j ) i =\frac{1}{k}\sum_{j=0}^{k-1}\sum_{i=0}^na_i(w_k^{j})^i =k1j=0k1i=0nai(wkj)i
= 1 k ∑ j = 0 k − 1 f ( w k j ) =\frac{1}{k}\sum_{j=0}^{k-1}f(w_k^j) =k1j=0k1f(wkj)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值