介绍
组合数,也就是形如 C n m C_n^m Cnm 这样的东西。
写法(据我所知)有三种: C n m = C ( n , m ) = ( n m ) C_n^m=C(n,m)={n\choose m} Cnm=C(n,m)=(mn)。
定义为:表示在 n n n 个不同的物品里面选 m m m 个物品的方案数。
递推式
C n m = C n − 1 m − 1 + C n − 1 m C_n^m=C_{n-1}^{m-1}+C_{n-1}^m Cnm=Cn−1m−1+Cn−1m
从 n n n 个里面选 m m m 个,那么对于第 n n n 个物品,有两种情况:
- 选他,那么方案数就是从另外 n − 1 n-1 n−1 个里面选 m − 1 m-1 m−1 个
- 不选他,那么方案数就是从另外 n − 1 n-1 n−1 个里面选 m m m 个。
显然,边界为: C n n = 1 C_n^n=1 Cnn=1。
通项式
C n m = n ! m ! ( n − m ) ! C_n^m=\frac {n!} {m!(n-m)!} Cnm=m!(n−m)!n!
依然考虑意义。
对于这 n n n 个物品,我不知道它的顺序,假定给它一个顺序,然后我们固定取前 m m m 个物品。
那么这 n n n 个物品的排列方案数为 n ! n! n!,对于前 m m m 个物品,他们之间交换顺序是同一种方案,所以要去重,除以 m ! m! m!,以及另外的 n − m n-m n−m 个物品之间交换顺序也是相同的方案,所以还要除以 ( n − m ) ! (n-m)! (n−m)!。
证明
这里证明一下递推式与通项式等价。
C
n
m
=
C
n
−
1
m
−
1
+
C
n
−
1
m
n
!
m
!
(
n
−
m
)
!
=
(
n
−
1
)
!
(
m
−
1
)
!
(
n
−
m
)
!
+
(
n
−
1
)
!
m
!
(
n
−
m
−
1
)
!
n
!
m
!
(
n
−
m
)
!
=
(
n
−
1
)
!
m
!
(
n
−
m
−
1
)
!
+
(
n
−
1
)
!
(
m
−
1
)
!
(
n
−
m
)
!
(
m
−
1
)
!
(
n
−
m
)
!
m
!
(
n
−
m
−
1
)
!
n
!
m
!
(
n
−
m
)
!
=
n
!
(
m
!
(
n
−
m
−
1
)
!
+
(
m
−
1
)
!
(
n
−
m
)
!
)
n
(
m
−
1
)
!
(
n
−
m
)
!
m
!
(
n
−
m
−
1
)
!
1
=
m
!
(
n
−
m
−
1
)
!
+
(
m
−
1
)
!
(
n
−
m
)
!
n
(
m
−
1
)
!
(
n
−
m
−
1
)
!
\begin{aligned} C_n^m&=C_{n-1}^{m-1}+C_{n-1}^m\\ \frac {n!} {m!(n-m)!}&=\frac {(n-1)!} {(m-1)!(n-m)!} +\frac {(n-1)!} {m!(n-m-1)!}\\ \frac {n!} {m!(n-m)!}&=\frac {(n-1)!m!(n-m-1)!+(n-1)!(m-1)!(n-m)!} {(m-1)!(n-m)!m!(n-m-1)!}\\ \frac {n!} {m!(n-m)!}&=\frac {n!(m!(n-m-1)!+(m-1)!(n-m)!)} {n(m-1)!(n-m)!m!(n-m-1)!}\\ 1&=\frac {m!(n-m-1)!+(m-1)!(n-m)!} {n(m-1)!(n-m-1)!} \end{aligned}
Cnmm!(n−m)!n!m!(n−m)!n!m!(n−m)!n!1=Cn−1m−1+Cn−1m=(m−1)!(n−m)!(n−1)!+m!(n−m−1)!(n−1)!=(m−1)!(n−m)!m!(n−m−1)!(n−1)!m!(n−m−1)!+(n−1)!(m−1)!(n−m)!=n(m−1)!(n−m)!m!(n−m−1)!n!(m!(n−m−1)!+(m−1)!(n−m)!)=n(m−1)!(n−m−1)!m!(n−m−1)!+(m−1)!(n−m)!
设
a
=
m
,
b
=
n
−
m
a=m,b=n-m
a=m,b=n−m,那么柿子变成:
1
=
a
!
(
b
−
1
)
!
+
(
a
−
1
)
!
b
!
(
a
+
b
)
(
a
−
1
)
!
(
b
−
1
)
!
1
=
(
a
−
1
)
!
(
b
−
1
)
!
a
+
(
a
−
1
)
!
(
b
−
1
)
!
b
(
a
+
b
)
(
a
−
1
)
!
(
b
−
1
)
!
1
=
(
a
−
1
)
!
(
b
−
1
)
!
(
a
+
b
)
(
a
+
b
)
(
a
−
1
)
!
(
b
−
1
)
!
1
=
1
\begin{aligned} 1&=\frac {a!(b-1)!+(a-1)!b!} {(a+b)(a-1)!(b-1)!}\\ 1&=\frac {(a-1)!(b-1)!a+(a-1)!(b-1)!b} {(a+b)(a-1)!(b-1)!}\\ 1&=\frac {(a-1)!(b-1)!(a+b)} {(a+b)(a-1)!(b-1)!}\\ 1&=1\\ \end{aligned}
1111=(a+b)(a−1)!(b−1)!a!(b−1)!+(a−1)!b!=(a+b)(a−1)!(b−1)!(a−1)!(b−1)!a+(a−1)!(b−1)!b=(a+b)(a−1)!(b−1)!(a−1)!(b−1)!(a+b)=1
得证。
经典例子
例1
将一个长度为 n n n 的序列分成 m m m 段的方案数,每段不允许为空。
这是组合数的一个经典应用,要用到一个经典的转化——插板法。
比如说,你将这个序列分成这样两段:
这相当于往这两段中间的那个位置插一块板子,就是这样:
那么现在我们需要将这个序列分成 m m m 段,相当于要插 m − 1 m-1 m−1 块板子,并且不能有两个板子插在相同的位置,因为他要求每段不能为空。这个序列的长度为 n n n,所以一共有 n − 1 n-1 n−1 个空隙可以插,所以方案数为 C n − 1 m − 1 C_{n-1}^{m-1} Cn−1m−1。
例2
讲一个长度为 n n n 的序列分成 m m m 段的方案数,允许段为空。
允许为空?怎么搞?
我们考虑往这个长度为
n
n
n 的序列里面再加
m
m
m 个物品进去,一共就有
n
+
m
n+m
n+m 个物品。我们定义,这
m
m
m 个物品的意义为空
。
暂且不管这
m
m
m 个物品放在哪里,当我们用插板法将这个长度为
n
+
m
n+m
n+m 的序列分成
m
m
m 份时,我们不妨设,这
m
m
m 份里面每一份都有一个物品是空
,那么对于只有一个物品的段,这一段也就是空
了,这样就解决了允许段为空的情况。
所以答案为 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m−1m−1。
常用的性质
1、 C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnn−m
从 n n n 个里面选 m m m 个,那么剩下的 n − m n-m n−m 个就是不选的,那么问题自然等价于从 n n n 个里面找 n − m n-m n−m 个不选的。
2、 C n m C m k = C n k C n − k m − k C_n^mC_m^k=C_n^kC_{n-k}^{m-k} CnmCmk=CnkCn−km−k
从 n n n 里面选 m m m 个,再从 m m m 个里面选 k k k 个,我们不妨称这两个为两次筛选,有 m m m 个通过了第一次筛选,有 k k k 个通过了第二次筛选。
那么这等价于从 n n n 个里面直接选 k k k 个通过了第二次筛选的,乘以从剩下的 n − k n-k n−k 个里面选 m − k m-k m−k 个通过了第一次筛选而没有通过第二次筛选的。
3、 ∑ i = 0 n C n i = 2 n \sum_{i=0}^n C_n^i=2^n ∑i=0nCni=2n
左边的柿子表示从 n n n 个里面选若干个的方案数,那么每个物品有选和不选 2 2 2 种状态,所以总方案数为 2 n 2^n 2n。
4、范德蒙恒等式
组合数的应用很广,很多东西里面都有它的身影。比如说二项式定理呀、二项式反演呀、卡特兰数呀……
这个东西就是学习组合数学的基石了,尽早掌握很重要。
安利:数论基础