二项式反演与错排问题

二项式反演与错排问题

常见简单组合恒等式:

  1. \(C_n^m=C_n^{n-m}\)

  2. \(C_n^m=C_n^{m-1}+C_{n-1}^{m-1}\)

  3. \(\sum_{i=0}^{n}C_n^i=2^i\)

  4. \(\sum_{i=0}^{n}(-1)^i*C_n^i=[n=0]\)

3.4.证明:由二项式定理易证。

\(x=1,y=1\),可得3式

\(x=1,y=-1\), 可得4式

二项式反演:

假设存在两个函数f,g。满足:

\[f_n=\sum_{i=0}^{n}C_n^i*g_i \]

那么考虑如何反求得\(g_n\)关于\(f_n\)的等式。

\[g_n=\sum_{i=0}^{n}[n-i=0]*C_n^i*g_i\\ g_n=\sum_{i=0}^{n}\sum_{j=0}^{n-i}(-1)^j*C_{n-i}^j*C_n^i*g_i\\ g_n=\sum_{i=0}^{n}\sum_{j=0}^{n-i}(-1)^j*C_{n}^j*C_{n-j}^i*g_i\\ g_n=\sum_{j=0}^{n}(-1)^j*C_n^j\sum_{i=0}^{n-j}C_{n-j}^i*g_i\\ g_n=\sum_{i=0}^{n}(-1)^i*C_n^i*f_{n-i}=\sum_{i=0}^{n}(-1)^{n-i}*C_n^i*f_{i} \]

所以得到二项式反演的结论:

\[f_n=\sum_{i=0}^{n}C_n^i*g_i\\ g_n=\sum_{i=0}^{n}(-1)^{n-i}*C_n^i*f_{i}\\ \]

形式上真的很优美!

下面就用二项式反演来解决一个经典的问题!

错排问题

问题描述:

\(n\)个人编号为\(1, ..., n\),问这\(n\)个人站成一排全都站错位置的方案数。

上述站错的定义是:第\(i\)个人没有站在位置\(i\)上。

方法1: 递推

\(f_n\)表示答案,假设现在考虑到了前\(i\)个人的方案,即\(f_i\)

考虑第\(i\)个人站位情况:

显然第\(i\)个人的不能站在位置\(i\),假设他站到了位置\(k\),显然\(k\in[1,i-1]\),那么继续考虑\(k\)的站位。

​ ①、\(k\)站到了位置i,那么剩下的\(i-2\)个人仍然构成一个原问题,方案数为\(f_{i-2}\)

​ ②、\(k\)没站到位置i,也即\(k\)不能站在位置\(i\),那么剩下的\(i-1\)个人仍然构成一个原问题,方案数为\(f_i-1\)

所以可以得到\(f\)的递推关系:

\[f_1=0\ , \ f_2=1\\f_i=(i-1)*(f_{i-1}+f_{i-2})\ \ i≥3 \]

方法2:二项式反演

\(f_n\)表示\(n\)个人随便站位的方案数,\(g_n\)表示\(n\)个人的都站错的方案数。

容易得到:

\[f_n=n!\\ f_n=\sum_{i=0}^nC_n^i*g_i \]

直接二项式反演可以得到:

\[g_n=\sum_{i=0}^{n}(-1)^{n-i}*C_n^i*f_{i}\\ \]

同样可以直接线性的递推出答案。

posted @ 2019-09-21 14:16  薄荷凉了夏  阅读(409)  评论(0编辑  收藏  举报