第一部分:组合数学第一章计数的基本原则一.组合数学的历史和内容1.历史:组合数学最早起源于中世纪的印度,在漫长的历史中,一直发展缓慢。
随着上一世纪计算机的出现,组合数学开始快速地发展。
近几年,由于计算机安全领域受到重视以及组合数学在计算机安全领域的应用,组合数学受到越来越多的重视。
2.内容:组合数学主要包括以下几个内容:(1)组合分析(也称为组合计数理论)(2)组合优化(包括线性规划,整数规划等)(3)组合设计(包括区组设计等)(4)组合算法(例如:搜索算法,DFS算法与分支定界法,动态规划等)*图论本是组合数学这个家族的一个主要成员,但它已成长壮大,独立成一门学科。
3. 本课程介绍的主要内容:组合计数理论二.加法原则与乘法原则1. 加法原则:设事件A有m种产生方式,事件B有n种产生方式,则“事件A 或事件B”有m+n种产生方式。
例子:大于0而小于10的偶数有4个,即:{2,4,6,8},大于0而小于10的奇数有5个,即:{1,3,5,7,9}。
则大于0而小于10的整数有:4+5=9个,即:{1,2,3,4,5,6,7,8,9}。
*如果A1,A2,⋯,A n是互不相交的有穷集,那么|A1∪A2∪⋯∪A n|=|A1|+|A2|+⋯+|A n|2.乘法原则:若事件A有m种产生方式,事件B有n种产生方式,则“事件A 与事件B”有mn种产生方式。
例1:设一个符号由两个字符组成,第一个字符有a,b,c,d,e五种方式,第二个字符有1,2,3三种方式。
则根据乘法原则,该符号具有5×3= 15种方式,即a1,b1,c1,d1,e1;a2,b2,c2,d2,e2;a3,b3,c3,d3,e3.例2:从A到B有3条不同的道路,从B到C有2条不同的道路,从A经B到C共有n=3×2=6条不同的道路。
例3:求比10000小的正整数中含有数字1的数的个数。
解:先求所有4位数中不含有数字1的个数,即求由{0,2,3,4,5,6,7,8,9} 9个数字组成的4位数的个数。
每一位都有9种出现方式,根据乘法原则,由9个数字组成的4位数个数为:9×9×9×9= 6561,其中包含0000不是正整数。
故比10000小不含数字1的4位正整数的个数=6561−1=6560.所以小于10000含有数字1的4位数个数=9999−6560=3439.第二章排列与组合一.排列与组合1.排列在n个元素的集合中选r个元素有序地安排称为一个排列(或r 排列)。
这样的排列的不同方案的数目记作P(n, r)。
例1:在5个人的一组中选3个人站成一行照相,共有多少种方案?若从5个人中选5个人站成一行照相,共有多少种方案?解:在第一个问题中,一行中的第1个人有5种选择方案,第1个人选定后,第2个人有4种选择方案,第2个人也选定后,第3个人有3种选择方案。
再由乘法原则,共有5×4×3=60种方案。
在第二个问题中,第1个人有5种方案,第2个人有4种方案,第3个人有3种方案,第4个人有2种方案,第5个人有1种方案。
共有5∙4∙3∙2∙1=120种方案。
定理2.1:如果n是一个正整数且r是一个整数满足:1≤r≤n,那么有P(n,r)=n(n−1)(n−2)⋯(n−r+1)种从n个不同元素的集合选r排列的方案数。
特别地,P(n,n)=n!。
例2:用{A, B, C, D, E, F, G, H}排列成包含子串ABC的排列方案数是多少?解:因为ABC必须出现,我们把它看作是一个单独的字符,与其它5个字母组成排列,共有P(6,6)=6!=720种排列方案。
2.组合在n个元素的集合中选r个元素构成一个子集的方案数成为n个中取r 个的组合数,记为C(n,r)或(n r),该式有时称为二项式系数 (binomial coefficient )。
n 个元素中取r 个元素组成一个无序的子集称为一个r 组合。
定理2.2:设n 是非负整数且r 是一个整数满足0≤r ≤n ,那么n 个元素的集合的r 组合数为C (n,r )=n!r!(n −r )!证明:集合的r 排列可以先从n 个元素的集合中选一个r 组合,再将选出来的r 个数作全排列。
因此,P (n,r )=C (n,r )P (r,r )因此,C (n,r )=P(n,r)P(r,r)=n!/(n−r )!r!/(r−r )!=n!r!(n−r )! 。
*上述公式不好计算。
当n 很大,而r 较小时,上述公式要算两个大数的阶乘n!和(n −r )!。
根据阶乘的定义,上式化为C (n,r )=n!r!(n −r )!=n (n −1)⋯(n −r +1)r!例3:从52张的标准纸牌中选一手5张纸牌,有多少种方案?选47张纸牌有多少种方案?解:选5张纸牌,即52中选5个的组合,方案数为C (52,5)=52!5!47!=52∙51∙50∙49∙485∙4∙3∙2∙1=2,598,960 而C (52,47)=52!47!5!=52!5!47!=C(52,5) 。
推论2.3:设n 和r 为非负整数满足0≤r ≤n ,那么C (n,r )=C(n,n −r).二.二项式系数1. 二项式定理例4:展开(x +y)3。
用组合推理而不是将3项乘出来,求展开式各项的系数。
解:因为(x +y)3=(x +y )(x +y )(x +y )。
展开后的每一项由三个和式中各取一项x 或y 组成。
其中含x 3,x 2y,xy 2,和y 3项。
其中x 3是从3个和式中各取一项x 构成,共有1项,也可以看作从3个和式中各取0项y 组成,因而系数为C(3,0)。
x 2y 为从3个和式中取1个y ,方案数为C(3,1),故它的系数为C(3,1)=3。
xy 2为从3个和式中取2个y ,方案数为C(3,2)=3。
y 3为从3个和式中取3个y ,方案数为C(3,3)=1。
故(x +y )3=C (3,0)x 3+C (3,1)x 2y +C (3,2)xy 2+C (3,3)y 3=x 3+3x 2y +3xy 2+y 3与乘出来展开后得到的公式相同。
定理2.4:(二项式定理)设x 和y 是变量,n 是非负整数,那么(x +y)n =∑(n j )n j=0x (n−j)y j=(n 0)x n +(n 1)x n−1y 1+(n 2)x n−2y 2+⋯+(n n)y n 。
2.几个组合等式推论2.5:设n 是非负整数,那么∑(n k )n k=0=2n 。
证明:由二项式定理,令x=y=1,有2n =(x +y)n =∑(n k )n k=01k 1n−k =∑(n k )n k=0 。
证明2:(组合证明)一个有n 个元素的集合S 中有2n 个不同子集,共有(n 0)个0个元素的子集,(n 1)个1个元素的子集,(n 2)个2个元素的子集,⋯,及(n n )个n 个元素的子集。
所有子集的个数为 ∑(n k)n k=0=2n 。
推论2.6:设n 为正整数,那么∑(−1)k (n k)=0n k=0 。
证明:令x =1,y =−1, 由二项式定理0=0n =(1+(−1))n =∑(n k )n k=0(−1)k 1n−k =∑(−1)k (n k)n k=0 。
*推论2.6蕴含: (n 0)+(n 2)+(n 4)+⋯=(n 1)+(n 3)+(n 5)+⋯ 推论2.7:设n 为非负整数,那么∑2k (n k)=3n n k=0 。
证明:由二项式定理,令x =1,y =2,有3n =(1+2)n=∑(n k )n k=01n−k 2k =∑2k (n k )n k=0 。
推论2.8:设n 为正整数,那么∑k (n k )n k=1=(n 1)+2(n 2)+3(n 3)+⋯+n (n n)=n ∙2n−1 。
证明:由二项式定理,令x=1,有(1+y)n =∑(n k )y k n k=0, 公式两边对y 求导,得n(1+y)n−1=∑k (n k)n k=1y k−1 用y=1代入上式,得∑k (n k)n k=1=n(1+1)n−1=n ∙2n−1 。
三.帕斯卡等式和三角定理2.9:(Pascal 等式)设n 和k 为正整数满足n ≥k ,那么(n +1k)=(n k )+(n k −1) 证明:假设T 是包含n+1个元素的集合,a 是T 中某一个元素,设 S =T −{a}。
T 中有(n +1k)个子集包含k 个元素,T 中任意一个有k 个元素的子集,或者包含a 以及S 中的k −1个元素,或者包含S 中的k 个元素,不包含a 。
因为S 中有(n k −1)个k −1个元素的子集,因此,T 中有(n k −1)个子集包含a ,另外,T 中有(n k)个子集包含k 个元素但不包含a ,因此,(n +1k )=(n k )+(n k −1) *用组合公式(n r)=n!r!(n−r )!也可证上述公式。
*用Pascal 等式和初始条件(n 0)=(n n)=1,可以递归地计算组合公式,这个递归公式只需要用加法,而不需要用乘法就可以计算。
*Pascal 等式是用一个三角对二项式系数进行几何安排的基础。
四.其它一些二项式系数的等式定理2.10:(Vandermonde 等式) 设m, n 和r 是非负整数,满足r 不大于m 和n 中任何一个。
那么(m +n r)=∑(m r −k )r k=0(n k ) 证明:假设在集合A 中有m 项,在集合B 中有n 项,那么在两个集合中共取r 个元素的组合数是(m +n r),取r 个元素的另一种方式是在A 中取r −k 个元素,在B 中取k 个元素,由乘法原则,这有 (m r −k )(n k)种取法,而k 可取0,1,⋯,r 中任一值,由加法原则,可得 (m +n r )=∑(m r −k )(n k )rk=0 这就证明了该等式。
推论2.11:如果n 是非负整数,那么(2n n )=∑(n k )2nk=0 证明:由Vandermonde 等式,取m =r =n ,有(2n n)=∑(n n −k )(n k )n k=0=∑(n k )2nk=0 其中用到等式(n n −k )=(n k )。
定理2.12:设n 和r 是非负整数,满足r ≤n 。
那么(n +1r +1)=∑(j r )nj=r 证明:我们使用组合证明。
左边的公式(n +1r +1)计算有r +1个1,长度为n+1的0,1串的个数。
我们证明右边的公式计算同样的对象的个数。
考虑最后一个1的位置在r +1,r +2,⋯,n +1位时,最后一个1的前k −1位含r 个1的组合数,而k 可取r +1,r +2,⋯,n +1。