组合数学.docx
《组合数学.docx》由会员分享,可在线阅读,更多相关《组合数学.docx(77页珍藏版)》请在冰豆网上搜索。
![组合数学.docx](https://file1.bdocx.com/fileroot1/2023-3/1/5a65b217-6460-4011-9e6d-5d698bc2c115/5a65b217-6460-4011-9e6d-5d698bc2c1151.gif)
组合数学
注:
以下文字中蓝色字(以/*和*/括起)表示注解;绿色字指出应插入的动画或图片等教学形式;其他颜色表示强调。
前言
组合数学是一个古老而又年轻的数学分支。
据传说,大禹在4000多年前就观察到神龟背上的幻方
幻方可以看作是一个3阶方阵,其元素是1到9的正整数,每行、每列以及两条对角线的和都是15。
算法演示第2页
贾宪北宋数学家(约11世纪)著有《黄帝九章细草》、《算法斅古集》斅(音'笑')(“古算法导引”)都已失传。
杨辉著《详解九章算法》(1261年)中曾引贾宪的“开方作法本源”图(即指数为正整数的二项式展开系数表,现称“杨辉三角形”)和“增乘开方法”(求高次幂的正根法)。
前者比帕斯卡三角形早600年,后者比霍纳(WilliamGeogeHorner,1786—1837)的方法(1819年)早770年。
1666年莱布尼兹所著《组合学论文》一书问世,这是组合数学的第一部专著。
书中首次使用了组合论(Combinatorics)一词。
组合数学的蓬勃发展则是在计算机问世和普遍应用之后。
由于组合数学涉及面广,内容庞杂,并且仍在很快地发展着,因而还没有一个统一而有效的理论体系。
这与数学分析形成了对照。
●本学期主要讲组合分析(计数和枚举)以及组合优化的一部分(线性规划的单纯形解法)。
●组合分析是组合算法的基础。
组合数学经常使用的方法并不高深复杂。
最主要的方法是计数时的合理分类和组合模型的转换。
但是,要学好组合数学并非易事,既需要一定的数学修养,也要进行相当的训练。
第一章排列组合
【学习目标】
在这一章我们要用加法法则和乘法法则解决最基本的几种组合模型,包括排列、组合的计数问题。
我们还要讨论几种排列的生成算法和一种组合的生成算法。
我们要证明若干基本的组合恒等式,使用几种不同的证明方法。
尤其要讨论如何使用基本的组合模型来证明组合恒等式。
我们要特别注意如何利用合理分类和组合模型的转换进行组合计数。
我们还要利用已有的微积分的知识给出阶乘的用初等函数表示的近似估值公式。
在这一章中讨论基本的组态(满足一定条件的优先集合的安排)的计数问题。
在本课程中我们通俗的将组态称为组合模型。
我们将由易到难、由浅入深、由此及彼逐步展开对各种组合模型的计数的讨论。
【学习指南】合理分类及组合模型的转换是组合计数的基本方法。
我们要处处注意、深入体会如何运用这两个基本的方法。
【难重点】多重排列;多项式系数与排列的生成算法,相关的中介数概念;各种球放入盒子的模型;可重组合;用组合模型证明组合等式。
【知识点】加法法则,乘法法则,排列,组合,可重排列,圆排列,项链排列,多重排列,多项式系数,二项式系数,排列的生成算法,字典序法,递增进位制数法,递减进位制数法,邻位对换法,中介数,序号,组合的生成算法,可重组合,组合恒等式,组合模型转换,Wallis公式,递推关系,Stirling近似公式。
【学习内容】
1.1加法法则与乘法法则
加法法则设事件A有m种产生方式,事件B有n种产生方式,则事件A或B之一有m+n种产生方式。
集合论语言:
若|A|=m,|B|=n,A∩B=φ,则|A∪B|=m+n。
/*
例某班选修企业管理的有18人,不选的有10人,则该班共有18+10=28人。
例北京每天直达上海的客车有5次,客机有3次,则每天由北京直达上海的旅行方式有5+3=8种。
*/
乘法法则设事件A有m种产生式,事件B有n种产生方式,则事件A与B有m·n种产生方式。
集合论语言:
若|A|=m,|B|=n,A×B={(a,b)|a∈A,b∈B},则|A×B|=m·n。
/*
例某种字符串由两个字符组成,第一个字符可选自{a,b,c,d,e},第二个字符可选自{1,2,3},则这种字符串共有5×3=15个。
例从A到B有三条道路,从B到C有两条道路,则从A经B到C有3×2=6条道路。
例某种样式的运动服的着色由底色和装饰条纹的颜色配成。
底色可选红、蓝、橙、黄,条纹色可选黑、白,则共有4×2=8种着色方案。
若此例改成底色和条纹都用红、蓝、橙、黄四种颜色的话,则方案数就不是4×4=16,而只有4×3=12种。
在乘法法则中要注意事件A和事件B的相互独立性。
例1)求小于10000的含1的正整数的个数2)求小于10000的含0的正整数的个数
1)小于10000的不含1的正整数可看做4位数,但0000除外.故有9×9×9×9-1=6560个.含1的有:
9999-6560=3439个
另:
全部4位数有104个,不含1的四位数有94个,含1的4位数为两个的差:
104-94=3439个
2)“含0”和“含1”不可直接套用。
0019含1但不含0。
在组合的习题中有许多类似的隐含的规定,要特别留神。
不含0的1位数有9个,2位数有92个,3位数有93个,4位数有94个
不含0小于10000的正整数有9+92+93+94=(95-9)/(9-1)=7380个
含0小于10000的正整数有9999-7380=2619个
*/
1.2排列与组合
在本节中我们要用加法法则和乘法法则解决一系列关于排列、组合的计数问题。
我们将从中学数学中已经出现的最简单的排列、组合讲起。
课前思考题
1.从a,b,c3个字母中取2个做排列,能有几个不同的排列?
把它们列举出来。
这些排列是ab,ac,ba,bc,ca,cb,一共有6个。
2.从a,b,c3个字母中取两个做组合,即不考虑它们的顺序,例如ab与ba看作是相同的,这样的安排是ab,ac,bc,一共有3个。
上面的问题都是我们在中学数学中熟悉的。
我们先来温习几个相应的定义。
定义1.2.1
从n个不同的元素中,取r个不重复的元素,按次序排成一列,称为从n个元中取r个元的(无重)排列。
这些排列的全体组成的集合用P(n,r)表示。
排列的个数用P(n,r)表示。
当r=n时,称为全排列。
一个排列也可看作一个字符串,r也称为排列或字符串的长度。
/*
一般不说可重意即无重。
*/
在上述定义中,一个排列的第1位有n个选择,第2位有(n-1)个选择,第k位有(n-k+1)个选择,故P(n,r)=n(n-1)…(n-r+1)。
/*
从a,b,c3个字母中取2个做排列,可用一棵树表示:
*/
记
,称为n下r阶乘。
与此相应的,
记
,称为n上r阶乘。
显然,P(n,r)
/*
定义0!
=1,P(n,n)
=n!
上述(无重)排列的计数相当于将r个不同的球(将r个球编为1号到r号)放入n个不同的盒子,每盒最多一个球的方案数。
*/
定义1.2.2
从n个不同元素中,取r个不重复的元素,不考虑其次序,构成一个子集,称为从n个元中取r个元的(无重)组合。
这些组合的全体组成的集合用C(n,r)表示,组合的个数用C(n,r)或
表示。
用C(n,r)中的一个组合中的元素作全排列,有r!
个。
于是
C(n,r)•r!
=P(n,r)
故C(n,r)
/*
从a,b,c3个字母中取2个做组合,每个组合对应2!
个排列:
ab:
ab,ba;ac:
ac,ca;bc:
bc,cb。
组合的计数相当于将r个相同的球放入n个不同的盒子里,每盒最多一个球的方案数。
*/
定义1.2.3
从n个不同的元素中,取r个可重复的元素,按次序排成一列,称为从n个元中取r个元的可重排列。
这些排列的全体组成的集合,用
表示。
排列的个数用
表示。
因这样的可重排列的每一位都有n个选择,共有r位。
故
=nr。
/*
从a,b,c3个字母中取2个做排列,可用一棵树表示:
*/
定义1.2.4
将r1个x1,r2个x2,…,rk个xk按次序排成一列,称为一个(r1,r2,…,rk)多重排列。
设
,这些排列的全体组成的集合,用
表示。
这些排列的个数用
表示。
/*
2个a,1个b做多重排列,若将2个a看成是不同的(给它们加下标),可有(2+1)!
(=6)个排列:
a1a2b,a1ba2,a2a1b,a2ba1,ba1a2,ba2a1。
但下标实际上是不存在的:
故实际的多重排列的个数为
。
*/
对
中的一个多重排列加下标:
对r1个x1加下标,有r1!
种方式;对r2个x2加下标,有r2!
种方式;……;对rk个xk加下标,有rk!
种方式。
都加下标后,n个字符都不相同了,故
,即
r1个x1,r2个x2,…,rk个xk排列的个数相当于n个不同的球放入k个不同的盒子里,其中r1个球放入盒子x1中,…,rk个球放入盒子xk中的方案数。
/*
从a,b,c3个元素中取2个元的组合相当于将2个相同的球放入3个不同的盒子的方案。
组合与球放入盒子的方案的对照:
(下图仅为示意图,请尽量把盒子和球画得逼真一些)
2个a,1个b的多重排列相当于将3个不同的球放a,b2盒中,a盒2个球b盒1个球的方案。
可重排列与球放入盒子的方案的对照:
(下图仅为示意图)
(无重)排列与球放入盒子的方案的对照:
(下图仅为示意图)
从a,b,c3个元素中取2个的排列相当于将2个不同的球放入3个不同的盒子里,每盒最多一个球的方案。
*/
下面我们来讨论多项式系数,也即(x1+x2+…+xk)n的展开式中任意一项
前面的
的值。
(r1+r2+…+rk=n)
/*
我们知道(a+b)3=a3+3a2b+3ab2+b3,3a2b前面的3是怎么来的?
(a+b)3=(a+b)(a+b)(a+b),若乘法没有交换律,此式展开共有23=8项。
与3a2b对应的是2个a,1个b的多重排列:
aab,aba,baa。
故
。
*/
所以
当k=2时,也就是二项式系数。
,多项式的展开式也就是二项式展开式,即
根据以上的讨论,我们可以得到下面的公式:
/*
在
中,令a=b=1即可。
*/
/*
。
*/
/*
在
中,
令x1=…=xk=1即可。
例有5本不同的日文书,7本不同的英文书,10本不同的中文书。
1)取2本不同文字的书;
2)取2本相同文字的书;
3)任取两本书
解1)5×7+5×10+7×10=155;
2)C(5,2)+C(7,2)+C(10,2)=10+21+45=76;
3)155+76=231=
。
*/
求r1个1,r2个2,…,rt个t的排列数,设r1+r2+…+rt=n,设此排列数为P(n;r1,r2,…,rt),对1,2,…,t分别加下标,得到P(n;r1,r2,…,rt)·r1!
·r2!
·…·rt!
=n!
∴P(n;r1,r2,…,rt)=
=
下面我们讨论圆排列和项链排列:
a,b,c3个字符构成的圆排列有2个:
若两个圆排列不离开平面,通过转动和平移能够重合,就看做是同一个圆排列。
由r个字符构成的圆排列可在r处做顺时针断开。
/*
例如,
以4个元素为例
对于项链排列,
看做是相同的。
*/
一般而言,若两个项链排列通过转动、平移和翻转能够重合,就看做是同一个项链排列。
从n个字符中取r个不同的字符构成圆排列的个数为P(n,r)/r,(0≤r≤n)。
从n个字符中取r个不同的字符构成项链排列的个数为P(n,r)/2r,(3≤r≤n)。
关于可重的圆排列和项链排列,我们将在讨论Möbius反演及Pólya定理时涉及。
/*
例从[1,300]中取3个不同的数,使这3个数的和能被3整除,有多少种方案?
解将[1,300]分成3类:
A={i|i≡1(mod3)}={1,4,7,…,298},
B={i|i≡2(mod3)}={2,5,8,…,299},
C={i|i≡3(mod3)}={3,6,9,…,300}.
要满足条件,有四种解法:
1)3个数同属于A;2)3个数同属于B;3)3个数同属于C;4)A,B,C各取一数.
故共有3C(100,3)+1003=485100+1000000=1485100
例某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少?
解一进站方案表示成:
00011001010100其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。
给“1”n个门只用n-1个门框。
任意进站方案可表示成上面14个元素的一个排列。
[解法1]标号可产生5!
个14个元的全排列。
故若设x为所求方案,则x·5!
=14!
∴x=14!
/5!
=726485760
[解法2]在14个元的排列中先确定“1”的位置,有C(14,5)种选择,在确定人的位置,有9!
种选择。
故C(14,5)·9!
即所求
[解法3]把全部选择分解成若干步,使每步宜于计算。
不妨设9个人编成1至9号。
1号有6种选择;2号除可有1号的所有选择外,还可(也必须)选择当与1号同一门时在1号的前面还是后面,故2号有7种选择;3号的选择方法同2号,故共有8种。
以此类推,9号有14种选择。
故所求方案为[6]9
*/
1.3Stirling近似公式
组合计数的渐进值问题是组合论的一个研究方向。
Stirling公式给出一个求n!
的近似公式,它对从事计算和理论分析都是有意义的。
1)Wallis公式
令
显然
I1=1.k≥2时,
故
(1-3-1)
令
由(1-3-1),
(1-3-2)
当x∈(0,π/2)时,sink+1x由(1-3-2),
所以,
(1-10-3)
2)stirling公式
令
(1-3-4)
(1-3-5)
/*
tn的几何意义是由x轴,x=n,以及连接(1,0),(2,ln2),…,(n-1,ln(n-1)),(n,lnn)诸点而成的折线围成的面积。
*/
Tn=1/8+ln2+…+ln(n-1)+(lnn)/2(1-3-6)
/*
Tn是由三部分面积之和构成的。
一是曲线y=lnx在x=k点的切线和x轴,以及x=k-1/2,x=k-1/2包围的梯形,当k分别为2,3,…,n-1时的面积之和;一是由y=lnx在x=1点的切线,x=3/2线,以及x轴围城的梯形;另一是由y=lnn,x=n-1/2,x=n及x轴包围的矩形面积。
*/
因而有tn0令bn=An-tn.序列b1,b2,…是单调增,而且有上界,故有极限,
令
bn=b1由(1-3-4),(1-3-5)
得bn=nlnn-n+1-ln(n!
)+(lnn)/2=lnnn-n+1-ln(n!
)+(ln
)/2
ln(n!
)=1-bn+lnnn-ln
-lnen
∴n!
=
(1-3-8)
令βn=
βn=β.
将(1-3-8)代入(1-3-3),整理得β=
.
所以n!
~
1.4模型转换
课前思考题
1.已知哪些模型转换的例子?
2.排列→组合
3.全排列→多重排列
学习目标
利用模型转换讨论简单格路问题,有限制的格路问题,顶点有标号树的计数问题。
学习指南
把格路问题转换为多重排列问题。
把顶点有标号树的计数问题转换为可重排列问题。
难重点
把一条格路转换成一个多重排列,每条格路在一个方向上走的总步数都相同。
关于限制线的对称点,关于限制线的部分对称格路限制线的平移,对简单格路的分类:
合规格路与违规格路。
逐个摘去顶点有标号树的最小标号的叶子→叶子邻点序列→可重排列。
知识点
简单格路,有限制格路,对称,简单格路分类,顶点有标号树的计数。
“一一对应”概念是一个在计数中极为基本的概念。
一一对应既是单射又是满射。
如我们说A集合有n个元素|A|=n,无非是建立了将A中元与[1,n]元一一对应的关系。
在组合计数时往往借助于一一对应实现模型转换。
比如要对A集合计数,但直接计数有困难,于是可设法构造一易于计数的B,使得A与B一一对应。
例简单格路问题|(0,0)→(m,n)|=
,从(0,0)点出发沿x轴或y轴的正方向每步走一个单位,最终走到(m,n)点,有多少条路径?
/*
无论怎样走法,在x方向上总共走m步,在y方向上总共走n步。
若用一个x表示x方向上的一步,一个字母y表示y方向上的一步。
则(0,0)→(m,n)的每一条路径可表示为m个x与n个y的一个有重排列。
将每一个有重排列的x与y分别编号,可得m!
n!
个m+n元的无重全排列。
*/
设所求方案数为p(m+n;m,n),则P(m+n;m,n)·m!
·n!
=(m+n)!
故P(m+n;m,n)=
=
=C(m+n,m)设c≥a,d≥b,则由(a,b)到(c,d)的简单格路数为|(a,b)(c,d)|=
例在上例的基础上若设m/*
从(0,1)点到(m,n)点的格路,有的接触x=y,有的不接触。
对每一条接触x=y的格路,做(0,1)点到第一个接触点部分关于x=y的对称格路,这样得到一条从(1,0)到(m,n)的格路。
容易看出从(0,1)到(m,n)接触x=y的格路与(1,0)到(m,n)的格路(必穿过x=y)一一对应
*/
故所求格路数为
若条件改为可接触但不可穿过,则限制线要向下或向右移一格,得x-y=1,(0,0)关于x-y=1的对称点为(1,-1).
所求格路数为
/*
格路也是一种常用模型
*/
例CnH2n+2是碳氢化合物,随着n的不同有下列不同的枝链:
H
|
H—C—H
|
H
H
|
H—C—H
|
H—C—H
|
H
H
|
H—C—H
|
H—C—H
|
H—C—H
|
H
H
|
H—C—H
|
H—C—H
|
H—C—H
|
H—C—H
|
H
n=1甲烷
n=2乙烷
n=3丙烷
n=4丁烷
n=4异丁烷
这说明对应CnH2n+2的枝链是有3n+2个顶点的一棵树,其中n个顶点与之关联的边数为4;其它2n+2个顶点是叶子。
对于这样结构的每一棵树,就对应有一种特定的化合物。
从而可以通过研究具有上述性质的树找到不同的碳氢化合物CnH2n+2.
例在100名选手之间进行淘汰赛(即一场的比赛结果,失败者退出比赛),最后产生一名冠军,问要举行几场比赛?
解99场比赛。
/*
一种常见的思路是按轮计场,费事。
另一种思路是淘汰的选手与比赛(按场计)集一一对应。
*/
例(Cayley定理)n个有标号的顶点的树的数目等于nn+2.
生长点不是叶子,每个生长点是[1,n]中的任一元.有n种选择。
两个顶点的树是唯一的。
/*
例给定一棵有标号的树,边上的标号表示摘去叶的顺序。
(摘去一个叶子相应去掉一条边)
逐个摘去标号最小的叶子,叶子的相邻顶点(不是叶子,是内点)形成一个序列,序列的长度为n-2,第一次摘掉②,③为②相邻的顶点,得到序列的第一个数3,以此类推,得到序列31551,长度为7-2=5,这是由树形成序列的过程。
由序列形成树的过程:
由序列31551得到一个新序列111233455567,生成的过程是首先将31551排序得到11355,因为序列31551的长度为5,得到按升序排序的序列1234567,序列的长度为5+2(即n+2),然后将11355按照大小插入到序列1234567中,得到111233455567,然后将两个序列排在一起
计算过程
第一步推导:
将上下两个序列同时去掉上行序列的第一个元素3(用黄色表示),去掉下行序列的第一个无重复的元素2(用红色表示)。
生成一条边(②—③)。
依此类推,减到下面剩最后两个元素,这两个元素形成最后一条边。
最后形成树。
上述算法描述:
给定序列b=(b1b2…bn-2),设a=(123…n-1n),将b的各位插入a,得a',对
做操作。
a'是2n-2个元的可重非减序列。
操作是从a'中去掉最小无重元,设为a1,再从b和a'中各去掉一个b中的第一个元素,设为b1,则无序对(a1,b1)是一条边。
重复这一操作,得n-2条边,最后a'中还剩一条边,共n-1条边,正好构成一个树。
b中每去掉一个元,a'中去掉2个元。
由算法知由树T得b=(b1b2…bn-2),反之,由b可得T。
即f:
T→b是一一对应。
由序列确定的长边过程是不会形成回路的。
因任意长出的边(u,v)若属于某回路,此回路中必有一条最早生成的边,不妨就设为(u,v),必须使u,v都在长出的边中重复出现,但照算法u,v之一从下行消失,不妨设为u,从而不可能再生成与u有关的边了,故由
得到的边必构成一个n个顶点的树。
*/
证由一棵n个顶点的树可得到一个长度为n-2的序列,且不同的树对应的序列不同*,因此|T|≤nn-2。
*:
对n用归纳法可证.
反之,由一个长度为n-2的序列(每个元素为1~n的一个整数),可得到一棵树,且不同的序列对应的树是不同的,因此nn-2≤|T|,|T|=nn-2
1.5全排列的生成算法
学习指南
给定一个组合模型,将此模型中的全部元素无遗漏无重复的逐个生成出来,是组合计数的一个研究课题。
排列是最基本的组合模型,本节讨论4种全排列的生成算法。
我们从最容易想到的字典序概念入手,设计生成下一个排列的算法,提出计算每个排列对应的序号的问题,并由此引出中介数的概念,中介数是排列及其序号之间的桥梁,中介数还有可加性,容易求得一个中介数的下一个中介数(通过加1就可得到)。
下图给出了排列、中介数、序号之间的关系。
通过对已有的全排列的生成算法的分析,找出其不足之处,给提出新的生成算法以启迪,就这样,我们逐个导出递增进位制数法,递减进位制数法和邻位互换法,把讨论引向深入。
虽然真实的生成算法的进化史未必是我们所演绎的这个样子,但我们编撰的样本是有意义的。
算法研究有3个层次:
探索层、原理层、操作层。
探索层是算法研究的灵魂,原理层是算法研究的主题,操作层是算法研究的外形。
要避免只重视操作层的倾向,否则有悖于数学学习的本义。
课前思考
给出1,2,3的所有全排列
学习指南
算法的效率简单性标准序号中介数
探索层
原理层
操作层
难重点
中介数概念序号中介数中介数定义(中介数每位的定义)
由排列求中介数的算法由中介数求排列的算法
知识点
字典序数制序号字典序法下一个排列递增进位制数递增进位制数法递减进位制数递减进位制数法奇排列偶排列带余除法计算表格数制换算
全排列的生成算法就是对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。
这里介绍全排列算法四种:
(A)字典序法
(B)递增进位制数法
(C)递减进位制数法
(D)邻位对换法
1.5.1字典序法
学习目标
按照字典序求下一个排列的算法
课前思考
1.什么是字典序(如何规定排列的先后次序)?
1243和1423哪个在前?
2.用1,2,3