考虑这么一个问题:𝒏个元素依次给以标号𝟏,𝟐,…,𝒏。𝒏个元素的全排列 中,每个元素都不在自己原来位置上的排列数。
这个问题可以用组合数学的很多思想去理解,下面对其不同的解法进行总结以增加自己对于组合数学的理解。
递推关系
设𝒏个数𝟏, 𝟐, … , 𝒏错排的数目为𝑫𝒏,任取其中一数𝒊, 数𝒊分别与其他的𝒏 − 𝟏个数之一互换,其余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