组合数学(六)四种方法解错排问题


考虑这么一个问题:𝒏个元素依次给以标号𝟏,𝟐,…,𝒏。𝒏个元素的全排列 中,每个元素都不在自己原来位置上的排列数。

这个问题可以用组合数学的很多思想去理解,下面对其不同的解法进行总结以增加自己对于组合数学的理解。

递推关系

设𝒏个数𝟏, 𝟐, … , 𝒏错排的数目为𝑫𝒏,任取其中一数𝒊, 数𝒊分别与其他的𝒏 − 𝟏个数之一互换,其余n-2个数进 行错排,共得(𝒏 − 𝟏)𝑫𝒏−𝟐个错排。 另一部分位数𝒊以外的n-1个数进行错排,然后𝒊与其中 每个数互换得(𝒏 − 𝟏)𝑫𝒏−𝟏个错排。

综合以上分析结果得递推关系: 𝑫𝒏 = (𝒏 − 𝟏)(𝑫𝒏−𝟏 + 𝑫𝒏−𝟐),𝑫𝟏 = 𝟎, 𝑫𝟐 = 𝟏 可以推得:𝑫𝟎 = 𝟏

可以看到这个递推关系还是比较难想出来的,并且这还是一个非常系数地推关系,这对我们推母函数更加加大了困难。

下面提供一种解法:
𝑫 𝒏 = ( 𝒏 − 𝟏 ) ( 𝑫 𝒏 − 𝟏 + 𝑫 𝒏 − 𝟐 ) ​ 𝑫 𝒏 − 𝒏 𝑫 𝒏 − 𝟏 = − [ 𝑫 𝒏 − 𝟏 − 𝒏 − 𝟏 𝑫 𝒏 − 𝟐 ] = ( − 𝟏 ) 2 [ 𝑫 𝒏 − 𝟐 − 𝒏 − 𝟐 𝑫 𝒏 − 3 ] … … … = ( − 𝟏 ) 𝒏 − 𝟏 [ 𝑫 𝟏 − 𝑫 𝟎 ] ​ 考 虑 初 始 值 , 可 得 : 𝑫 𝒏 − 𝒏 𝑫 𝒏 − 𝟏 = ( − 𝟏 ) n 令 𝑮 𝒆 ( 𝒙 ) = 𝑫 𝟎 + 𝑫 𝟏 𝒙 + 𝑫 𝟐 𝟐 ! 𝒙 𝟐 + 𝑫 𝟑 𝟑 ! 𝒙 3 + ⋯ 𝒙 : 𝑫 𝟏 = 𝑫 𝟎 + ( − 𝟏 ) 𝟏 𝒙 𝟐 𝟐 ! : 𝑫 𝟐 = 𝟐 𝑫 𝟏 + ( − 𝟏 ) 𝟐 𝒙 𝟑 𝟑 ! : 𝑫 𝟑 = 𝟑 𝑫 𝟐 + ( − 𝟏 ) 𝟑 … … … 相 加 可 得 : 𝑮 𝒆 ( 𝒙 ) − 𝒙 𝑮 𝒆 ( 𝒙 ) = 𝒆 − 𝒙 解 得 𝑮 𝒆 ( 𝒙 ) = 𝒆 − 𝒙 𝟏 − 𝒙 展 开 得 𝑮 𝒆 ( 𝒙 ) = ( 𝟏 − 𝒙 + 𝒙 𝟐 𝟐 ! − 𝒙 𝟑 𝟑 ! + ⋯ ) ( 𝟏 + 𝒙 + 𝒙 𝟐 + 𝒙 𝟑 + ⋯ ) 对 比 得 𝑮 𝒆 ( 𝒙 ) n 次 方 系 数 为 𝑫 𝒏 = ( 𝟏 − 𝟏 + 𝟏 𝟐 ! − ⋯ ± 𝟏 𝒏 ! ) 𝒏 ! 𝑫_𝒏 = (𝒏 − 𝟏)(𝑫_{𝒏−𝟏} + 𝑫_{𝒏−𝟐}) \\​𝑫_𝒏 − 𝒏𝑫_{𝒏−𝟏} = −[𝑫_{𝒏−𝟏} − 𝒏 − 𝟏 𝑫_{𝒏−𝟐}]\\ = (−𝟏)^2 [𝑫_{𝒏−𝟐} − 𝒏 − 𝟐 𝑫_{𝒏−3}] \\… … … \\= (−𝟏)^{𝒏−𝟏} [𝑫_𝟏 − 𝑫_𝟎]\\ ​考虑初始值,可得: 𝑫_𝒏 − 𝒏𝑫_{𝒏−𝟏} = (−𝟏)^{n}\\令𝑮_𝒆(𝒙) = 𝑫_𝟎 + 𝑫_𝟏𝒙 +\frac{𝑫𝟐}{𝟐!}𝒙^𝟐 +𝑫𝟑𝟑!𝒙^3 + ⋯\\𝒙: 𝑫_𝟏 = 𝑫_𝟎 + (−𝟏)^𝟏\\\frac{𝒙^𝟐}{𝟐!}: 𝑫_𝟐 = 𝟐𝑫_𝟏 + (−𝟏)^𝟐\\\frac{𝒙^𝟑}{𝟑!}: 𝑫_𝟑 = 𝟑𝑫_𝟐 + (−𝟏)^𝟑… … …\\相加可得: 𝑮_𝒆(𝒙) − 𝒙𝑮𝒆_(𝒙) = 𝒆^{−𝒙}\\解得𝑮_𝒆(𝒙)=\frac{𝒆^{−𝒙}}{𝟏 − 𝒙}\\展开得𝑮_𝒆(𝒙)=(𝟏 − 𝒙 +\frac{𝒙^𝟐}{𝟐!}−\frac{𝒙^𝟑}{𝟑!}+ ⋯ )(𝟏 + 𝒙 + 𝒙^𝟐 + 𝒙^𝟑+ ⋯ )\\对比得𝑮_𝒆(𝒙)n次方系数为𝑫𝒏 = (𝟏 − 𝟏 +\frac{𝟏}{𝟐!}− ⋯ \frac{±𝟏}{𝒏!})𝒏! Dn=(n1)(Dn1+Dn2)DnnDn1=[Dn1n1Dn2]=(1)2[Dn2n2Dn3]=(1)n1[D1D0]DnnDn1=(1)nGe(x)=D0+D1x+2!D2x2+D33!x3+x:D1=D0+(1)12!x2:D2=2D1+(1)23!x3:D3=3D2+(1)3Ge(x)xGe(x)=exGe(x)=1xexGe(x)=(1x+2!x23!x3+)(1+x+x2+x3+)Ge(x)nDn=(11+2!1n!±1)n!

可以看到用递推关系来解非常充满技巧性且不容易理解,下面来看看容斥原理怎么来解这类问题。

容斥原理

容斥原理来理解就容易很多了,容斥原理主要是把问题归结为性质的推和拉,下面来看看如何解
设 𝑨 𝒊 为 数 𝒊 在 第 𝒊 位 上 的 全 体 排 列 , 𝒊 = 𝟏 , 𝟐 , … , 𝒏 。 因 数 字 𝒊 不 能 动 , 因 而 有 : ∣ 𝑨 𝒊 ∣ = ( 𝒏 − 𝟏 ! ) , 𝒊 = 𝟏 , 𝟐 , … , 𝒏 同 理 , ∣ 𝑨 𝒊 ∩ 𝑨 𝒋 ∣ = ( 𝒏 − 𝟐 ! ) , 𝒊 , 𝒋 = 𝟏 , 𝟐 , … 𝒌 , 𝒋 ≠ 𝒊 … … … ∣ 𝑨 𝟏 ∩ 𝑨 𝟐 ∩ ⋯ ∩ 𝑨 𝒏 ∣ = 𝟏 这 样 , 错 排 数 𝑫 𝒏 = 𝒏 ! − 𝑪 ( 𝒏 , 𝟏 ) ( 𝒏 − 𝟏 ! ) + 𝑪 ( 𝒏 , 𝟐 ) ( 𝒏 − 𝟐 ) ! + ⋯ ± 𝑪 ( 𝒏 , 𝒏 ) 𝟎 ! = ( 𝟏 − 𝟏 + 𝟏 𝟐 ! − ⋯ ± 𝟏 𝒏 ! ) 𝒏 ! 设𝑨𝒊为数𝒊在第𝒊位上的全体排列, 𝒊 = 𝟏,𝟐,…,𝒏。因数字𝒊不能动,因而有:\\ |𝑨_𝒊| = (𝒏 − 𝟏 !), 𝒊 = 𝟏, 𝟐, … , 𝒏\\ 同理,\\ |𝑨_𝒊 ∩ 𝑨_𝒋| = (𝒏 − 𝟐 !),𝒊,𝒋 = 𝟏, 𝟐, … 𝒌,𝒋 ≠ 𝒊\\ ………\\ |𝑨_𝟏 ∩ 𝑨_𝟐 ∩ ⋯ ∩ 𝑨_𝒏| = 𝟏\\ 这样,错排数𝑫_𝒏 = 𝒏! − 𝑪(𝒏, 𝟏)( 𝒏 − 𝟏 !) + 𝑪( 𝒏, 𝟐) (𝒏 −𝟐) ! + ⋯ ± 𝑪(𝒏, 𝒏 )𝟎! = (𝟏 − 𝟏 +\frac{𝟏}{𝟐!}− ⋯ \frac{±𝟏}{𝒏!})𝒏! Aiiii=12niAi=(n1!),i=1,2,,nAiAj=(n2!)i,j=1,2,k,j=iA1A2An=1Dn=n!C(n,1)(n1!)+C(n,2)(n2)!+±C(n,n)0!=(11+2!1n!±1)n!
非常地直观且容易理解

棋盘多项式

棋盘多项式是一种将排列几何化直观化的数学工具,具体介绍可以看我之前的博客。

现在先复习一下有禁区的排列数公式
设 𝒓 𝒊 为 𝒊 个 棋 子 布 入 禁 区 的 方 案 数 , 𝒊 = 𝟏 , 𝟐 , 𝟑 , ⋅ ⋅ ⋅ , 𝒏 。 有 禁 区 的 布 子 方 案 数 ( 即 禁 区 内 不 布 子 的 方 案 数 ) 为 : 𝑟 0 𝑛 ! − 𝑟 1 ( 𝑛 − 1 ) ! + 𝑟 2 ( 𝑛 − 2 ) ! + ⋯ + ( − 1 ) 𝑛 𝑟 𝑛 = ∑ k = 0 n ( − 1 ) 𝑘 𝑟 𝑘 ( 𝑛 − 𝑘 ) ! 设𝒓𝒊为𝒊个棋子布入禁区的方案数, 𝒊 = 𝟏, 𝟐, 𝟑,···, 𝒏。有禁区的布子方案数(即 禁区内不布子的方案数)为:\\ 𝑟_0𝑛! − 𝑟_1 (𝑛 − 1 )! + 𝑟_2 (𝑛 − 2) ! + ⋯+ (−1)^𝑛𝑟_𝑛\\ = \sum_{k=0}^n(−1)^𝑘𝑟^𝑘 (𝑛 − 𝑘) ! riii=1,2,3,,n:r0n!r1(n1)!+r2(n2)!++(1)nrn=k=0n(1)krk(nk)!
那么错排问题就可以看成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=0nC(n,i)xi,r(i)=C(n,i):n!C(n,1)(n1!)+C(n,2)(n2)!+±C(n,n)0!=(11+2!1n!±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=0nC(n,k)bkbn=k=0n(1)nkC(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!} Akk(k=0,1n)n!=k=0nC(n,k)Ak=k=0nC(n,k)Dnknk=ln!=l=0nC(n,l)DlDn=l=0n(1)n1(nl)!l!n!=n!l=0n(nl)!(1)nl=n!k=0nk!(1)k

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值