错位排列

错位排列

定义

错位排列(derangement)是没有任何元素出现在其有序位置的排列.即,对于 1∼n1\sim n 的排列 PP,如果满足 Pi≠iP_i\neq i,则称 PP 是 nn 的错位排列.

例如,三元错位排列有 {2,3,1}\{2,3,1\} 和 {3,1,2}\{3,1,2\}.四元错位排列有 {2,1,4,3}\{2,1,4,3\}、{2,3,4,1}\{2,3,4,1\}、{2,4,1,3}\{2,4,1,3\}、{3,1,4,2}\{3,1,4,2\}、{3,4,1,2}\{3,4,1,2\}、{3,4,2,1}\{3,4,2,1\}、{4,1,2,3}\{4,1,2,3\}、{4,3,1,2}\{4,3,1,2\} 和 {4,3,2,1}\{4,3,2,1\}.错位排列是没有不动点的排列,即没有长度为 1 的循环.

容斥原理的计算

全集 UU 即为 1∼n1\sim n 的排列,∣U∣=n!|U|=n!;令 SiS_i 是其中满足 Pi≠iP_i\neq i 的排列.运用补集和 容斥原理 的知识,问题变成求:

∣⋂i=1nSi∣=∣U∣−∣⋃i=1nSi‾∣=n!−∑k=1n(−1)k−1∑ai<ai+1∣⋂i=1kSai‾∣\begin{aligned} \left|\bigcap_{i=1}^n S_i\right| &=|U|-\left|\bigcup_{i=1}^n\overline{S_i}\right|\\ &=n!-\sum_{k=1}^n(-1)^{k-1}\sum_{a_i<a_{i+1}}\left|\bigcap_{i=1}^{k}\overline{S_{a_i}}\right| \end{aligned}

其中求和的含义是 1,2,⋯ ,n1, 2, \cdots, n 中取 a1,a2,⋯ ,aka_1, a_2, \cdots, a_k 且满足 ai<ai+1a_i<a_{i+1}.于是

∣⋂i=1kSai‾∣\left|\bigcap_{i=1}^{k}\overline{S_{a_i}}\right|

表示有 kk 个数 a1,a2,⋯ ,aka_1,a_2,\cdots,a_k 满足 Pai=aiP_{a_i}=a_i,而剩下 n−kn-k 个数的位置任意的排列数,因此:

∣⋂i=1kSai‾∣=(n−k)!\left|\bigcap_{i=1}^{k}\overline{S_{a_i}}\right|=(n-k)!

这 kk 个数的选择情况共 (nk)\dbinom{n}{k} 种,对其求和有:

∑k=1n(−1)k−1∑ai<ai+1∣⋂i=1kSai‾∣=∑k=1n(−1)k−1(nk)(n−k)!=∑k=1n(−1)k−1n!k!=n!∑k=1n(−1)k−1k!\begin{aligned} &\sum_{k=1}^n(-1)^{k-1}\sum_{a_i<a_{i+1}}\left|\bigcap_{i=1}^{k}\overline{S_{a_i}}\right|\\ =&\sum_{k=1}^n(-1)^{k-1}\dbinom{n}{k}(n-k)!\\ =&\sum_{k=1}^n(-1)^{k-1}\frac{n!}{k!}\\ =&n!\sum_{k=1}^n\frac{(-1)^{k-1} }{k!} \end{aligned}

因此 nn 个元素的错位排列数为:

Dn=n!−n!∑k=1n(−1)k−1k!=n!∑k=0n(−1)kk!D_n=n!-n!\sum_{k=1}^n\frac{(-1)^{k-1} }{k!}=n!\sum_{k=0}^n\frac{(-1)^k}{k!}

错位排列数列的前几项为 0,1,2,9,44,2650,1,2,9,44,265(OEIS A000166).

递推的计算

把错位排列问题具体化,考虑这样一个问题:

nn 封不同的信,编号分别是 1,2,3,4,51,2,3,4,5,现在要把这五封信放在编号 1,2,3,4,51,2,3,4,5 的信封中,要求信封的编号与信的编号不一样.问有多少种不同的放置方法?

假设考虑到第 nn 个信封,初始时暂时把第 nn 封信放在第 nn 个信封中,然后考虑两种情况的递推:

  • 前面 n−1n-1 个信封全部装错;
  • 前面 n−1n-1 个信封有一个没有装错其余全部装错.

对于第一种情况,前面 n−1n-1 个信封全部装错:因为前面 n−1n-1 个已经全部装错了,所以第 nn 封只需要与前面任一一个位置交换即可,总共有 Dn−1×(n−1)D_{n-1}\times (n-1) 种情况.

对于第二种情况,前面 n−1n-1 个信封有一个没有装错其余全部装错:考虑这种情况的目的在于,若 n−1n-1 个信封中如果有一个没装错,那么把那个没装错的与 nn 交换,即可得到一个全错位排列情况.

其他情况,不可能通过一次操作来把它变成一个长度为 nn 的错排.

于是可得,错位排列数满足递推关系:

Dn=(n−1)(Dn−1+Dn−2)D_n=(n-1)(D_{n-1}+D_{n-2})

这里也给出另一个递推关系:

Dn=nDn−1+(−1)nD_n=nD_{n-1}+{(-1)}^n

其他关系

错位排列数有一个简单的取整表达式,增长速度与阶乘仅相差常数:

Dn=⌊n!e+12⌋D_n=\left\lfloor\frac{n!}{\mathrm{e}} + \frac{1}{2}\right\rfloor

随着元素数量的增加,形成错位排列的概率 P 接近:

P=lim⁡n→∞Dnn!=1eP=\lim_{n\to\infty}\frac{D_n}{n!}=\frac{1}{\mathrm{e}}

本文内容来自 OI Wiki《错位排列》;作者与修订历史见原文。AIOJ 对排版、站内链接和资源路径做了格式适配。

内容依 CC BY-SA 4.0 与 SATA 许可共享;附加条款以原文声明为准。感谢 OI Wiki 作者与贡献者;请按 SATA 约定前往 OI Wiki 仓库 Star 支持。