1. 问题引入
对于一个排列,其中每个数字都不在它对应的位置上。这样的排列叫做错位排列。
定义长度为 n n n的一个排列
P = A 1 A 2 A 3 . . . A n ∀ A i ∈ { 1 , 2 , 3... n } ∀ i ≠ j , 1 ≤ i , j ≤ n , A i ≠ A j P=A_1A_2A_3...A_n\\ \forall A_i \in \{1,2,3...n\} \\ \forall i \ne j,1 \le i,j \le n,A_i \ne A_j P=A1A2A3...An∀Ai∈{1,2,3...n}∀i=j,1≤i,j≤n,Ai=Aj
而错排就是在排列基础上,对于任意位置 j , A j ≠ j j,A_j \ne j j,Aj=j
2. 容斥原理
对于错排问题,考虑性质 q : A j = j , j ∈ { 1 , 2 , 3... , n } q: A_j = j, j \in \{1,2,3...,n\} q:Aj=j,j∈{1,2,3...,n}
错排数则为
D
n
=
n
!
−
∑
j
=
1
n
(
−
1
)
j
−
1
∣
q
j
∣
D_n= n!- \sum_{j=1}^{n}(-1)^{j-1}\left\vert q_j\right\vert
Dn=n!−j=1∑n(−1)j−1∣qj∣
对于指定
k
k
k个位置排列正确 的排列总数为
(
n
k
)
(
n
−
k
)
!
=
n
∗
(
n
−
1
)
∗
(
n
−
2
)
∗
.
.
.
∗
(
n
−
k
+
1
)
k
!
∗
(
n
−
k
)
∗
(
n
−
k
−
1
)
∗
.
.
.
∗
1
=
n
!
k
!
{n \choose k}(n-k)!=\\ \frac{n*(n-1)*(n-2)*...*(n-k+1)}{k!}*(n-k)*(n-k-1)*...*1=\frac{n!}{k!}
(kn)(n−k)!=k!n∗(n−1)∗(n−2)∗...∗(n−k+1)∗(n−k)∗(n−k−1)∗...∗1=k!n!
对于至少有一个位置正确的排列数为
(
−
1
)
k
n
!
k
!
(-1)^{k} \frac{n!}{k!}
(−1)kk!n!
错排公式
D
n
=
n
!
−
(
−
1
)
k
n
!
k
!
(
k
>
0
)
=
∑
k
=
0
n
(
−
1
)
k
n
!
k
!
=
n
!
∑
k
=
0
n
(
−
1
)
k
1
k
!
\begin{align} D_n&=n!-(-1)^{k}\frac{n!}{k!}(k \gt 0)\nonumber\\&= \sum_{k=0}^{n}(-1)^{k}\frac{n!}{k!} \nonumber \\ &=n!\sum_{k=0}^{n}(-1)^{k}\frac{1}{k!} \nonumber \end{align}
Dn=n!−(−1)kk!n!(k>0)=k=0∑n(−1)kk!n!=n!k=0∑n(−1)kk!1
3. 递推
将第 n n n暂时放入位置 n n n
考虑情况
- 前 n − 1 n-1 n−1个位置错排
- 前 n − 1 n-1 n−1个位置只有一个位置正确
对于第一种情况,和任意前
n
−
1
n-1
n−1个位置交换即可:
(
n
−
1
)
D
n
−
1
(n-1)D_{n-1}
(n−1)Dn−1。
对于第二种情况,只需要和那个正确的位置互换即可。而那个正确的位置可能处于
1
到
n
−
1
1到 n-1
1到n−1任意一个位置:
(
n
−
1
)
D
n
−
2
(n-1)D_{n-2}
(n−1)Dn−2。
因此错排递推式
D
n
=
(
n
−
1
)
(
D
n
−
1
+
D
n
−
2
)
D_n=(n-1)(D_{n-1} + D_{n-2})
Dn=(n−1)(Dn−1+Dn−2)