参考资料
炫酷反演魔术,打开了我新世界的大门,原来这些反演都是一个东西!!!
二项式反演
简单的错排递推式
∑ i = 0 n ( − 1 ) i C n i ( n − i ) ! \sum_{i=0}^n(-1)^iC_n^i(n-i)! i=0∑n(−1)iCni(n−i)!
- 即枚举每一次至少几个位置不合法,最后容斥出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=(1−1)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=0∑nCnig(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=0∑n(−1)n−iCnif(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=0∑n(−1)iCni=i=0∑n(−1)iCni∗1n−i=(−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=0∑n[n−i=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=0∑nj=0∑n−i(−1)jCn−ij∗Cnig(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=0∑nj=0∑n−i(−1)jCn−ji∗Cnjg(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=0∑n(−1)jCnji=0∑n−jCn−jig(i)
= ∑ j = 0 n ( − 1 ) j C n j f ( n − j ) =\sum_{j=0}^n(-1)^jC_n^jf(n-j) =j=0∑n(−1)jCnjf(n−j)
= ∑ i = 0 n ( − 1 ) n − i C n i f ( i ) =\sum_{i=0}^{n}(-1)^{n-i}C_n^if(i) =i=0∑n(−1)n−iCnif(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=0∑n(−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=0∑n(−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)=d∣n∑g(d)
g
(
n
)
=
∑
d
∣
n
μ
(
n
d
)
f
(
d
)
g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d)
g(n)=d∣n∑μ(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] ∑d∣nμ(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)=d∣n∑[dn=1]∗g(d)
= ∑ d ∣ n ∑ k ∣ n d μ ( k ) ∗ g ( d ) =\sum_{d|n}\sum_{k|\frac{n}{d}}\mu(k)*g(d) =d∣n∑k∣dn∑μ(k)∗g(d)
= ∑ k ∣ n μ ( k ) ∗ ∑ d ∣ n k g ( d ) =\sum_{k|n}\mu(k)*\sum_{d|\frac{n}{k}}g(d) =k∣n∑μ(k)∗d∣kn∑g(d)
= ∑ k ∣ n μ ( k ) f ( n k ) =\sum_{k|n}\mu(k)f(\frac{n}{k}) =k∣n∑μ(k)f(kn)
= ∑ d ∣ n μ ( n d ) f ( d ) =\sum_{d|n}\mu(\frac{n}{d})f(d) =d∣n∑μ(dn)f(d) - 妙啊,殊途同归。
- 实际上对于以下的莫比乌斯反演的变式也是一样的推法。
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum_{n|d}g(d) f(n)=n∣d∑g(d)
g ( n ) = ∑ n ∣ d μ ( n d ) f ( d ) g(n)=\sum_{n|d}\mu(\frac{n}{d})f(d) g(n)=n∣d∑μ(dn)f(d)
转移的矩阵表示
- 我们可以把转移看作矩阵乘法。
- 相当于是[1,n]矩阵乘上一个[n,n]的矩阵。
- 那么反演不就是矩阵求逆吗!
- 或者说,如果转移矩阵 A A A为系数,反演矩阵为 B B B,那么这个反演成功当且仅当 A ∗ B = I A*B=I A∗B=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]=∑i∣j=ka[i]∗b[j]。
FWT一波。考虑比较容易计算 c ′ [ S ] = ∑ T ⊆ S c [ T ] c'[S]=\sum_{T\subseteq S}c[T] c′[S]=∑T⊆Sc[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]=∑i⊆Sa[i]∗∑j⊆Sb[j]。
- 然后再反演一波得到c???
- 实际上是c的高维前缀和为c’,倒着差分回去。。。
- 但是用这个推式子可不行,于是就有了下面的反演。
正经的式子
f
(
S
)
=
∑
T
⊆
S
g
(
T
)
f(S)=\sum_{T\subseteq S}g(T)
f(S)=T⊆S∑g(T)
g
(
S
)
=
∑
T
⊆
S
(
−
1
)
∣
S
−
T
∣
f
(
T
)
g(S)=\sum_{T\subseteq S}(-1)^{|S-T|}f(T)
g(S)=T⊆S∑(−1)∣S−T∣f(T)
推导
- 同上和上上,我们也可以来一个容斥的系数
∑ T ⊆ S ( − 1 ) ∣ T ∣ = [ S = 0 ] \sum_{T\subseteq S}(-1)^{|T|}=[S=0] T⊆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) g(S)=T⊆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) =T⊆S∑R⊆S−T∑(−1)∣R∣g(T)
= ∑ R ⊆ S ( − 1 ) ∣ R ∣ ∑ T ⊆ S − R g ( T ) =\sum_{R\subseteq S}(-1)^{|R|}\sum_{T\subseteq S-R}g(T) =R⊆S∑(−1)∣R∣T⊆S−R∑g(T)
= ∑ R ⊆ S ( − 1 ) ∣ R ∣ f ( S − R ) =\sum_{R\subseteq S}(-1)^{|R|}f(S-R) =R⊆S∑(−1)∣R∣f(S−R)
= ∑ T ⊆ S ( − 1 ) ∣ S − T ∣ f ( T ) =\sum_{T\subseteq S}(-1)^{|S-T|}f(T) =T⊆S∑(−1)∣S−T∣f(T) - 妙啊!
- 或者也可以这样:
f ( S ) = ∑ S ⊆ T g ( T ) f(S)=\sum_{S\subseteq T}g(T) f(S)=S⊆T∑g(T)
g ( S ) = ∑ S ⊆ T ( − 1 ) ∣ T − S ∣ f ( T ) g(S)=\sum_{S\subseteq T}(-1)^{|T-S|}f(T) g(S)=S⊆T∑(−1)∣T−S∣f(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] ∑T⊆Sμ(T)=[S=0],跟上面是一样的。
-
就有 f ( S ) = ∑ T ⊆ S g ( T ) f(S)=\sum_{T\subseteq S}g(T) f(S)=∑T⊆Sg(T), g ( S ) = ∑ T ⊆ S μ ( S − T ) f ( T ) g(S)=\sum_{T\subseteq S}\mu(S-T)f(T) g(S)=∑T⊆Sμ(S−T)f(T)
-
如果将每一个元素看作质因数,那这不就是莫比乌斯反演吗!!!
卷积
- FFT也是反演???(雾)
- 其实反演就是将 f f f分成两个独立的部分,例如 [ d ∣ g c d ( i , j ) ] − > [ d ∣ i ] [ d ∣ j ] [d|gcd(i,j)]->[d|i][d|j] [d∣gcd(i,j)]−>[d∣i][d∣j]
- 然后再把他们合起来。
总结
- 反演实际上就是一种容斥(所以上面相当于是在证明容斥为什么是对的)
- 对于推式子来说,反演有很大的作用。
- 但是还是要根据实际的题目而论。
- 之后做到好题再记录下来吧。
单位根反演
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} [n∣k]=n1i=0∑n−1wnik - 证明考虑如果 n ∣ k n|k n∣k那么所有 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 n1∗wnk−1wnnk−wn0=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=0∑n[k∣i][xi]f(x)=j=0∑k−1f(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=0∑n[k∣i][xi]f(x)=i=0∑n[xi]f(x)j=0∑k−1k1wkij
=
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=0∑k−1i=0∑nai(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=0∑k−1f(wkj)