这个问题可以用组合数学的很多思想去理解,下面对其不同的解法进行总结以增加自己对于组合数学的理解。
设个数, , … , 错排的数目为,任取其中一数, 数分别与其他的 − 个数之一互换,其余n-2个数进 行错排,共得( − )−个错排。 另一部分位数以外的n-1个数进行错排,然后与其中 每个数互换得( − )−个错排。
综合以上分析结果得递推关系: = ( − )(− + −), = , = 可以推得: =
可以看到这个递推关系还是比较难想出来的,并且这还是一个非常系数地推关系,这对我们推母函数更加加大了困难。
下面提供一种解法:
= ( − ) ( − + − ) − − = − [ − − − − ] = ( − ) 2 [ − − − − 3 ] … … … = ( − ) − [ − ] 考 虑 初 始 值 , 可 得 : − − = ( − ) n 令 ( ) = + + ! + ! 3 + ⋯ : = + ( − ) ! : = + ( − ) ! : = + ( − ) … … … 相 加 可 得 : ( ) − ( ) = − 解 得 ( ) = − − 展 开 得 ( ) = ( − + ! − ! + ⋯ ) ( + + + + ⋯ ) 对 比 得 ( ) n 次 方 系 数 为 = ( − + ! − ⋯ ± ! ) ! _ = ( − )(_{−} + _{−}) \\_ − _{−} = −[_{−} − − _{−}]\\ = (−)^2 [_{−} − − _{−3}] \\… … … \\= (−)^{−} [_ − _]\\ 考虑初始值,可得: _ − _{−} = (−)^{n}\\令_() = _ + _ +\frac{}{!}^ +!^3 + ⋯\\: _ = _ + (−)^\\\frac{^}{!}: _ = _ + (−)^\\\frac{^}{!}: _ = _ + (−)^… … …\\相加可得: _() − _() = ^{−}\\解得_()=\frac{^{−}}{ − }\\展开得_()=( − +\frac{^}{!}−\frac{^}{!}+ ⋯ )( + + ^ + ^+ ⋯ )\\对比得_()n次方系数为 = ( − +\frac{}{!}− ⋯ \frac{±}{!})! Dn=(n−1)(Dn−1+Dn−2)Dn−nDn−1=−[Dn−1−n−1Dn−2]=(−1)2[Dn−2−n−2Dn−3]………=(−1)n−1[D1−D0]考虑初始值,可得:Dn−nDn−1=(−1)n令Ge(x)=D0+D1x+2!D2x2+D33!x3+⋯x:D1=D0+(−1)12!x2:D2=2D1+(−1)23!x3:D3=3D2+(−1)3………相加可得:Ge(x)−xGe(x)=e−x解得Ge(x)=1−xe−x展开得Ge(x)=(1−x+2!x2−3!x3+⋯)(1+x+x2+x3+⋯)对比得Ge(x)n次方系数为Dn=(1−1+2!1−⋯n!±1)n!
可以看到用递推关系来解非常充满技巧性且不容易理解,下面来看看容斥原理怎么来解这类问题。
容斥原理来理解就容易很多了,容斥原理主要是把问题归结为性质的推和拉,下面来看看如何解
设 为 数 在 第 位 上 的 全 体 排 列 , = , , … , 。 因 数 字 不 能 动 , 因 而 有 : ∣ ∣ = ( − ! ) , = , , … , 同 理 , ∣ ∩ ∣ = ( − ! ) , , = , , … , ≠ … … … ∣ ∩ ∩ ⋯ ∩ ∣ = 这 样 , 错 排 数 = ! − ( , ) ( − ! ) + ( , ) ( − ) ! + ⋯ ± ( , ) ! = ( − + ! − ⋯ ± ! ) ! 设为数在第位上的全体排列, = ,,…,。因数字不能动,因而有:\\ |_| = ( − !), = , , … , \\ 同理,\\ |_ ∩ _| = ( − !),, = , , … , ≠ \\ ………\\ |_ ∩ _ ∩ ⋯ ∩ _| = \\ 这样,错排数_ = ! − (, )( − !) + ( , ) ( −) ! + ⋯ ± (, )! = ( − +\frac{}{!}− ⋯ \frac{±}{!})! 设Ai为数i在第i位上的全体排列,i=1,2,…,n。因数字i不能动,因而有:∣Ai∣=(n−1!),i=1,2,…,n同理,∣Ai∩Aj∣=(n−2!),i,j=1,2,…k,j=i………∣A1∩A2∩⋯∩An∣=1这样,错排数Dn=n!−C(n,1)(n−1!)+C(n,2)(n−2)!+⋯±C(n,n)0!=(1−1+2!1−⋯n!±1)n!
非常地直观且容易理解
棋盘多项式是一种将排列几何化直观化的数学工具,具体介绍可以看我之前的博客。
现在先复习一下有禁区的排列数公式
设 为 个 棋 子 布 入 禁 区 的 方 案 数 , = , , , ⋅ ⋅ ⋅ , 。 有 禁 区 的 布 子 方 案 数 ( 即 禁 区 内 不 布 子 的 方 案 数 ) 为 : 0 ! − 1 ( − 1 ) ! + 2 ( − 2 ) ! + ⋯ + ( − 1 ) = ∑ k = 0 n ( − 1 ) ( − ) ! 设为个棋子布入禁区的方案数, = , , ,···, 。有禁区的布子方案数(即 禁区内不布子的方案数)为:\\ _0! − _1 ( − 1 )! + _2 ( − 2) ! + ⋯+ (−1)^_\\ = \sum_{k=0}^n(−1)^^ ( − ) ! 设ri为i个棋子布入禁区的方案数,i=1,2,3,⋅⋅⋅,n。有禁区的布子方案数(即禁区内不布子的方案数)为:r0n!−r1(n−1)!+r2(n−2)!+⋯+(−1)nrn=k=0∑n(−1)krk(n−k)!
那么错排问题就可以看成n×n的棋盘的主对角线 上的格子是禁区的布子问题,很容易得对角线的错排多项式为
R ( C ) = ( 1 + x ) n = ∑ i = 0 n C ( n , i ) x i , 即 r ( i ) = C ( n , i ) 故 错 排 问 题 的 方 案 数 : ! − ( , ) ( − ! ) + ( , ) ( − ) ! + ⋯ ± ( , ) ! = ( − + ! − ⋯ ± ! ) ! R(C)=(1+x)^n=\sum_{i=0}^nC(n,i)x^i,即r(i)=C(n,i)\\ 故错排问题的方案数:\\ ! − (, )( − !) + ( , ) ( −) ! + ⋯ ± (, )! = ( − +\frac{}{!}− ⋯ \frac{±}{!})! R(C)=(1+x)n=i=0∑nC(n,i)xi,即r(i)=C(n,i)故错排问题的方案数:n!−C(n,1)(n−1!)+C(n,2)(n−2)!+⋯±C(n,n)0!=(1−1+2!1−⋯n!±1)n!
莫比乌斯反演可以将一个比较复杂的问题转换成更好计算的问题,先来复习一下一个推论
a n = ∑ k = 0 n C ( n , k ) b k 等 价 于 b n = ∑ k = 0 n ( − 1 ) n − k C ( n , k ) a k a_n=\sum_{k=0}^nC(n,k)b_k等价于b_n=\sum_{k=0}^n(-1)^{n-k}C(n,k)a_k an=k=0∑nC(n,k)bk等价于bn=k=0∑n(−1)n−kC(n,k)ak
令 A k 表 示 恰 好 k 个 位 置 保 持 不 变 ( k = 0 , 1 … … n ) 则 全 排 列 n ! = ∑ k = 0 n C ( n , k ) ∣ A k ∣ = ∑ k = 0 n C ( n , k ) ∣ D n − k ∣ 令 n − k = l , 则 上 式 变 为 n ! = ∑ l = 0 n C ( n , l ) D l 由 推 论 可 知 D n = ∑ l = 0 n ( − 1 ) n − 1 n ! ( n − l ) ! l ! = n ! ∑ l = 0 n ( − 1 ) n − l ( n − l ) ! = n ! ∑ k = 0 n ( − 1 ) k k ! 令A_k表示恰好k个位置保持不变(k=0,1……n)\\ 则全排列n!=\sum_{k=0}^nC(n,k)|A_k|=\sum_{k=0}^nC(n,k)|D_{n-k}|\\ 令n-k=l,则上式变为 n!=\sum_{l=0}^nC(n,l)D_l\\ 由推论可知\\ D_n=\sum_{l=0}^n(-1)^{n-1}\frac{n!}{(n-l)!l!}=n!\sum_{l=0}^n\frac{(-1)^{n-l}}{(n-l)!}\\ =n!\sum_{k=0}^n\frac{(-1)^k}{k!} 令Ak表示恰好k个位置保持不变(k=0,1……n)则全排列n!=k=0∑nC(n,k)∣Ak∣=k=0∑nC(n,k)∣Dn−k∣令n−k=l,则上式变为n!=l=0∑nC(n,l)Dl由推论可知Dn=l=0∑n(−1)n−1(n−l)!l!n!=n!l=0∑n(n−l)!(−1)n−l=n!k=0∑nk!(−1)k