错位排列相关

一.错排问题与错排数.

错排问题:对于一个排列 p i p_i pi,有多少种重新排列的方法使得重排后的序列 p i ′ p'_i pi满足对于任意位置 i i i都有 p i ≠ p i ′ p_i\neq p'_i pi=pi.

容易发现这个问题中的方案数只与排列的长度有关,与具体在第 i i i个位置的 p i p_i pi无关,所以我们有了错排数这样一个概念.

错排数:对于一个长度为 n n n的排列的错排数量,记为 D n D_n Dn.

关于错排数有一个小性质.

性质 ∑ i = 0 n ( n i ) D i = n ! \sum_{i=0}^{n}\binom{n}{i}D_i=n! i=0n(in)Di=n!.

证明:
考虑对于每一个 i i i ( n n − i ) D i \binom{n}{n-i}D_i (nin)Di表示 n n n个数中选 i i i个数错排且 n − i n-i ni个数不错排的方案数,显然求和后就是总排列数 n ! n! n!,于是就有:
n ! = ∑ i = 0 n ( n n − i ) D i = ∑ i = 0 n ( n i ) D i n!=\sum_{i=0}^{n}\binom{n}{n-i}D_i=\sum_{i=0}^{n}\binom{n}{i}D_i n!=i=0n(nin)Di=i=0n(in)Di

证毕.


二.错排的递推公式.

求错排数的递推公式,可以通过分两类讨论:
1.已经有了前 n − 1 n-1 n1个数的错排数 D n − 1 D_{n-1} Dn1,现在要加入第 n n n个数,可以把第 n n n个数先放到第 n n n个位置,然后随便与前面的一个数交换位置,方案数为 ( n − 1 ) D n − 1 (n-1)D_{n-1} (n1)Dn1.
2.已经有了前 n − 1 n-1 n1个数,只有一个位置 k k k上是 k k k,其它都是错排,那么加入的第 n n n个数就必须与第 k k k个位置交换,方案数为 ( n − 1 ) D n − 2 (n-1)D_{n-2} (n1)Dn2.

于是我们可以得到错排的递推公式1
D n = ( n − 1 ) ( D n − 1 + D n − 2 ) D_n=(n-1)(D_{n-1}+D_{n-2}) Dn=(n1)(Dn1+Dn2)

在OI中用的最多的就是这个公式.

不过考虑一下是不是可以求个更简单的递推式?考虑转化一下式子:
D n − n D 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 ] ⋯ = ( − 1 ) n − 2 [ D 2 − 2 D 1 ] = ( − 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} DnnDn1=[Dn1(n1)Dn2]=(1)2[Dn2(n2)Dn3]=(1)3[Dn3(n3)Dn4]=(1)n2[D22D1]=(1)n[120]=(1)n

然后再重新转化回来得到错排的递推公式2
D n = n D n − 1 + ( − 1 ) n D_n=nD_{n-1}+(-1)^n Dn=nDn1+(1)n



三.错排的容斥求解.

考虑错排数如何容斥?考虑枚举那些位置不动,直接大力容斥可以列出式子:
D n = ∑ T ∈ [ n ] ( − 1 ) ∣ T ∣ ( n − ∣ T ∣ ) ! D_n=\sum_{T\in [n]}(-1)^{|T|}(n-|T|)!\\ Dn=T[n](1)T(nT)!

我们发现每一个集合 T T T的贡献只与它的大小有关,所以可以化简式子:
D n = ∑ i = 0 n ( − 1 ) i ( n i ) ( n − i ) ! = ∑ i = 0 n ( − 1 ) i ∗ n ! i ! ( n − i ) ! ∗ ( n − i ) ! = ∑ i = 0 n ( − 1 ) i ∗ n ! i ! = n ! ∑ i = 0 n ( − 1 ) i i ! 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=0n(1)i(in)(ni)!=i=0n(1)ii!(ni)!n!(ni)!=i=0n(1)ii!n!=n!i=0ni!(1)i

于是我们也可以得到错排的通项公式
D n = n ! ∑ i = 0 n ( − 1 ) i i ! D_n=n!\sum_{i=0}^{n}\frac{(-1)^{i}}{i!} Dn=n!i=0ni!(1)i

其实不直接考虑容斥,根据一种提到的性质进行二项式反演也可以推:
n ! = ∑ i = 0 n ( n i ) D i D n = ∑ i = 0 n ( − 1 ) n − i ( n i ) i ! D n = n ! ∑ i = 0 n ( − 1 ) i i ! 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=0n(in)DiDn=i=0n(1)ni(in)i!Dn=n!i=0ni!(1)i

不过由于二项式反演的本质也是一种容斥,所以就没有单独列一块了.


四.错排与自然底数的关系.

我们看一下错排数的通项公式:
D n = n ! ∑ i = 0 n ( − 1 ) i i ! D_n=n!\sum_{i=0}^{n}\frac{(-1)^i}{i!} Dn=n!i=0ni!(1)i

再来看一下 e n e^{n} en的泰勒展开:
e n = ∑ i = 0 + ∞ n i i ! e^{n}=\sum_{i=0}^{+\infty}\frac{n^i}{i!} en=i=0+i!ni

我们代入一个 n = − 1 n=-1 n=1进去:
e − 1 = ∑ i = 0 + ∞ ( − 1 ) i i ! e^{-1}=\sum_{i=0}^{+\infty}\frac{(-1)^i}{i!} e1=i=0+i!(1)i

有没有发现这两个式子非常像啊?

我们可以写出 D n D_n Dn n n n接近无穷大时的式子:
lim ⁡ n → + ∞ D n = n ! ∑ i = 0 n ( − 1 ) i i ! lim ⁡ n → + ∞ D n n ! = ∑ i = 0 n ( − 1 ) i i ! lim ⁡ n → + ∞ D n n ! = e − 1 lim ⁡ n → + ∞ n ! D n = 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=0ni!(1)in+limn!Dn=i=0ni!(1)in+limn!Dn=e1n+limDnn!=e

也就是说 n n n越大时,一个长度为 n n n的排列方案数与长度为 n n n的错排方案数的比值越接近 e e e.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值