组合数学——错序排列
问题:有5个编号的箱子和5个编号的苹果,现在要把这5个苹果放进5个箱子里,每个箱子放一个,问有多少种放法使得每个箱子的编号和其内部苹果编号不相同。形式化地讲,设集合 P P P 表示每个箱子 i i i 内苹果编号是 P i P_i Pi,问有多少种 P P P满足 ∀ i , P i ≠ i \forall i,P_i\neq i ∀i,Pi=i 。
方法一:递推
为方便书写,规定“放错”即 P i ≠ i P_i\neq i Pi=i ,“放对“反之。
不难想到设 F n F_n Fn 表示 n n n 个箱子按题目要求放 n n n 个苹果的方案数。
考虑新放一个苹果,放在哪里不好说,所以姑且将它放在新箱子里,然后与前面一个交换。
那么可以从两种情况转移:
-
前 n − 1 n-1 n−1 个都“放错“。那么第 n n n 个苹果和前 n − 1 n-1 n−1 个苹果任意一个交换都是合法的,即有 n − 1 n-1 n−1 种选择,所以可以从 F n − 1 × ( n − 1 ) F_{n-1}\times(n-1) Fn−1×(n−1) 转移。
-
前 n − 1 n-1 n−1 个至少有一个“放对“。但是会发现如果有超过一个“放对“,需要至少两次的交换,那么就会重复计数。
所以这种情况等价于前 n − 1 n-1 n−1 个仅有一个“放对“。
我们的新苹果必须要跟那个“放对”的苹果交换,也就是只有一种可能。问题在于这种情况下的长度为 n − 1 n-1 n−1 的序列有多少种。
问题变得朴素许多。先将 n − 2 n-2 n−2 个苹果错序排好,即有 F n − 2 F_{n-2} Fn−2 种序列。再加入一个“放对”的苹果,有 n − 1 n-1 n−1 个空位,故有 n − 1 n-1 n−1 种放法,所以此情况可以从 F n − 2 × ( n − 1 ) F_{n-2}\times (n-1) Fn−2×(n−1) 转移。
综上,得出递推式 F n = F n − 1 × ( n − 1 ) + F n − 2 × ( n − 1 ) = ( n − 1 ) ( F n − 1 + F n − 2 ) F_n=F_{n-1}\times(n-1)+F_{n-2}\times(n-1)=(n-1)(F_{n-1}+F_{n-2}) Fn=Fn−1×(n−1)+Fn−2×(n−1)=(n−1)(Fn−1+Fn−2) 。
方法二:容斥原理
未知