数论 II(组合数学)
>> 排列数
定义
排列( A r r a n g m e n t Arrangment Arrangment)数指的是从 n n n 个不同元素中任取 m ( m ⩽ n ) m\ (m\leqslant n) m (m⩽n) 个元素排成一列(考虑元素先后出现次序)称此为一个排列,此种排列的总数即为排列数,即叫做从 n n n 个不同元素中取出 m m m 个元素的排列数。记做 A n m A_{n}^{m} Anm 。
排列原理
#Ex1 加法原理:做一件事,完成它可以有 n n n 类办法,在第一类办法中有 m 1 m_1 m1 种不同的方法,在第二类办法中有 m 2 m_2 m2 种不同的方法, ⋯ \cdots ⋯,在第 n n n 类办法中有 m n m_n mn 种不同的方法,那么完成这件事共有 K = m 1 + m 2 + m 3 + ⋯ + m n K=m_1+m_2+m_3+\cdots+m_n K=m1+m2+m3+⋯+mn 种不同方法。
#Ex2 乘法原理:做一件事,完成它需要分成 n n n 个步骤,做第一步有 m 1 m_1 m1 种不同的方法,做第二步有 m 2 m_2 m2 种不同的方法, ⋯ \cdots ⋯,做第 n n n 步有 m n m_n mn 种不同的方法,那么完成这件事共有 K = m 1 m 2 m 3 … m n K=m_1m_2m_3…m_n K=m1m2m3…mn 种不同的方法。
* 注意“类”和“步”的区别:类是独立的集合,而步是集合所组成的链。
性质
#1: A n m = n ! ( n − m ) ! A_{n}^{m}=\dfrac{n!}{(n-m)!} Anm=(n−m)!n! 。
$\qquad $求排列数 A n m A_{n}^{m} Anm 可以按依次填 m m m 个空位来考虑:假设有 排好顺序 的 m m m 个空位,从 n n n 个不同元素 a 1 , a 2 , a 3 , ⋯ , a n a_1,a_2,a_3,\cdots,a_n a1,a2,a3,⋯,an 中任意取 m m m 个去填空,一个空位填 1 1 1 个元素,每一种填法就对应 1 1 1 个排列,因此,所有不同填法的种数就是排列数。
\qquad 第 1 1 1 步,第 1 1 1 位可以从 n n n 个元素中任选一个填上,共有 n n n 种填法;
\qquad 第 2 2 2 步,第 2 2 2 位只能从余下的 n − 1 n-1 n−1 个元素中任选一个填上,共有 n − 1 n-1 n−1 种填法;
\qquad 第 3 3 3 步,第 3 3 3 位只能从余下的 n − 2 n-2 n−2 个元素中任选一个填上,共有 n − 2 n-2 n−2 种填法;
⋯ \qquad\cdots ⋯
\qquad 第 m m m 步,当前面的 m − 1 m-1 m−1 个空位都填上后,第 m m m 位只能从余下的 n − m + 1 n-m+1 n−m+1 个元素中任选一个填上,共有 n − m + 1 n-m+1 n−m+1 种填法。
\qquad 根据乘法原理,共有 ∏ i = n − m + 1 n i \prod_{i=n-m+1}^{n}i ∏i=n−m+1ni 种填法。
\qquad
因而有
A
n
m
=
∏
i
=
n
−
m
+
1
n
i
=
n
!
(
n
−
m
)
!
A_{n}^{m}=\prod_{i=n-m+1}^ni=\dfrac{n!}{(n-m)!}
Anm=i=n−m+1∏ni=(n−m)!n!
\qquad
特别地,规定
0
!
=
1
0!=1
0!=1 。
>> 组合数
定义
组合( C o m b i a n t i o n Combiantion Combiantion)数指的是从 n n n 个不同元素中,任取 m ( m ⩽ n ) m\ (m\leqslant n) m (m⩽n) 个元素并成一组,叫做从 n n n 个不同元素中取出 m m m 个元素的一个组合;从 n n n 个不同元素中取出 m ( m ⩽ n ) m\ (m\leqslant n) m (m⩽n) 个元素的所有组合的个数,叫做从 n n n 个不同元素中取出 m m m 个元素的组合数。记做 C n m C_{n}^{m} Cnm 。
性质
#1: C n m = n ! m ! ( n − m ) ! C_{n}^{m}=\dfrac{n!}{m!(n-m)!} Cnm=m!(n−m)!n! 。
\qquad
相较于排列数,组合数并不关心数的顺序。在排列中,对于如
1
,
2
,
3
1,2,3
1,2,3 与
3
,
1
,
2
3,1,2
3,1,2 的数列,认为不同;但在组合中则认为相同。因此
n
,
m
n,m
n,m 相等的
A
n
m
A_n^m
Anm 和
C
n
m
C_n^m
Cnm ,
C
n
m
C_n^m
Cnm 应小于
A
n
m
A_n^m
Anm ,而小于的倍数便是
m
m
m 个数的全排列数。因而有:
C
n
m
=
A
n
m
m
!
=
n
!
m
!
(
n
−
m
)
!
C_n^m=\dfrac{A_n^m}{m!}=\dfrac{n!}{m!(n-m)!}
Cnm=m!Anm=m!(n−m)!n!
#2:
C
n
m
=
C
n
n
−
m
C_n^m=C_n^{n-m}
Cnm=Cnn−m 。
\qquad 在 n n n 个不同元素中选出 m m m 个元素后,剩下的 n − m n-m n−m 个元素也便唯一确定。
>> 组合数学经典模型——盒子与球
* 对于盒子与球问题的条件,这里用 ( x , y , z ) (x, y, z) (x,y,z) 表示,其中 x x x 表示球是否相同(对应 1 / 0 1/0 1/0), y y y 表示盒子是否相同(对应 1 / 0 1/0 1/0), z z z 表示是否允许有空盒(对应 1 / 0 1/0 1/0),共 2 3 = 8 2^3=8 23=8 种问题。
对于 8 8 8 中基本问题,可分为 5 5 5 类。
#1 ( 0 , 0 , 1 ) (0,0,1) (0,0,1)
\qquad 不同的球,不同的盒子,允许有空盒,此时在放每个球时,只需要考虑将它放到哪个盒子中,共有 r r r 种可能的选择,由乘法原理知问题的答案是 r n r^n rn 。
#2 ( 1 , 0 , 0 ) (1,0,0) (1,0,0)
\qquad 在组合数学中,对于集合的分划问题,可以使用“隔板法”:将 n n n 个球排成一行,在 n − 1 n-1 n−1 个间隔中加入 r − 1 r-1 r−1 块隔板,恰好将这些球分为 r r r 类,且每一类都至少有 1 1 1 个球,一个类便放在一个盒子里,从而将问题转化为插入隔板的方案数(集合分划的方案数)。共有 n − 1 n-1 n−1 个空隙可插入隔板,只需要 r − 1 r-1 r−1 个隔板便可以划分出 r r r 类,从而答案是 C n − 1 r − 1 C_{n-1}^{r-1} Cn−1r−1 。
#3 ( 1 , 0 , 1 ) (1,0,1) (1,0,1)
\qquad 这里的例子来源于 L a ˊ s z l o ˊ L o v a ˊ s z L\acute{a}szl\acute{o}\ Lov\acute{a}sz Laˊszloˊ Lovaˊsz 。对于允许空盒的情况,我们可以想象先给每一个盒子装一个“虚拟”的小球从而将此问题转化为 ( 1 , 0 , 0 ) (1,0,0) (1,0,0)。一个通俗的比喻:将 n n n 枚相同的 1 1 1 元硬币分给 r r r 个小朋友,我们在分硬币前,首先向每个小朋友借一枚 1 1 1 元硬币,就有了 n + r n+r n+r 枚硬币,再分给小朋友们,且每个小朋友至少分到一枚硬币,此时是转化成了 ( 1 , 0 , 0 ) (1,0,0) (1,0,0),只不过空隙的总数变成了 n + r n+r n+r,因此答案是 C n + r − 1 r − 1 C_{n+r-1}^{r-1} Cn+r−1r−1 。
#4a ( 0 , 1 , 0 ) (0,1,0) (0,1,0)
\qquad 4 4 4 类的特征是:集合划分问题 。
\qquad 对于球 r r r 个,盒 n n n 个的情况,最终无非就是把 r r r 个球分成 n n n 个非空集合。我们把球 r r r 个,盒 n n n 个的排列组合个数记作 S ( r , n ) S(r, n) S(r,n) 。我们把球 r r r 个,盒 n − 1 n - 1 n−1 个的排列组合个数记作 S ( r , n − 1 ) S(r, n - 1) S(r,n−1) 。我们把球 r + 1 r + 1 r+1 个,盒 n n n 个的排列组合个数记作 S ( r + 1 , n ) S(r + 1, n) S(r+1,n) 。对于 S ( r + 1 , n ) S(r + 1, n) S(r+1,n) ,我们假设在 S ( r , n ) S(r, n) S(r,n) 的基础上多加一个球并考虑有多少种情况。
\qquad 我们可以分情况讨论:
$\qquad\quad$1. 如果 r r r 个球已经放在了 n − 1 n - 1 n−1 个盒子里,那么新来的这个球单独放在了一个盒子里,这样就有 S ( r , n − 1 ) S(r, n - 1) S(r,n−1) 种方式。
$\qquad\quad$2. 如果 r r r 个球已经放在了 n n n 个盒子里了,那新来的这个球只能放到任意一个盒子里。所以有 n × S ( r , n ) n\times S(r, n) n×S(r,n) 种方式。
\qquad 综上,把两种情况的方式数加在一起(加法原理)即 S ( r + 1 , n ) = S ( r , n − 1 ) + n × S ( r , n ) S(r + 1, n) = S(r, n - 1) + n\times S(r, n) S(r+1,n)=S(r,n−1)+n×S(r,n) 。如果只有一个盒子,那答案一定是 1 1 1, 即 S ( n , 1 ) = 1 S(n, 1) = 1 S(n,1)=1 ,如果球的数量和盒子数量相等,又不能为空,肯定也只有一种方式,即 S ( i , i ) = 1 S(i, i) = 1 S(i,i)=1。这是边界条件。
#4b ( 0 , 1 , 1 ) (0,1,1) (0,1,1)
\qquad 对于 r r r 个球, n n n 个盒子。可以空的方法就比 ( 0 , 1 , 0 ) (0,1,0) (0,1,0) 中多很多了。比如全部都放在一个箱子里,或者全部都放在两个箱子里等。只要不把全部放在超过 n n n 个箱子里都是合理的。那么就有 ∑ i = 1 n S ( r , i ) \sum_{i=1}^nS(r,i) ∑i=1nS(r,i) 种方法,即把所有比 n n n 少的盒子数的排列都加载一起。
#4c ( 0 , 0 , 0 ) (0,0,0) (0,0,0)
\qquad 与 ( 0 , 1 , 0 ) (0,1,0) (0,1,0) 相似,但是这次每一个球都是不一样的, n n n 个不同的盒子的全排列是 n ! n! n! 。所以 r r r 个不同的球, n n n 个不同的盒子,不为空的排法是 S ( r , n ) × n ! S(r, n) \times n! S(r,n)×n!
#5a ( 1 , 1 , 0 ) (1,1,0) (1,1,0)
\qquad 5 5 5 类的特征是:正整数划分问题 。
\qquad 此问题其实就是对于正整数 r r r 最多分成 n n n 份的方式。记做 B ( r , n ) B(r,n) B(r,n)。先把 m m m 个盒子各自放一个球,还剩 n − m n-m n−m 个球,这些球可以放在 m m m 个盒子里,因为允许为空,所以是 B ( 1 , n − m ) + B ( 2 , n − m ) + ⋯ + B ( m , n − m ) B(1,n-m) + B(2,n-m) + \cdots +B(m,n-m) B(1,n−m)+B(2,n−m)+⋯+B(m,n−m) 。得 B ( r , n ) = B ( 1 , n − m ) + B ( 2 , n − m ) + ⋯ + B ( m , n − m ) B(r,n)=B(1,n-m) + B(2,n-m) + \cdots +B(m,n-m) B(r,n)=B(1,n−m)+B(2,n−m)+⋯+B(m,n−m) 。
#5b ( 1 , 1 , 1 ) (1,1,1) (1,1,1)
\qquad 参照 ( 1 , 0 , 1 ) (1,0,1) (1,0,1),用虚拟小球的思想。我们先把每个盒子放上一虚拟的小球,再做按 ( 1 , 1 , 0 ) (1,1,0) (1,1,0) 处理。即将正整数 r + n r+n r+n 最多分成 n n n 份的方式。
问题代号 | 球是否相同 | 盒是否相同 | 是否允许空盒 | 答案 |
---|---|---|---|---|
( 0 , 0 , 0 ) (0,0,0) (0,0,0) | 否 | 否 | 否 | S ( r , n ) × n ! S(r,n)\times n! S(r,n)×n! |
( 0 , 0 , 1 ) (0,0,1) (0,0,1) | 否 | 否 | 是 | r n r^n rn |
( 0 , 1 , 0 ) (0,1,0) (0,1,0) | 否 | 是 | 否 | S ( r , n ) S(r,n) S(r,n) |
( 0 , 1 , 1 ) (0,1,1) (0,1,1) | 否 | 是 | 是 | ∑ i = 1 n S ( r , i ) \sum_{i=1}^nS(r,i) ∑i=1nS(r,i) |
( 1 , 0 , 0 ) (1,0,0) (1,0,0) | 是 | 否 | 否 | C n − 1 r − 1 C_{n-1}^{r-1} Cn−1r−1 |
( 1 , 0 , 1 ) (1,0,1) (1,0,1) | 是 | 否 | 是 | C n + r − 1 r − 1 C_{n+r-1}^{r-1} Cn+r−1r−1 |
( 1 , 1 , 0 ) (1,1,0) (1,1,0) | 是 | 是 | 否 | B ( r , n ) B(r,n) B(r,n) |
( 1 , 1 , 1 ) (1,1,1) (1,1,1) | 是 | 是 | 是 | B ( r + n , n ) B(r+n,n) B(r+n,n) |
(完结,比较短)