Chapter II: 字符串, 集合与二项式系数
组合数学是数学的一个分支,它研究事物 (一般以数字或符号指代) 在特定模式下的配置, 并研究这种配置的存在性, 所有可能配置的计数和分类, 以及配置的各种性质。组合数学与代数, 几何以及分析学均有着密切联系. 从本章开始, 我们将对组合数学这一课程进行简要介绍.
文章目录
2.1 基本计算原理
首先, 我们对两个基本计算原理: 加法原理和乘法原理进行简介.
-
乘法原理:
若进行 A 1 A_{1} A1 过程有 n 1 n_{1} n1 种方法, 进行 A 2 A_{2} A2 过程有 n 2 n_{2} n2 种方法, 则进行 A 1 A_{1} A1 过程后再进行 A 2 A_{2} A2 过程的方法共有 n 1 ⋅ n 2 n_{1}\cdot n_{2} n1⋅n2 种.
-
加法原理:
假定 A 1 A_{1} A1, A 2 A_{2} A2 过程是并行的. 若进行 A 1 A_{1} A1 过程有 n 1 n_{1} n1 种方法, 进行 A 2 A_{2} A2 过程有 n 2 n_{2} n2 种方法, 则进行 A 1 A_{1} A1 过程或进行 A 2 A_{2} A2 过程的方法共有 n 1 + n 2 n_{1}+ n_{2} n1+n2 种.
2.2 字符串, 排列与组合
实际上, 绝大多数的组合数学问题可以被归结为对 “字符串” (strings) 的研究. “字符串” 是由人类最基本的书写交流而衍生的产物, 也是人类和计算机交流, 乃至计算机间相互交流的方式. 本质上, 集合以及二项式系数都可归为字符串研究所得的产物. 下面, 我们对字符串这一概念进行简要介绍, 并继续研究 (包括但不限于) 字符串的排列和组合.
定义2.2.1 (字符串:Strings)
设 x 1 , x 2 , ⋯ , x n x_{1},x_{2},\cdots,x_{n} x1,x2,⋯,xn 为集合 X \mathbb{X} X 的 n n n 个元素. 我们称序列 x 1 x 2 ⋯ x n x_{1}x_{2}\cdots x_{n} x1x2⋯xn 为:
集合 X 的一个长度为 n 的字符串.
[例]
令
X
=
{
0
,
1
}
\mathbb{X} = \{0,1\}
X={0,1}, 我们称:
000101
000101
000101
为 集合
X
\mathbb{X}
X 的长度为6的一个字符串.
[注]
我们也可以通过引入 Cartesian Product (笛卡尔积) 的方式定义字符串:
定义2.2.2 (笛卡尔积)
我们定义
X 1 × X 2 × ⋯ X n = { ( x 1 , x 2 , ⋯ , x n ) ; x i ∈ X i , i ⩽ i ⩽ m } \mathbb{X_{1}\times \mathbb{X_{2}}\times \cdots \mathbb{X_{n}}} = \{(x_{1},x_{2},\cdots,x_{n}); x_{i} \in \mathbb{X_{i}}, i\leqslant i\leqslant m \} X1×X2×⋯Xn={(x1,x2,⋯,xn);xi∈Xi,i⩽i⩽m}
并称
X 1 × X 2 × ⋯ X n \mathbb{X_{1}\times \mathbb{X_{2}}\times \cdots \mathbb{X_{n}}} X1×X2×⋯Xn
为: 集合 X 1 , X 2 , ⋯ , X n \mathbb{X_{1}}, \mathbb{X_{2}}, \cdots, \mathbb{X_{n}} X1,X2,⋯,Xn 的笛卡尔积 (Cartesian Product of X 1 , X 2 , ⋯ , X n \mathbb{X_{1}}, \mathbb{X_{2}}, \cdots, \mathbb{X_{n}} X1,X2,⋯,Xn).
于是, 我们可将集合 X \mathbb{X} X 的长度为 n n n 的字符串视为 X \mathbb{X} X 自身作 n n n 次笛卡尔积的结果.
设 ∣ X ∣ = m |\mathbb{X}| = m ∣X∣=m. 不难得到, 集合 X \mathbb{X} X 的长度为 n n n 的字符串的个数共为 m n m^{n} mn.
[例]
集合 { 0 , 1 } \{0,1\} {0,1} 的, 长为 32 32 32 的字符串共有 2 32 2^{32} 232 个.
[注]
在 “字符串” 的定义中, 我们没有规定每种字符串的唯一性, 在列举过程中, 相同的字符串可以重复多次出现!
定义2.2.3 (排列:Permutation)
一个集合 X \mathbb{X} X 的, 大小为 n n n 的字符串 s 1 s 2 ⋯ s n s_{1}s_{2}\cdots s_{n} s1s2⋯sn 被称为一个 X \mathbb{X} X 的排列, 当且仅当 s i ≠ s j , i ≠ j s_{i}\neq s_{j}, i\neq j si=sj,i=j.
注意到:
- 当且仅当 ∣ X ∣ ⩾ n |\mathbb{X}| \geqslant n ∣X∣⩾n 时, 存在 X \mathbb{X} X 的排列.
- 在 ∣ X ∣ ⩾ n |\mathbb{X}| \geqslant n ∣X∣⩾n 时, ∣ X ∣ |\mathbb{X}| ∣X∣ 的排列共有 m ! ( m − n ) ! \frac{m!}{(m-n)!} (m−n)!m! 种.
我们记 P ( n , k ) = n ! ( n − k ) ! . P(n,k) = \frac{n!}{(n-k)!}. P(n,k)=(n−k)!n!.
[例]
令
X
=
{
a
,
b
,
c
,
⋯
,
x
,
y
,
z
}
\mathbb{X} = \{a,b,c,\cdots, x,y,z\}
X={a,b,c,⋯,x,y,z}.
∣
X
∣
|\mathbb{X}|
∣X∣ 的长为
3
3
3 的排列共有
26
!
23
!
=
15600
\frac{26!}{23!} = 15600
23!26!=15600
种.
定义2.2.4 (组合:Combination)
若 n n n 和 k k k 均为正整数, 且满足 0 ⩽ k ⩽ n 0\leqslant k \leqslant n 0⩽k⩽n, 则
( n k ) = C ( n , k ) = P ( n , k ) k ! = n ! k ! ⋅ ( n − k ) ! . \binom nk = C(n,k) = \frac{P(n,k)}{k!} = \frac{n!}{k!\cdot (n-k)!}. (kn)=C(n,k)=k!P(n,k)=k!⋅(n−k)!n!.
[证明]
设 X \mathbb{X} X 为一个包含 n n n 个元素的集合. 我们已知, P ( n , k ) P(n,k) P(n,k) 代表集合 X \mathbb{X} X 的长为 k k k 的排列的数量. 而显然每个 C ( n , k ) C(n,k) C(n,k) 作为集合 X \mathbb{X} X 的 k k k 元子集, 可视为 k ! k! k! 个不同的排列, 而每一个的排列在这样的计数中出现且仅出现一次. 故有: k ! C ( n , k ) = P ( n , k ) . k!C(n,k) = P(n,k). k!C(n,k)=P(n,k). 式子左右同除 k ! k! k!, 即得到集合 X \mathbb{X} X 的, 大小为 k k k 的子集的个数. ■ \blacksquare ■
注意:
(
n
k
)
=
(
n
n
−
k
)
.
\binom {n}{k} = \binom{n}{n-k}.
(kn)=(n−kn).
2.3 重要示例和应用
在上文中, 我们介绍和总结了字符串, 排列与组合的概念, 为我们进一步的学习打下了概念基础. 为了进一步建立起 “组合证明” 的思想, 下文中我们将介绍一些基于组合联系思想的组合数计算与证明, 并对一类 “分配问题” 给出通用的解法, 最后对 Catalan 数和多项式系数进行简要介绍.
2.3.1 证明中的组合思想
[问题1]
设
n
n
n 为正整数. 证明:
1
+
3
+
5
+
⋯
+
2
n
−
1
=
n
2
.
1+3+5+\cdots +2n-1 = n^{2}.
1+3+5+⋯+2n−1=n2.
[证明]
左侧等式的含义是前 n n n 个奇数的和. 我们可作如下认定:
1 1 1 代表一个 n × n n\times n n×n 点阵左上角的第一个元素.
3 3 3 即为在点阵内, 将点阵左上角第一个元素包围起来所需要的点的个数.
5 5 5 即为在点阵内, 将点阵左上角的 2 × 2 2\times 2 2×2 顺序主子式 包围起来所需要的点的个数.
⋯ ⋯ \cdots \cdots ⋯⋯
由上可知, 等式左侧即为 n × n n \times n n×n 点阵内点的总个数 n 2 n^{2} n2, 证毕. ■ \blacksquare ■
[问题2]
证明:
(
n
0
)
+
(
n
1
)
+
⋯
+
(
n
n
)
=
2
n
.
\binom n0 + \binom n1 + \cdots + \binom nn = 2^{n}.
(0n)+(1n)+⋯+(nn)=2n.
[证明]
2 n 2^{n} 2n 是集合 0 , 1 {0,1} 0,1 的长为 n n n 的字符串的个数. 等式左侧通过对集合 0 , 1 {0,1} 0,1的长为 n n n 的字符串中, 0 0 0 或 1 1 1 的出现次数进行分类计数累加, 也实现了对字符串个数的计数. 因此等式左右两侧的式子在组合意义上是等价的, 证毕. ■ \blacksquare ■
[问题3]
设
n
,
k
n, k
n,k 均为正整数, 且满足
0
⩽
k
<
n
.
0 \leqslant k<n.
0⩽k<n. 证明:
(
n
k
+
1
)
=
(
k
k
)
+
(
k
+
1
k
)
+
⋯
+
(
n
−
1
k
)
.
\binom{n}{k+1} = \binom{k}{k} + \binom{k+1}{k} + \cdots + \binom{n-1}{k}.
(k+1n)=(kk)+(kk+1)+⋯+(kn−1).
[证明]
通过观察等式左右两侧, 并联系其组合上的意义, 我们可以得知: 等式左侧数值上等于在 n n n 个对象中选出 k + 1 k+1 k+1 个的方式总数, 而等式右侧表示了在 n n n 个对象中依次选择 k + 1 k+1 k+1 个的方法总数, 二者在组合意义上是等价的, 证毕. ■ \blacksquare ■
[问题4]
证明:
k
(
n
k
)
=
n
(
n
−
1
k
−
1
)
.
k\binom nk = n\binom{n-1}{k-1}.
k(kn)=n(k−1n−1).
[证明]
等式左右两侧可视为: “在一个 n n n 人团体中选出一个 k k k 人小队, 并指派队长” 的不同操作方式: 左侧式子可视为: 先组队再选出队长; 右侧式子可视为: 先选出队长, 再组成队伍, 二者在组合意义上等价, 证毕, ■ \blacksquare ■
2.3.2 解决一类分配问题
[问题]
假设我们要将18根相同的笔分给A,B,C,D四人, 且保证每人所分得的笔数大于等于1, 有多少种不同的分法?
[解]
这一问题可被转化为: 在17个对象 (18根笔,有17个空隙可供我们分割)中选出三个(作为三个空隙,从而将整体分割为四个部分), 有多少种选法. 答案显然是 ( 17 3 ) \binom {17}3 (317).
[问题]
现在, 我们要求每个人所分得的笔数大于等于0, 此时又有多少种不同分法?
[解]
这一问题看上去比较复杂. 但是, 如果我们假定: 在筛选前就给每个人都分配一根笔, 在分配结束后我们再从每人手里收回一根笔, 原问题就被转化为: 将 ( 18 + 4 = 22 ) (18+4 = 22) (18+4=22) 根笔分配给四人, 使每人手里的笔数不少于 1 1 1 根. 因此, 这一问题的答案显然是 ( 21 3 ) \binom{21}{3} (321).
[思考]
- 如果我们又要求每个人在分配中至少分别分得 a , b , c , d a,b,c,d a,b,c,d 根笔, (当然 a + b + c + d ⩽ 18 a+b+c+d\leqslant 18 a+b+c+d⩽18), 如何计算分配方案个数?
- 如果我们要求在分配中某人分得的笔不多于 t t t 根, 又该如何计算分配方案个数?
2.3.3 Catalan 数
因为不可描述的原因, 烦请参阅同专栏下相关文章.
2.3.4 多项式系数
定理2.3.1 (二项式定理)
设 x , y x, y x,y 均为实数, 且 x , y , x + y x,y,x+y x,y,x+y 非零. 则对于任意非零整数 n n n, 有:
( x + y ) n = ∑ i = 0 n ( n i ) x n − i y i . (x + y)^{n} = \sum_{i = 0}^{n}\binom{n}{i}x^{n-i}y^{i}. (x+y)n=i=0∑n(in)xn−iyi.
[证明]
将
(
x
+
y
)
n
(x + y)^{n}
(x+y)n 视为
n
n
n 个
(
x
+
y
)
(x+y)
(x+y) 的累乘.
(
x
+
y
)
n
(x+y)^{n}
(x+y)n 的展开式中的每一项都是从累乘中或选择
x
x
x 项, 或选择
y
y
y 项从而得到的. 若
x
x
x 被选择了
n
−
i
n-i
n−i 次, 而
y
y
y 被选择了
i
i
i 次, 我们所得到的,不考虑系数的项就是
x
n
−
i
y
i
x^{n-i}y^{i}
xn−iyi. 对于每一个
i
i
i, 这样的选择共有
(
n
i
)
\binom{n}{i}
(in) 种. 可见, 在组合意义上等式两边等价.
■
\blacksquare
■
下面, 我们对多项式系数进行简单的探讨. 假设出于不可描述的原因, 我们要对 n n n 节车底进行重新涂色, 工厂内有普快红, 高阻绿, 特快蓝三种油漆. 我们将随机选出 k 1 k_{1} k1 节车底并将其涂成高阻绿, k 2 k_{2} k2 节刷成普快红, 其余的 k 3 = n − ( k 1 + k 2 ) k_{3} = n-(k_{1} + k_{2}) k3=n−(k1+k2) 节则被涂成特快蓝. 我们可使用以下的方法计算选择车底的方法数:
首先, 我们从
n
n
n 节车底中选出将要被涂成高阻绿的
k
1
k_{1}
k1 节车底, 再从
n
−
k
1
n-k_{1}
n−k1 节车底中选择
k
2
k_{2}
k2 节将被刷成普快红的车底, 最后剩下的车底通通被漆成特快蓝. 显然, 选法如下:
(
n
k
1
)
(
n
−
k
1
k
2
)
=
n
!
k
1
!
(
n
−
k
1
)
!
⋅
(
n
−
k
1
)
!
k
2
!
(
n
−
(
k
1
+
k
2
)
)
!
=
n
!
k
1
!
k
2
!
k
3
!
.
\binom{n}{k_{1}}\binom{n-k_{1}}{k_{2}} = \frac{n!}{k_{1}!(n-k_{1})!}\cdot \frac{(n-k_{1})!}{k_{2}!(n-(k_{1} + k_{2}))!} = \frac{n!}{k_{1}!k_{2}!k_{3}!}.
(k1n)(k2n−k1)=k1!(n−k1)!n!⋅k2!(n−(k1+k2))!(n−k1)!=k1!k2!k3!n!.
我们称具有以上形式的数为 多项式系数. 显见, 二项式系数是多项式系数的特殊形式. 一般地:
(
n
k
1
,
k
2
,
⋯
,
k
r
)
=
n
!
k
1
!
k
2
!
⋯
k
r
!
.
\binom{n}{k_{1},k_{2},\cdots,k_{r}} = \frac{n!}{k_{1}!k_{2}!\cdots k_{r}!}.
(k1,k2,⋯,krn)=k1!k2!⋯kr!n!.
定理2.3.2 (多项式定理)
设 x 1 , x 2 , ⋯ , x r x_{1},x_{2},\cdots, x_{r} x1,x2,⋯,xr 为非零实数, 且满足 ∑ i = 1 r x i ≠ 0 \sum_{i=1}^{r}x_{i} \neq 0 ∑i=1rxi=0. 则对任意整数 n n n, 有:
( x 1 + x 2 + ⋯ + x r ) n = ∑ k 1 + k 2 + ⋯ + k r = n ( n k 1 , k 2 , ⋯ , k r ) x 1 k 1 x 2 k 2 ⋯ x r k r . (x_{1} + x_{2} + \cdots + x_{r})^{n} = \sum_{k_{1} + k_{2} + \cdots + k_{r} = n}\binom{n}{k_{1},k_{2},\cdots,k_{r}}x_{1}^{k_{1}}x_{2}^{k_{2}}\cdots x_{r}^{k_{r}}. (x1+x2+⋯+xr)n=k1+k2+⋯+kr=n∑(k1,k2,⋯,krn)x1k1x2k2⋯xrkr.