来源:https://usaco.guide/CPH.pdf#page=217
概述
组合数学研究的是:如何对对象的组合进行计数,通常的目标是为了高效地计算出组合的个数,而不用单独生成每一个组合。
例如,考虑将一个正整数n拆分成≤n的正整数的和的方法个数(不同顺序视作不同方法),例如,对于4来说,有8种方法:
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 1+3
- 2+2
- 3+1
- 4
组合问题往往能够使用递归函数解决,例如上述问题,我们可以使用f(n)来代表拆分方法的个数,例如f(4)=8,f(n)可以使用如下公式递归计算得到
f(n)={1,1+f(1)+...+f(n−1),n=1n>1
上述公式的含义是,如果选k作为第一个数,则剩下有f(n−k)种拆分方法。
有时候,递归的公式有闭合形式的表示方式,例如该问题的闭合形式为f(n)=2n−1,因为n个1之间有n−1个位置可以选择放+号或者不放,没有+号分割的1连起来作为一个单独的正整数
二项式系数 Binomial coefficients
二项式系数(kn)的值等于从n个元素的集合中选取k个元素的子集的方法数。例如(35)=10,因为从集合1,2,3,4,5种选取3个元素的子集共有10种方法:{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{1,4,5},{2,3,4},{2,3,5},{2,4,5},{3,4,5}
公式1
二项式系数可以通过以下公式递归计算:
(kn)=(k−1n−1)+(kn−1)
这个公式的直观解释是:从n个元素中选k个元素,可以分为两种情况:1.选x,然后从剩下的n−1个元素中选k−1个元素,2.不选x,然后从剩下的n−1个元素中选k个元素
上述递归公式的基值为:
(0n)=(nn)=1
因为总是有1种方法一个都不选,即空集{},同样的,总是有1种方法选取集合中的所有元素
公式2
另一种计算二项式系数的方式:
(kn)=k!(n−k)!n!
这个公式的解释是:n个元素的排列个数是n!,选择前k个元素,而前选择前k个元素的情况下,前k个元素和后n−k个元素的顺序没有影响,因此,除以k!和(n−k)!即为结果
性质
(kn)=(n−kn)
因为从n个元素中选择k个,剩下的元素个数即为n−k个,所以它们可以看成是同一种情况
二项式系数的和:
(0n)+(1n)+(2n)+...+(nn)=2n
二项式系数这个名称的由来,可以从二项式(a+b)的n次方的展开看出来:
(a+b)n=(0n)anb0+(1n)an−1b1+...+(n−1n)a1bn−1+(nn)a0bn
二项式系数也出现在杨辉三角中(帕斯卡三角),在杨辉三角中可以很明显观察到公式一的模式:(kn)=(k−1n−1)+(kn−1)
n=0∣n=1∣n=2∣n=3∣n=4∣...11111...1234...136...14...1...
盒子和球问题
盒子和球是一个非常有用的模型,我们对将k个球放到n个盒子中的方法进行计数,我们考虑3中场景
场景1: 每个盒子最多只能放一个球,例如n=5,k=2的时候,一共有10种情况,这种情况下答案就直接是二项式系数(kn)
场景2: 每个盒子中可以放多个球,例如n=5,k=2的时候,一共有15种情况
我们可以使用包含”o”和”→”的字符串来表示对应的方案,刚开始,假设我们处于最左边的盒子,”o”表示我们把一颗球放到当前的盒子中,”→”表示我们移动到右边的盒子,我们一共有k个球,最多可以移动n-1次,因此方案数为:(kk+n−1)
场景3: 每个盒子最多只能放一个球,且相邻的盒子不能都有球,即有球的盒子之间至少要有一个空盒子,例如n=5,k=2的时候,共有6种情况(n−2k+1>=0时才有可能,否则方法数为0)
我们可以这样思考,有k个球,放到k个盒子中,且k个有球的盒子之间都有一个空盒子,共k-1个空盒子,现在还剩余n-2k+1个空盒子,需要插入到k个有球的盒子之间,相当于从k+1个位置中,可以连续的选取n-2k+1个位置,相当于场景2,因此方案数为:(n−2k+1n−k+1)
也可以这样思考,除了最左边的第1个球以外,剩余的k-1个球,左边必定有一个空盒子,这k-1个球和左边的空盒子如果考虑成1个球,则相当于从n-(k-1)=n-k+1个位置中选取k个位置,相当于场景1,因此方案数为:(kn−k+1)=(n−2k+1n−k+1)
多项式系数
多项式系数可以看作是二项式系数的一般化,相当于将n个元素,划分为大小分别为k1,k2,...,km的子集,k1+k2+...+km=n,如果m=2,则下述公式就相当于是二项式系数公式。
(k1,k2,...,kmn)=k1!k2!...km!n!
220/300
例题
1. (IMO ShortList 1987-P17) A four-coloring of the set M
问题来源:https://artofproblemsolving.com/community/c6h362771p1989408
问题描述:有一个整数集合M={1,2,...,1987},用4种颜色对集合进行着色(集合中的每个数都可以是这4种颜色中的一种),证明至少存在一种着色方法,使得集合中所有长度为10的等差数列,都至少有2种颜色,也就是说集合中不存在长度为10的等差数列只有一种颜色
证明:长度为10的等差数列中,任意的着色方法一共有410种,其中4种是10个数颜色都是相同颜色的着色方法,因此,长度为10的等差数列只有一种颜色的概率为4104=491;
设M中长度为10的等差数列一共有A个,长度为10的等差数列只有一种颜色的数列个数的期望是E1=49A,因为只有一种颜色的等差数列的个数只能是整数,所以如果E1<1,则说明存在概率使得只有一种颜色的等差数列的个数为0;
现在来求A的个数,设等差数列的第一个数为k,则该数列的间隔d的范围是:1≤d≤91987−k,即如果等差数列的第一个数是k,则d有91987−k种值可取,因此A=∑k=11987−9⌊91987−k⌋=∑k=11978⌊91987−k⌋<91986+1985+...+9=9(9+1986)∗1978/2=181978∗1995=219,22831<49=262,144,因此E1<1,存在概率使得只有一种颜色的等差数列的个数为0,也就是说存在着色方法使得集合中不存在长度为10的等差数列只有一种颜色