二项式反演
从错排数讲起,
考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。
用容斥来解决这个问题,不难发现错排数即为
g(n)=∑i=1n(−1)i(ni)(n−i)!
考虑二项式定理,
(1−1)n=∑i=0n(−1)i(ni)=0
上式当n=0时值为1,所以有
∑i=0n(−1)i(ni)=[n=0](∗式)
设n个元素排列数f(n)=n!,则显然有
f(n)=∑i=0n(ni)g(i)
将g(n)换一下形式有
g(n)=∑i=0n[n−i=0](ni)g(i)
将*式代入,有
g(n)=∑i=0n∑j=0n−i(−1)j(n−ij)(ni)g(i)
注意到
(n−ij)(ni)=(nj)(n−ji)
所以,有
g(n)=∑i=0n∑j=0n−i(−1)j(nj)(n−ji)g(i)
交换求和顺序,
g(n)=∑j=0n−i(−1)j(nj)∑i=0n(n−ji)g(i)
注意到右边是f()的形式
g(n)=∑i=0n(−1)i(ni)f(n−i)
换一下下标
g(n)=∑i=0n(−1)n−i(ni)f(i)
这就是二项式反演:
若 f(n)=∑ni=0(ni)g(i)
则 g(n)=∑ni=0(−1)n−i(ni)f(i)
斯特林数
第一类斯特林数:
留坑待填
第二类斯特林数:
n个不同的元素拆分成m个集合的方案数
记为
{nm}
递推公式(枚举最后一个元素转移):
{nm}
=
{n−1m−1}
+m*
{n−1m}
通项公式:
注意到
kn=∑km=0Amk{nm}
(n个不同的元素拆分成m个集合的方案数,允许空集)
则有
kn=∑m=0k(km)m!{nm}
使用二项式反演,则有
m!{nm}=∑k=0m(−1)m−k(mk)kn
整理后得到
{nm}=1m!∑k=0m(−1)k(mk)(m−k)n
斯特林反演
留坑待填