错排问题

来自testwiki
跳转到导航 跳转到搜索

错排问题组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排n个元素的错排数记为Dn!n。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题

最早研究错排问题的是尼古拉·伯努利欧拉,因此历史上也称为伯努利-欧拉的装错信封的问题。这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里,有多少种全部装错信封的情况?又比如四人各写一张贺年卡互相赠送,有多少种赠送方法?自己写的贺年卡不能送给自己,所以也是典型的错排问题。

定義

Dn{1,2,,n}上沒有不動點的排列(即ϕ:{1,2,,n}{1,2,,n}, ϕ(i)i, 1in)的個數,Dn的值如下:(由n=1起)

0, 1, 2, 9, 44, 265, 1854, 14833, 133496, 1334961, 14684570, 176214841, 2290792932, ... [1]

不難發現,這個數列有一個規律

Dn=nDn1+(1)n

例如有n封收件人不同的信,隨機放入n個寫了收件人地址的信封中寄出,求沒有一個收件人收到他所應接收的信的機率。當n=4,設四封信為ABCD,則在4!=24個排列之中,只有9個是錯排,即!4=9

BADC, BCDA, BDAC, CADB, CDAB, CDBA, DABC, DCAB, DCBA

所以其機率為

924=37.5%

历史

18世纪的法国数学家尼古拉·伯努利(1687-1759年)是最早考虑这个问题的人。之后欧拉也开始对这个问题感兴趣,并称之为“组合数学中的一个奇妙问题”(拉丁文:Template:Lang),并独立解决了这个问题[2]

研究错排问题的方法

枚举法

对于情况较少的排列,可以使用枚举法[3]

  • 当n=1时,全排列只有一种,不是错排,D1 = 0。
  • 当n=2时,全排列有两种,即1、2和2、1,后者是错排,D2 = 1。
  • 当n=3时,全排列有六种,即1、2、3;1、3、2;2、1、3;2、3、1;3、1、2;3、2、1,其中只有有3、1、2和2、3、1是错排,D3=2。用同样的方法可以知道D4=9。
  • 最小的几个错排数是:D1 = 0,D2 = 1,D3=2,D4 = 9,D5 = 44,D6 = 265,D7 = 1854。[4]

递推数列法

对于排列数较多的情况,难以采用枚举法。这时可以用递归思想推导错排数的遞迴關係式

显然D1=0,D2=1。当n≥3时,不妨设n排在了第k位,其中k≠n,也就是1≤k≤n-1。那么我们现在考虑k的情况。

  • 当k排在第n位时,除了n和k以外还有n-2个数,其错排数为Dn-2
  • 当k不排在第n位时,那就會剩下n-1個空位(原本n個位置扣掉第k位)和n-1個數字,在排除了排在第k位的n後,由於k不在第n位,等價於把第n個空位改名為k的錯排問題。其错排数为Dn-1

所以当n排在第k位时共有Dn-2+Dn-1种错排方法,又k有从1到n-1共n-1种取法,我们可以得到:

Dn=(n-1)(Dn-1+Dn-2) [2]

在上面我们得到

Dn=(n-1)(Dn-1+Dn-2)

从这个公式中我们可以推出Dn的通项公式,方法如下:

为书写方便,记Dn = n!Mn,则M1 = 0, M2 = 12

当n大于等于3时,由

Dn = (n-1)(Dn-1 + Dn-2),

n!Mn=(n1)(n1)!Mn1+(n1)(n2)!Mn2=n!Mn1(n1)!Mn1+(n1)!Mn2

所以,nMnnMn1=Mn1+Mn2

于是有 MnMn1=1n(Mn1Mn2)=...=(1n)(1n1)...(13)(M2M1)=(1)n1n!.

所以

MnMn1=(1)n1n!Mn1Mn2=(1)(n1)1(n1)!=M2M1=(1)212!

将上面式子分边累加,得

Mn=(1)212!+(1)313!...+(1)n1n!.

因此,我们得到错排公式

Dn=n!Mn=n!(12!13!+...+(1)n1n!).

多项式模拟

x1,x2,...,xn错排,x1需排在x2,x3,...,xnx2需排在x1,x3,...,xn如此类推。

s=r=1nxr,错排结果为r=1n(sxr)r=1nxr的系数

ar=(1)rx1x2...xr基本对称多项式

r=1n(sxr)=r=0narsnr=r=2narsnr

ar选出x1,x2,...,xr,然后从snr选出xr+1,xr+2,...,xn,组成r=1nxr

ar选出r个x有Crn种可能,从s选出其余的n-r个x有

(nr)!1!1!...1!=(nr)!

种可能

r=2n(1)rCrn(nr)!=n!r=2n(1)rr!

简化公式

错位排列数的公式可以简化为:Dn=n!e+0.5,

其中的 n高斯取整函数(小于等于 n 的最大整数)[5]

这个简化公式可以由之前的错排公式推导出来。事实上,考虑指数函数在 0 处的泰勒展开

e1=1+(1)11!+(1)22!++(1)n1n!+ec(n+1)!(c1)n=12!13!++(1)n1n!+Rn=Dnn!+Rn

所以,n!eDn=n!Rn。其中 Rn 是泰勒展开的餘项,c 是介于 0 和 1 之间的某个实数。Rn绝对值上限为

|Rn|e0(n+1)!=1(n+1)!
|n!eDn|n!(n+1)!=1(n+1)

当 n≥2 时,1(n+1) 严格小于 0.5,所以 Dn=n!(12!13!+...+(1)n1n!) 是最接近 n!e 的整数,可以写成

Dn=n!e+0.5.

参考资料

Template:Reflist