一.错排问题与错排数.
错排问题:对于一个排列pip_ipi,有多少种重新排列的方法使得重排后的序列pi′p'_ipi′满足对于任意位置iii都有pi≠pi′p_i\neq p'_ipi=pi′.
容易发现这个问题中的方案数只与排列的长度有关,与具体在第iii个位置的pip_ipi无关,所以我们有了错排数这样一个概念.
错排数:对于一个长度为nnn的排列的错排数量,记为DnD_nDn.
关于错排数有一个小性质.
性质:∑i=0n(ni)Di=n!\sum_{i=0}^{n}\binom{n}{i}D_i=n!∑i=0n(in)Di=n!.
证明:
考虑对于每一个iii,(nn−i)Di\binom{n}{n-i}D_i(n−in)Di表示nnn个数中选iii个数错排且n−in-in−i个数不错排的方案数,显然求和后就是总排列数n!n!n!,于是就有:
n!=∑i=0n(nn−i)Di=∑i=0n(ni)Di
n!=\sum_{i=0}^{n}\binom{n}{n-i}D_i=\sum_{i=0}^{n}\binom{n}{i}D_i
n!=i=0∑n(n−in)Di=i=0∑n(in)Di
证毕.
二.错排的递推公式.
求错排数的递推公式,可以通过分两类讨论:
1.已经有了前n−1n-1n−1个数的错排数Dn−1D_{n-1}Dn−1,现在要加入第nnn个数,可以把第nnn个数先放到第nnn个位置,然后随便与前面的一个数交换位置,方案数为(n−1)Dn−1(n-1)D_{n-1}(n−1)Dn−1.
2.已经有了前n−1n-1n−1个数,只有一个位置kkk上是kkk,其它都是错排,那么加入的第nnn个数就必须与第kkk个位置交换,方案数为(n−1)Dn−2(n-1)D_{n-2}(n−1)Dn−2.
于是我们可以得到错排的递推公式1:
Dn=(n−1)(Dn−1+Dn−2)
D_n=(n-1)(D_{n-1}+D_{n-2})
Dn=(n−1)(Dn−1+Dn−2)
在OI中用的最多的就是这个公式.
不过考虑一下是不是可以求个更简单的递推式?考虑转化一下式子:
Dn−nDn−1=−[Dn−1−(n−1)Dn−2]=(−1)2[Dn−2−(n−2)Dn−3]=(−1)3[Dn−3−(n−3)Dn−4]⋯=(−1)n−2[D2−2D1]=(−1)n[1−2∗0]=(−1)n
D_n-nD_{n-1}=-[D_{n-1}-(n-1)D_{n-2}]\\
=(-1)^{2}[D_{n-2}-(n-2)D_{n-3}]\\
=(-1)^{3}[D_{n-3}-(n-3)D_{n-4}]\\
\cdots\\
=(-1)^{n-2}[D_2-2D_1]\\
=(-1)^{n}[1-2*0]\\
=(-1)^{n}
Dn−nDn−1=−[Dn−1−(n−1)Dn−2]=(−1)2[Dn−2−(n−2)Dn−3]=(−1)3[Dn−3−(n−3)Dn−4]⋯=(−1)n−2[D2−2D1]=(−1)n[1−2∗0]=(−1)n
然后再重新转化回来得到错排的递推公式2:
Dn=nDn−1+(−1)n
D_n=nD_{n-1}+(-1)^n
Dn=nDn−1+(−1)n
三.错排的容斥求解.
考虑错排数如何容斥?考虑枚举那些位置不动,直接大力容斥可以列出式子:
Dn=∑T∈[n](−1)∣T∣(n−∣T∣)!
D_n=\sum_{T\in [n]}(-1)^{|T|}(n-|T|)!\\
Dn=T∈[n]∑(−1)∣T∣(n−∣T∣)!
我们发现每一个集合TTT的贡献只与它的大小有关,所以可以化简式子:
Dn=∑i=0n(−1)i(ni)(n−i)!=∑i=0n(−1)i∗n!i!(n−i)!∗(n−i)!=∑i=0n(−1)i∗n!i!=n!∑i=0n(−1)ii!
D_n=\sum_{i=0}^{n}(-1)^{i}\binom{n}{i}(n-i)!\\
=\sum_{i=0}^{n}(-1)^{i}*\frac{n!}{i!(n-i)!}*(n-i)!\\
=\sum_{i=0}^{n}(-1)^{i}*\frac{n!}{i!}\\
=n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}
Dn=i=0∑n(−1)i(in)(n−i)!=i=0∑n(−1)i∗i!(n−i)!n!∗(n−i)!=i=0∑n(−1)i∗i!n!=n!i=0∑ni!(−1)i
于是我们也可以得到错排的通项公式:
Dn=n!∑i=0n(−1)ii!
D_n=n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}
Dn=n!i=0∑ni!(−1)i
其实不直接考虑容斥,根据一种提到的性质进行二项式反演也可以推:
n!=∑i=0n(ni)DiDn=∑i=0n(−1)n−i(ni)i!Dn=n!∑i=0n(−1)ii!
n!=\sum_{i=0}^{n}\binom{n}{i}D_i\\
D_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}i!\\
D_n=n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}
n!=i=0∑n(in)DiDn=i=0∑n(−1)n−i(in)i!Dn=n!i=0∑ni!(−1)i
不过由于二项式反演的本质也是一种容斥,所以就没有单独列一块了.
四.错排与自然底数的关系.
我们看一下错排数的通项公式:
Dn=n!∑i=0n(−1)ii!
D_n=n!\sum_{i=0}^{n}\frac{(-1)^i}{i!}
Dn=n!i=0∑ni!(−1)i
再来看一下ene^{n}en的泰勒展开:
en=∑i=0+∞nii!
e^{n}=\sum_{i=0}^{+\infty}\frac{n^i}{i!}
en=i=0∑+∞i!ni
我们代入一个n=−1n=-1n=−1进去:
e−1=∑i=0+∞(−1)ii!
e^{-1}=\sum_{i=0}^{+\infty}\frac{(-1)^i}{i!}
e−1=i=0∑+∞i!(−1)i
有没有发现这两个式子非常像啊?
我们可以写出DnD_nDn在nnn接近无穷大时的式子:
limn→+∞Dn=n!∑i=0n(−1)ii!limn→+∞Dnn!=∑i=0n(−1)ii!limn→+∞Dnn!=e−1limn→+∞n!Dn=e
\lim_{n\rightarrow +\infty} D_n=n!\sum_{i=0}^{n}\frac{(-1)^i}{i!}\\
\lim_{n\rightarrow +\infty} \frac{D_n}{n!}=\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}\\
\lim_{n\rightarrow +\infty} \frac{D_n}{n!}=e^{-1}\\
\lim_{n\rightarrow +\infty} \frac{n!}{D_n}=e\\
n→+∞limDn=n!i=0∑ni!(−1)in→+∞limn!Dn=i=0∑ni!(−1)in→+∞limn!Dn=e−1n→+∞limDnn!=e
也就是说nnn越大时,一个长度为nnn的排列方案数与长度为nnn的错排方案数的比值越接近eee.