组合数学详解

组合数学

1 基本概念

1. 加法原理和乘法原理

有4个基本的计数原理:加法原理、乘法原理、除法原理、减法原理。下面介绍加法原理和乘法原理。
(1) 加法原理:设集合S划分为S1,S2,⋯ ,SmS_{1},S_{2},\cdots,S_{m}S1,S2,,Sm,则S的元素个数可以通过找出它的每部分元素的个数来确定,即∣S∣=∣S1∣+∣S2∣+⋯+∣Sm∣|S| = |S_{1}| + |S_{2}| + \cdots + |S_{m}|S=S1+S2++Sm 。通俗地说,一件事可以用mmm类不同的方法完成,其中第iii类有aia_{i}ai种不同的方法,则总方法数为a1+a2+⋯+ama_{1}+a_{2}+\cdots+a_{m}a1+a2++am 。加法原理是全体等于部分和的公式化描述。在加法原理中,如果集合S1,S2,⋯ ,SmS_{1},S_{2},\cdots,S_{m}S1,S2,,Sm可以重叠,就是容斥原理。
(2) 乘法原理:令S是元素的序偶(a,b)(a, b)(a,b)的集合,其中第111个元素aaa来自大小为ppp的一个集合,而对于aaa的每个选择,元素bbbqqq种选择,则SSS的大小为p×qp×qp×q。乘法原理是加法原理的推论,因为整数的乘法就是重复的加法。例如,从8男7女5儿童中选出一男一女一儿童的方法有8×7×5=2808×7×5 = 2808×7×5=280种。

2. 排列

排列是有序的,把nnn个元素的集合SSS的一个rrr排列理解为nnn个元素中的rrr个元素的有序摆放。
(1) 不可重复排列数 :从nnn个不同的物品中不重复地取出rrr个,排列数Pnr=n(n−1)(n−2)⋯(n−r+1)=n!(n−r)!P_{n}^{r}=n(n - 1)(n - 2)\cdots(n - r + 1)=\frac{n!}{(n - r)!}Pnr=n(n1)(n2)(nr+1)=(nr)!n!
(2) 可重复排列数:从nnn个不同的物品中可重复地取出rrr个,排列数为nrn^{r}nr
例如,对26个字母排序,要求5个元音字母中的任意两个不能连续出现,问有多少种排序方法?
首先21个辅音字母排序,有21!(21−21)!=21!\frac{21!}{(21 - 21)!}=21!(2121)!21!=21!(0!=1)(0!=1)(0!=1),然后把元音字母插到这21个辅音字母之间,有22个位置可以插,等价于从22个物品中选出5个,有22!(22−5)!=22!17!\frac{22!}{(22 - 5)!}=\frac{22!}{17!}(225)!22!=17!22!种方法;最后根据乘法原理,两个步骤相乘,得出有21!×22!17!21!×\frac{22!}{17!}21!×17!22!种方法。
上面的排列是线性的,所有元素排成一条线。如果不是排成一条线,而是一个圆,由于产生了循环,那么排列的数量要减少。如果把这个圆排列拆成线性排列,可以从任意位置拆开。
(3) 圆排列(循环排列,环排列)的排列数:从nnn个元素中选rrr个的圆排列的排列数为Pnrr=n!r(n−r)!\frac{P_{n}^{r}}{r}=\frac{n!}{r(n - r)!}rPnr=r(nr)!n!

3.组合

排列是有序的,组合是无序的,把nnn个元素的集合SSSrrr组合理解为从SSSnnn个元素中 对rrr个元素的无序选择,即rrrSSS的一个子集。 如果SSS中的元素都不相同,组合数Cnr=(nr)=Pnrr!=n!r!(n−r)!C_{n}^{r}=\binom{n}{r}=\frac{P_{n}^{r}}{r!}=\frac{n!}{r!(n - r)!}Cnr=(rn)=r!Pnr=r!(nr)!n! ,注意这里的符号,组合数的表示有两种常用符号:CnrC_{n}^{r}Cnr(nr)\binom{n}{r}(rn),其中CnrC_{n}^{r}Cnrnnn在下面,(nr)\binom{n}{r}(rn)nnn在上面。

例如,平面上的20个点,没有3个点共线。问这些点能确定多少条直线?能确定多少个三角形?

任意两点确定一条直线,即n=20n = 20n=20r=2r = 2r=2Cnr=(nr)=20!2!(20−2)!=190C_{n}^{r}=\binom{n}{r}=\frac{20!}{2!(20 - 2)!}=190Cnr=(rn)=2!(202)!20!=190;任意3点确定一个三角形,Cnr=(203)=20!3!(20−3)!=1140C_{n}^{r}=\binom{20}{3}=\frac{20!}{3!(20 - 3)!}=1140Cnr=(320)=3!(203)!20!=1140

组合数有3个重要性质。

(1)Cnr=Cnn−rC_{n}^{r}=C_{n}^{n - r}Cnr=Cnnr 。从nnn个元素中拿出rrr个,等价于从nnn个元素中丢掉n−rn - rnr个。

(2)Cnr=Cn−1r+Cn−1r−1C_{n}^{r}=C_{n - 1}^{r}+C_{n - 1}^{r - 1}Cnr=Cn1r+Cn1r1 ,称为帕斯卡公式。可以用DP思路证明,取或不取第nnn个元素:若取第nnn个元素,则在剩下的n−1n - 1n1个元素中选r−1r - 1r1个;若不取第nnn个元素,则在剩下的n−1n - 1n1个元素中选rrr个。这个性质很有用,需要计算CnrC_{n}^{r}Cnr时,为避免阶乘计算,可利用这个递推关系。这个性质也用于构造帕斯卡三角(杨辉三角)。

(3)Cn0+Cn1+Cn2+⋯+Cnn=2nC_{n}^{0}+C_{n}^{1}+C_{n}^{2}+\cdots +C_{n}^{n}=2^{n}Cn0+Cn1+Cn2++Cnn=2n 。这个表达式体现了组合数与二进制的关系,竞赛时常常用到。一个nnn位的二进制数,其数值范围为0~2n−10~2^{n}-102n1,共有2n2^{n}2n个,每个二进制数就是一种组合。例如,n=4n = 4n=4r=2r = 2r=2 ,有C42=6C_{4}^{2}=6C42=6种组合,对应二进制数:0011、0101、0110、1001、1010、1100。

计算CnrC_{n}^{r}Cnr的方法有多种,见第3节“二项式定理和杨辉三角”。

4. 多重集的排列和组合

如果SSS中的元素可以相同,称为多重集,如S={ 5×a,7×b,4×c}S = \{5×a, 7×b, 4×c\}S={ 5×a,7×b,4×c} 。下面给出多重集的排列和组合的定义。

(1) 无限多重集的排列:令SSS是一个多重集,它有kkk个不同的元素,每个元素都有无穷重复个数,那么SSSrrr排列的个数为krk^{r}kr

(2) 有限多重集的排列:令SSS是一个多重集,它有kkk个不同的元素,每个元素的重数分别为n1,n2,⋯ ,nkn_{1},n_{2},\cdots,n_{k}n1,n2,,nkSSS的大小为n=n1+n2+⋯+nkn = n_{1}+n_{2}+\cdots +n_{k}n=n1+n2++nk ,则SSSnnn排列的个数为n!n1!n2!⋯nk!\frac{n!}{n_{1}!n_{2}!\cdots n_{k}!}n1!n2!nk!n!

(3) 有限多重集的组合:令SSS是一个多重集,它有kkk个不同的元素,每个元素都有无穷重复个数,那么SSSrrr组合的个数为Cr+k−1r=(r+k−1r)=Cr+k−1k−1=(r+k−1k−1)C_{r + k - 1}^{r}=\binom{r + k - 1}{r}=C_{r + k - 1}^{k - 1}=\binom{r + k - 1}{k - 1}Cr+k1r=(rr+k1)=Cr+k1k1=(k1r+k1)

【习题】 洛谷P2822/P5520/P3197/P2290/P4931/P5596。

2 鸽巢原理

鸽巢原理(Pigeonhole Principle),也称为抽屉原理(Drawer Principle),是很基本的组合原理。鸽巢原理的生活原型是n+1n + 1n+1只鸽子住在nnn个巢里,那么至少有一个巢里有两只或更多鸽子。稍微推广一下,k×n+1k×n + 1k×n+1只鸽子住在nnn个巢里,那么至少有一个巢里有k+1k + 1k+1只或更多鸽子。
有简单形式和加强形式的鸽巢原理。另外,鸽巢原理是Ramsey定理的一个特例。

1. 鸽巢原理的简单形式

鸽巢原理的简单形式:把n+1n + 1n+1个物体放进nnn个盒子,至少有一个盒子包含两个或更多的物体。
鸽巢原理的题目可以用“抽屉法”或“隔板法”来思考。竞赛题常常与整数求余结合,把余数用抽屉来处理。下面给出一些例子。
(1) 370人中,至少有两人的生日相同。
题解:把365天分成365个抽屉,那么把365人放进365个抽屉后,剩下的人不管放进哪个抽屉,里面都已经有人了。
(2)nnn个人,认识的人互相握手,至少有两个人握手次数相同。
题解:每人跟其他人握手,最少可以是0次,最多可以是n−1n - 1n1次。
如果握手最少的张三握手0次,那么剩下的n−1n - 1n1人中,握手最多的人不会超过n−2n - 2n2次。0~n−20~n - 20n2共有n−1n - 1n1种情况。
如果握手最少的张三握手1次,那么剩下的n−1n - 1n1人中,握手最多的李四除了跟张三握手一次,跟其他n−2n - 2n2人最多握手n−2n - 2n2次,李四最多握手n−1n - 1n1次。1~n−11~n - 11n1,共有n−1n - 1n1种情况。
如果握手最少的张三握手两次,那么剩下的n−1n - 1n1人中,握手最多的李四除了跟张三握手一次,跟其他n−2n - 2n2人最多握手n−2n - 2n2次,李四最多握手n−1n - 1n1次。2~n−12~n - 12n1,共有n−2n - 2n2种情况。
……
所以,握手次数最多有n−1n - 1n1种情况,最少只有一种情况。把最多的n−1n - 1n1种情况看成n−1n - 1n1个抽屉,nnn个人放进这n−1n - 1n1个抽屉,至少有一个抽屉里面有两人。
(3) 有KKK种糖果,给出每种糖果的数量;要求不能连续两次吃同样的糖果,问有没有可行的吃糖方案。
题解:找出最多的一种糖果,把它的数量NNN看作NNN个隔板(或抽屉),隔成NNN个空间(把每个隔板的右边看成一个空间);其他所有糖果的数量为SSS
S<N−1S < N - 1S<N1,把sss个糖果放到隔板之间,这NNN个隔板不够放,必然至少有两个隔板之间没有糖果,由于这两个隔板是同一种糖果,所以无解。
S≥N−1S≥N - 1SN1时,肯定有解。其中一个解是:把SSS个糖果按顺序排成一个长队,其中同种类的糖果放在一起,然后每次取NNN个糖果,按顺序一个一个地放进NNN个空间。由于隔板数量比每种糖果的数量都多,所以不可能有两个同样的糖果被放进一个空间里。把sss个糖果放完,就是一个解,一些隔板里面可能放好几种糖果。
(4) 任意5个自然数,其中必有3个数的和能被3整除。
题解:任何数除以3,余数可以是0、1、2。造3个抽屉,分别表示3种余数的情况。把5个数按余数放进3个抽屉。
若5个数分布在3个抽屉里,那么从3个抽屉中各取一个,其和能被3整除。
若5个数只分布在两个抽屉里,那么至少有一个抽屉里有3个数,取出这3个数,其和能被3整除。
若5个数全部在一个抽屉里,任取3个数,其和肯定被3整除。
(5) 任意7个不同的自然数,其中必有两个整数的和或差是10的倍数。
题解:这些数除以10,余数为0 - 9,造10个抽屉分别表示10种余数的情况。然后,把6、7、8、9这4个抽屉分别与4、3、2、1这4个抽屉合并,保持原来的0、5抽屉不变,得到新的6个抽屉。那么,至少有一个抽屉里面有两个数,它们的和或差是10的倍数。
(6) poj 2356。

例1 Find a multiple(poj 2356)
问题描述:输入nnn个正整数,n≤10000n≤10000n10000。每个数都不大于150001500015000,可能相同。从中找出一些数,使它们的和是nnn的倍数。
输入:第111行输入整数nnn;后面nnn行中,每行输入一个整数。
输出:如果无解,输出000。如果有解,第1行打印数字的数量,后面每行打印出一个数字,顺序任意。如果有多个解,随便打印一个解。
先求出这nnn个数的前缀和sum[1],sum[2],⋯ ,sum[n]sum[1],sum[2],\cdots,sum[n]sum[1],sum[2],,sum[n],如果其中有nnn的倍数,直接输出。
如果这nnn个前缀和都不是nnn的倍数,把这些前缀和对nnn求余,余数为1~n−11~n - 11n1,共n−1n - 1n1个,用n−1n - 1n1个抽屉表示这n−1n - 1n1个余数。把nnn个前缀和放进这n−1n - 1n1个抽屉,必然有一个抽屉中有两个前缀和。这两个前缀和相减,得到一个区间,就是答案。
poj 3370是一道类似的题目。

2. 鸽巢原理的加强形式

鸽巢原理的简单形式是加强形式的特例。
鸽巢原理的加强形式:令q1,q2,⋯ ,qnq_{1},q_{2},\cdots,q_{n}q1,q2,,qn为正整数,如果将q1+q2+⋯+qn−n+1q_{1}+q_{2}+\cdots+q_{n}-n + 1q1+q2++qnn+1个物体放入nnn个盒子,那么,或者第1个盒子至少含有q1q_{1}q1个物体,或者第2个盒子至少含有q2q_{2}q2个物体,……或者第nnn个盒子至少含有qnq_{n}qn个物体。
例如,一个篮子里面有苹果、香蕉、梨,保证篮子里或者至少有8个苹果,或者至少有6个香蕉,或者至少有9个梨。问放进篮子的最少水果数量是多少?
题解:根据加强形式,无论如何选择,8+6+9−3+1=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值