下列所有的符号中,如果没有特殊说明,则n表示集合中所有元素的个数、r表示所取的元素个数,k表示种类数。
第一章:
绪论,介绍了为什么要研究组合数学,以及组合数学的三个研究内容。
第二章:
鸽巢原理:把N+1个鸽子放到N个巢里面,则至少有一个巢里面有两只鸽子。
推论:如果把N个物体放到K个盒子当中,则至少有一个盒子里面有N/k取上界个物体。
例子:Ramsey数
第三章:
1、集合的排列:P(n,r)、集合的循环排列:P(n,r)/r、集合的组合:C(n,r)
2、多重集合的排列:1、每个元素有无限多个,取r个:K^r——有K种元素,也就是说每个位置有K种选择,取r个。
2、每个元素是有限个,全排列数:N!/N1!N2!...Nk!。
3、每个元素是有限个,取r个的排列数:用后面章节的生成函数(指数生成函数)求解
3、多重集合的组合:1、每个元素有无限多个:C(r+k-1,r)
2、每个元素是有限个:用后面章节的容斥原理来求,用容斥原理将有限个转换成无限多个(最多取多少个转换成至少取多少个)。
第四章:
1、活动数:给数标一个方向,如果这个数比他所指方向的那个数大,那么这个数就叫做活动数。
2、生成排列(全排列):活动数法,1、找到一个最大的活动数,2、将这个数与他所指方向的那个数互换位置,3、将所有比他大的数的方向转换。重复这三步,直到所有的数都不是活动数。
3、逆序数:给定一个数的序列,如果Xi>Xj且i<j。则称这两个数为一个逆序对,用ai表示数字i的逆序对的个数,也叫逆序数。
算法1:通过相对位置和从大的数到小的数的逆序数来确定具体序列:i前面有ai个逆序对。
算法2:通过从小的数到大的数逆序数来直接确定具体序列:i直接放在第ai+1个空位上。
4、生成组合:通过2进制的+1来生成所有的组合。
5、生成r-组合:按字典序来排序,的直接后继是.直接前驱是。其中后继的不与原序列任何一个数重复,前驱的也是如此。
6、生成r-排列:先生成r-组合,然后对每个组合进行全排列。
第六章:
1、容斥原理:S中不具有P1,P2...Pn任何一个属性的元素有如下多个:
具备任何一种属性中的其中一种的元素有如下多个:
2、错位排列:给定n个数,从1到n,将这n个数排列起来,若任何一个数都不在他的自然位置上,则称这个排列是一个错位排列。例如312,因为1不在第一个位置,2不在第二个位置,3不在第三个位置,所以这是一个错位排列。
我们定义为n个数的错位排列数,则根据容斥原理可得为:
3、带禁止位置的排列:给定N个位置和N个集合,每个位置对应一个集合,带禁止位置的排列就是指,该位置对应的集合中的元素不能在该位置上。当对应的集合中的元素就只有该位置时,带禁止位置的排列就等价于错位排列。
求带禁止位置的排列的时候,当禁止位置的数量不多时,可采用容斥原理来解,但是当禁止位置数量很多时,用容斥原理求解起来很麻烦,因为禁止位置多的时候,求解反问题和原问题复杂度是相同的,因此需要换一种思路来求解这个问题。
4、棋盘多项式:带禁止位置的排列可看成在一个NXN的棋盘上放置N个带禁止位置的非攻击性車(这些車相互之间是有区别的),则在该棋盘上放置N个車的排列数为:
其中是k个非攻击性車放在相对应的禁止位置上的方法数,现在问题就转换成了如何求解。
下面我们用棋盘多项式来求解,定义在为棋盘C上放K个非攻击性車的方法数。如:
进一步,我们定义:
,
其中是做位置保持的,对于来说,有以下两条性质:
(1) .也就是说,我们可以选定一个方格,然后原棋盘多项式就等于x乘以去掉该方格所在的行和列的棋盘多项式,再加上只去掉这个方格的棋盘多项式,来对一个很大的棋盘进行分解。例如:
(2),其中和是相互独立的两部分。也就是说,如果一个棋盘可以分解成两个相互独立的部分,则原棋盘多项式就等于这两个独立棋盘多项式的乘积。
由以上两条性质,我们可知求解棋盘多项式时,我们应该尽可能挑选那些让棋盘分成两个独立部分的方格,来一步步使原问题变成一个个可直接求解的子问题。例如:
第七章:递推关系式和生成函数
1、线性齐次递推关系式
存在,以及,使得:则称这个数列满足K阶线性递推关系式。
进一步,如果,都为常数,且=0,我们称该递推关系式为线性齐次递推关系式。针对线性齐次递推关系式,我们可用以下方法求解:
为:
用替换,替换,依次类推,即得到如下关系式: