组合数学
上一篇:组合数学(1)
排列与组合进阶篇
接下来我们介绍一些排列组合的变种。
多重集的排列数 ∣ \mid ∣ 多重组合数
请大家一定要区分多重组合数 与多重集的组合数 !两者是完全不同的概念!
多重集是指包含重复元素的广义集合。设
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
⋯
,
n
k
⋅
a
k
}
S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k \}
S={n1⋅a1,n2⋅a2,⋯,nk⋅ak}表示由
n
1
n_1
n1个
a
1
a_1
a1,
n
2
n_2
n2个
a
2
a_2
a2,
⋯
\cdots
⋯,
n
k
n_k
nk个
a
k
a_k
ak组成的多重集,
S
S
S的全排列个数为
n
!
∏
i
=
1
k
n
i
!
=
n
!
n
1
!
n
2
!
⋯
n
k
!
\frac{n!}{\prod_{i=1}^{k}{n_i!}}=\frac{n!}{n_1!n_2!\cdots n_k!}
∏i=1kni!n!=n1!n2!⋯nk!n!
相当于把相同元素的排列数除掉了。具体地,你可以认为你有𝑘 种不一样的球,每种球的个数分别是
n
1
,
n
2
,
⋯
,
n
k
n_1,n_2,\cdots,n_k
n1,n2,⋯,nk,且
n
=
n
1
+
n
2
+
⋯
+
n
k
n=n_1+n_2+\cdots +n_k
n=n1+n2+⋯+nk。这
n
n
n个球的全排列数就是多重集的排列数 。多重集的排列数常被称作多重组合数 。我们可以用多重组合数的符号表示上式:
(
n
n
1
,
n
2
,
⋯
,
n
k
)
=
n
!
∏
i
=
1
k
n
i
!
\begin{pmatrix}n\\n_1,n_2,\cdots,n_k\end{pmatrix}=\frac{n!}{\prod_{i=1}^{k}{n_i!}}
(nn1,n2,⋯,nk)=∏i=1kni!n!
可以看出,
(
n
m
)
\begin{pmatrix}n\\m\end{pmatrix}
(nm)等价于
(
n
m
,
n
−
m
)
\begin{pmatrix}n\\m,n-m\end{pmatrix}
(nm,n−m),只不过后者较为繁琐,因而不采用。
多重集的组合数1
设
S
=
{
n
1
⋅
a
1
,
n
2
⋅
a
2
,
⋯
,
n
k
⋅
a
k
,
}
S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k, \}
S={n1⋅a1,n2⋅a2,⋯,nk⋅ak,}表示由
n
1
n_1
n1个
a
1
a_1
a1,
n
2
n_2
n2个
a
2
a_2
a2,
⋯
\cdots
⋯,
n
k
n_k
nk个
a
k
a_k
ak组成的多重集。那么对于整数
r
(
r
<
n
i
,
∀
i
∈
[
1
,
k
]
)
r(r<n_i,\forall i\in [1,k])
r(r<ni,∀i∈[1,k]),从
S
S
S中选择
r
r
r个元素组成一个多重集的方案数就是多重集的组合数。这个问题等价于
x
1
+
x
2
+
⋯
+
x
k
=
r
x_1+x_2+\cdots+x_k=r
x1+x2+⋯+xk=r的非负整数解的数目,可以用插板法解决,答案为
(
r
+
k
−
1
k
−
1
)
\begin{pmatrix}r+k-1 \\ k-1\end{pmatrix}
(r+k−1k−1)
多重集的组合数2
考虑这个问题:设 S = { n 1 ⋅ a 1 , n 2 ⋅ a 2 , ⋯ , n k ⋅ a k } S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k \} S={n1⋅a1,n2⋅a2,⋯,nk⋅ak}表示由 n 1 n_1 n1个 a 1 a_1 a1, n 2 n_2 n2 个 a 2 a_2 a2 , ⋯ \cdots ⋯ , n k n_k nk个 a k a_k ak 组成的多重集。那么对于正整数 r r r,从 S S S中选择 r r r个元素组成一个多重集的方案数。
这样就限制了每种元素的取的个数。同样的,我们可以把这个问题转化为带限制的线性方程求解:
∀
i
∈
[
1
,
k
]
,
x
i
≤
n
i
,
∑
i
=
1
k
x
i
=
r
\forall i\in [1,k],x_i\leq n_i,\sum_{i=1}^{k}{x_i}=r
∀i∈[1,k],xi≤ni,i=1∑kxi=r
于是很自然地想到了容斥原理。容斥的模型如下:
1.全集: ∑ i = 1 k x i = r \sum_{i=1}^{k}{x_i}=r ∑i=1kxi=r的非负整数解。
2.属性: x i ≤ n i x_i\leq n_i xi≤ni
于是设满足属性
i
i
i的集合是
S
i
S_i
Si,
S
ˉ
\bar{S}
Sˉ表示不满足属性
i
i
i的集合,即满足
x
i
≥
n
i
+
1
x_i\geq n_i+1
xi≥ni+1的集合。那么答案即为:
∣
⋂
i
=
1
k
S
i
∣
=
∣
U
∣
−
∣
⋃
i
=
1
k
S
i
ˉ
∣
\begin{vmatrix}\bigcap_{i=1}^{k}{S_i} \end{vmatrix}=|U|-\begin{vmatrix}\bigcup_{i=1}^{k}{\bar{S_i}}\end{vmatrix}
∣
∣⋂i=1kSi∣
∣=∣U∣−∣
∣⋃i=1kSiˉ∣
∣
根据容斥原理,有:
∣
⋃
i
=
1
k
S
i
ˉ
∣
=
∑
i
∣
S
i
ˉ
∣
−
∑
i
,
j
∣
S
i
ˉ
∩
S
j
ˉ
∣
+
∑
i
,
j
,
k
∣
S
i
ˉ
∩
S
j
ˉ
∩
S
k
ˉ
∣
−
⋯
+
(
−
1
)
k
−
1
∣
⋂
i
=
1
k
S
i
ˉ
∣
=
∑
i
(
k
+
r
−
n
i
k
−
1
)
−
∑
i
,
j
(
k
+
r
−
n
i
−
n
j
−
3
k
−
1
)
+
∑
i
,
j
,
k
(
k
+
r
−
n
i
−
n
j
−
4
k
−
1
)
−
⋯
+
(
−
1
)
k
−
1
(
k
+
r
−
∑
i
=
1
k
n
i
−
k
−
1
k
−
1
)
\begin{aligned}\begin{vmatrix}\bigcup_{i=1}^{k}{\bar{S_i}}\end{vmatrix}&=\sum_{i}{|\bar{S_i}|}-\sum_{i,j}{\begin{vmatrix}\bar{S_i}\cap \bar{S_j} \end{vmatrix}}+\sum_{i,j,k}{|\bar{S_i}\cap\bar{S_j}\cap\bar{S_k}|}-\cdots\\&\quad+(-1)^{k-1}\begin{vmatrix}\bigcap_{i=1}^{k}{\bar{S_i}} \end{vmatrix}\\&=\sum_{i}{\begin{pmatrix}k+r-n_i\\k-1\end{pmatrix}}-\sum_{i,j}{\begin{pmatrix}k+r-n_i-n_j-3\\k-1\end{pmatrix}}+\sum_{i,j,k}{\begin{pmatrix}k+r-n_i-n_j-4\\k-1\end{pmatrix}}-\cdots\\&\quad+(-1)^{k-1}\begin{pmatrix}k+r-\sum_{i=1}^{k}{n_i}-k-1\\k-1 \end{pmatrix}\end{aligned}
∣
∣⋃i=1kSiˉ∣
∣=i∑∣Siˉ∣−i,j∑∣
∣Siˉ∩Sjˉ∣
∣+i,j,k∑∣Siˉ∩Sjˉ∩Skˉ∣−⋯+(−1)k−1∣
∣⋂i=1kSiˉ∣
∣=i∑(k+r−nik−1)−i,j∑(k+r−ni−nj−3k−1)+i,j,k∑(k+r−ni−nj−4k−1)−⋯+(−1)k−1(k+r−∑i=1kni−k−1k−1)
拿全集
∣
U
∣
=
(
k
+
r
−
1
k
−
1
)
\begin{vmatrix}U\end{vmatrix}=\begin{pmatrix}k+r-1\\k-1\end{pmatrix}
∣
∣U∣
∣=(k+r−1k−1)减去上式,得到多重集的几何数
A
n
s
=
∑
p
=
0
k
(
−
1
)
p
∑
A
(
k
+
r
−
1
−
∑
A
n
A
i
−
p
k
−
1
)
Ans=\sum_{p=0}^{k}{(-1)^p}\sum_A{\begin{pmatrix}k+r-1-\sum_An_{A_i}-p\\k-1 \end{pmatrix}}
Ans=p=0∑k(−1)pA∑(k+r−1−∑AnAi−pk−1)
其中
A
A
A是充当枚举子集的作用,满足
∣
A
∣
=
p
,
A
i
<
A
i
+
1
|A|=p,A_i<A_{i+1}
∣A∣=p,Ai<Ai+1。
不相邻的排列
1 ∼ n 1\sim n 1∼n这 n n n个自然数中选 k k k个,这 k k k个数中任何两个数都不相邻的组合有 ( n − k + 1 k ) \begin{pmatrix}n-k+1\\k\end{pmatrix} (n−k+1k)种。
错位排列
我们把错位排列问题具体化,考虑这样一个问题:
n
n
n封不同的信,编号分别是
1
,
2
,
3
,
4
,
5
1,2,3,4,5
1,2,3,4,5,现在要把这五封信放在编号
1
,
2
,
3
,
4
,
5
1,2,3,4,5
1,2,3,4,5,的信封中,要求信封的编号与信的编号不一样。问有多少种不同的放置方法?
假设我们考虑到第
n
n
n个信封,初始时我们暂时把第
n
n
n封信放在第
n
n
n个信封中,然后考虑两种情况的递推:
- 前面 n − 1 n-1 n−1个信封全部装错;
- 前面 n − 1 n-1 n−1个信封有一个没装错其余全部装错。
对于第一种情况,前面
n
−
1
n-1
n−1个信封全部装错:因为前面
n
−
1
n-1
n−1个已经全部装错了,所以第
n
n
n封只需要与前面任一一个位置交换即可,总共有
f
(
n
−
1
)
×
(
n
−
1
)
f(n-1)\times (n-1)
f(n−1)×(n−1)种情况。
对于第二种情况,前面
n
−
1
n-1
n−1个信封有一个没有装错其余全部装错:考虑这种情况的目的在于,若
n
−
1
n-1
n−1个信封中如果有一个没装错,那么我们把那个没装错的与
n
n
n交换,即可得到一个全错位排列情况。
其他情况,我们不可能通过一次操作来把它变成一个长度为
n
n
n的错排。
于是可得错位排列的递推式为
f
(
n
)
=
(
n
−
1
)
(
f
(
n
−
1
)
+
f
(
n
−
2
)
)
f(n)=(n-1)(f(n-1)+f(n-2))
f(n)=(n−1)(f(n−1)+f(n−2))。
错位排列数列的前几项为
0
,
1
,
2
,
9
,
44
,
265
0,1,2,9,44,265
0,1,2,9,44,265。