错位排列
错位排列
定义
错位排列(derangement)是没有任何元素出现在其有序位置的排列。即,对于 1 ∼𝑛
的排列 𝑃
,如果满足 𝑃𝑖 ≠𝑖
,则称 𝑃
是 𝑛
的错位排列。
例如,三元错位排列有 {2,3,1}
和 {3,1,2}
。四元错位排列有 {2,1,4,3}
、{2,3,4,1}
、{2,4,1,3}
、{3,1,4,2}
、{3,4,1,2}
、{3,4,2,1}
、{4,1,2,3}
、{4,3,1,2}
和 {4,3,2,1}
。错位排列是没有不动点的排列,即没有长度为 1 的循环。
容斥原理的计算
全集 𝑈
即为 1 ∼𝑛
的排列,|𝑈| =𝑛!
;属性就是 𝑃𝑖 ≠𝑖
. 套用补集的公式,问题变成求 ∣⋃𝑛𝑖=1――𝑆𝑖∣
.
可以知道,――𝑆𝑖
的含义是满足 𝑃𝑖 =𝑖
的排列的数量。用容斥原理把问题式子展开,需要对若干个特定的集合的交集求大小,即:
∣𝑘⋂𝑖=1𝑆𝑎𝑖∣
其中省略了 𝑎𝑖 <𝑎𝑖+1
的条件以方便表示。上述 𝑘
个集合的交集表示有 𝑘
个变量满足 𝑃𝑎𝑖 =𝑎𝑖
的排列数,而剩下 𝑛 −𝑘
个数的位置任意,因此排列数:
∣𝑘⋂𝑖=1𝑆𝑎𝑖∣=(𝑛−𝑘)!
那么选择 𝑘
个元素的方案数为 (𝑛𝑘)
,因此有:
∣𝑛⋃𝑖=1――𝑆𝑖∣=𝑛∑𝑘=1(−1)𝑘−1∑𝑎1,⋯,𝑘∣𝑘⋂𝑖=1𝑆𝑎𝑖∣=𝑛∑𝑘=1(−1)𝑘−1(𝑛𝑘)(𝑛−𝑘)!=𝑛∑𝑘=1(−1)𝑘−1𝑛!𝑘!=𝑛!𝑛∑𝑘=1(−1)𝑘−1𝑘!
因此 𝑛
的错位排列数为:
𝐷𝑛=𝑛!−𝑛!𝑛∑𝑘=1(−1)𝑘−1𝑘!=𝑛!𝑛∑𝑘=0(−1)𝑘𝑘!
错位排列数列的前几项为 0,1,2,9,44,265
(OEIS A000166)。
递推的计算
把错位排列问题具体化,考虑这样一个问题:
𝑛
封不同的信,编号分别是 1,2,3,4,5
,现在要把这五封信放在编号 1,2,3,4,5
的信封中,要求信封的编号与信的编号不一样。问有多少种不同的放置方法?
假设考虑到第 𝑛
个信封,初始时暂时把第 𝑛
封信放在第 𝑛
个信封中,然后考虑两种情况的递推:
- 前面 𝑛 −1
个信封全部装错; - 前面 𝑛 −1
个信封有一个没有装错其余全部装错。
对于第一种情况,前面 𝑛 −1
个信封全部装错:因为前面 𝑛 −1
个已经全部装错了,所以第 𝑛
封只需要与前面任一一个位置交换即可,总共有 𝐷𝑛−1 ×(𝑛 −1)
种情况。
对于第二种情况,前面 𝑛 −1
个信封有一个没有装错其余全部装错:考虑这种情况的目的在于,若 𝑛 −1
个信封中如果有一个没装错,那么把那个没装错的与 𝑛
交换,即可得到一个全错位排列情况。
其他情况,不可能通过一次操作来把它变成一个长度为 𝑛
的错排。
于是可得,错位排列数满足递推关系:
𝐷𝑛=(𝑛−1)(𝐷𝑛−1+𝐷𝑛−2)
这里也给出另一个递推关系:
𝐷𝑛=𝑛𝐷𝑛−1+(−1)𝑛
其他关系
错位排列数有一个简单的取整表达式,增长速度与阶乘仅相差常数:
𝐷𝑛={⌈𝑛!e⌉,if 𝑛 is even,⌊𝑛!e⌋,if 𝑛 is odd.
随着元素数量的增加,形成错位排列的概率 P 接近:
𝑃=lim𝑛→∞𝐷𝑛𝑛!=1e
本页面最近更新:2024/8/31 23:47:43,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Tiphereth-A, Great-designer, Enter-tainer, untitledunrevised, xzdeyg
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用