本博客参考自MOOC平台的离散数学及其应用课程与离散数学及其应用第七版内容。
1 集合与序列
1.1 集合的定义
集合: 是由指定范围内的满足给定条件的所有可确定,可分辨对象聚集在一起构成的无序整体,每一个对象称为这个集合的元素。集合常用大写英文字母表示,而元素用小写英文字母表示。
更精确的定义需要以下公理完善:外延公理 + 空集存在公理 + 无序对公理 + 并集公理 + 幂集公理 + 无穷公理 +替换公理 + 正则公理 + 选择公理。 (ZFC 公理化集合论)
更详细的介绍参见:http://www.duodaa.com/blog/index.php/archives/397/
集合与对象的关系可以如下表述:
下面举几个例子:
标注红字的部分无法作为精准描述集合元素性质的语句,所以不构成集合。
集合的描述形式:
1.2 集合的运算
值得注意的是这两个特殊的定义:
设
交换律:
结合律:
分配率:
吸收率:
德摩根定律:
德摩根定律的变形:
幂等律:
零律:
同一律:
排中律:
矛盾律:
余补律:
双重否定率:
1.3 序列
2 数论基础
2.1整除的概念
2.2 欧几里得算法(辗转相除法)和贝祖等式
贝祖等式的一个重要推论:
大于1的两个整数a,b互素,则存在整数使得
最大公因子和最小公倍数还有如下性质:
对正整数a,b,c有
1.GCD(a,GCD(b,c))=GCD(GCD(a,b),c)
2.LCM(a,LCM(b,c))=LCM(LCM(a,b),c)
3.GCD(a,LCM(b,c))=LCM(GCD(a,b),GCD(a,c))
4.LCM(a,GCD(b,c))=GCD(LCM(a,b),LCM(a,c))
3.计数基础
3.1 加法与乘法规则
3.2 排列
排列的分类
可重排列
不可重排列
如果我们对一类对象作出可重复但有次数的限制,比如:
3.3 组合
同样的我们对组合的对象作出可重复但有次数的限制:
为了能够更清楚的理解,这里有必要系统的引入隔板法的概念
3.4 隔板法(补充)
定义:当遇到把n个元素无次序分为k组的情况时,可以通过隔板法去理解。
隔板法就是在n个元素间的(n-1)个空位中插入k-1个板,从而可以把n个元素分成k组的方法。
应用普通隔板法必须满足3个条件:
(1) 这n个元素必须全部相同;
(2) 所分成的每一组至少分得1个元素;
(3) 分成的组别彼此相异。
基础公式:
把10个相同的小球放入3个不同的箱子,每个箱子至少一个,问有几种情况?
相当于n-1个空位,需要插入m-1个板子(注意,一个空位最多只能插入一个板子),此时就是n-1选m-1,即C(n-1,m-1)=C(9,2)
接下来才是重点。
普通隔板法
例1. 求方程 x+y+z=10的正整数解的个数。
分析:可以理解为将10个球排成一排,球与球之间形成9个空隙,将两个隔板插入这些空隙中(每空至多插一块隔板),规定由隔板分成的左、中、右三部分的球数分别为x、y、z之值(如下图)。则隔法与解的个数之间建立了一一对立关系,故解的个数为C(n-1,m-1)=C(9,2)=36(个)。
添元素隔板法
例2. 求方程 x+y+z=10的非负整数解的个数。
分析:注意到x、y、z可以为零,故例1解法中的限定“每空至多插一块隔板”就不成立了,怎么办呢?只要添加三个球,给x、y、z各添加一个球,这样原问题就转化为求 x+y+z=13的正整数解的个数了(也就是说这两个结果是一个双射),则问题就等价于把13个相同小球放入3个不同箱子,每个箱子至少一个,有几种情况?易得解的个数为C(n+m-1,m-1)=C(12,2)=66(个)。
例3: 把10个相同小球放入3个不同箱子,第一个箱子至少1个,第二个箱子至少3个,第三个箱子可以放空球,有几种情况?
我们可以在第二个箱子先放入10个小球中的2个,(这步不影响第一个和第二个的数量)然后把问题转化为 把9个相同小球放3不同箱子,每箱至少1个,放完后,把第三个箱子中的一个球放到第二个箱子里(这步影响第三个箱子的数量,但是两个结果是一个双射)。即 C(8,2)=28
例4. 将20个相同的小球放入编号分别为1,2,3,4的四个盒子中,要求每个盒子中的球数不少于它的编号数,求放法总数。(减少球数用隔板法)
分析:先在编号1,2,3,4的四个盒子内分别放0,1,2,3个球,只有1种方法,剩下14个球;再把剩下的球分成4组,每组至少1个,由例1知方法有C(13,3)=286(种)。
例5:有一类自然数,从第三个数字开始,每个数字都恰好是它前面两个数字之和,直至不能再写为止,如257,1459等等,这类数共有几个?
因为前2位数字唯一对应了符合要求的一个数,只要求出前2位有几种情况即可,设前两位为ab
显然a+b<=9 ,且a不为0
1 -1- 1 -1 -1 -1 -1 -1 -1 1代表9个1,-代表8个空位
我们要把9个1分成两组,但b可以为0,我们先给b一个1,然后就相当于10个小球放入两个(a,b)不同的箱子,每一个箱子至少放一个,C(9,1),但这是错误的,为什么?因为1不一定要全部放入。其实解决这个问题可以这么想,我们在引进一个盒子c来放ab取完剩下的1,所以报证c中球数大于0,所以要在增加一个球,题目就等价于,11个小球放入三个(a,b,c)不同的箱子,每一个箱子至少放一个,所以一共有 c(10,2)=45 .
选板法
例6: 有10粒糖,如果每天至少吃一粒(多不限),吃完为止,求有多少种不同吃法?
o - o - o - o - o - o - o - o - o – o o代表10个糖,-代表9块板
10块糖,9个空,插入9块板,每个板都可以选择放或是不放,相邻两个板间的糖一天吃掉
这样一共就是 啦
分类插板法
例7: 小梅有15块糖,如果每天至少吃3块,吃完为止,那么共有多少种不同的吃法?
此问题不能用插板法的原因在于没有规定一定要吃几天,因此我们需要对吃的天数进行分类讨论
最多吃5天,最少吃1天
1: 吃1天或是5天,各一种吃法 一共2种情况
2:吃2天,每天预先吃2块,即问11块糖,每天至少吃1块,吃2天,几种情况? C(10, 1)=10
3:吃3天,每天预先吃2块,即问9块糖,每天至少1块,吃3天? C(8 ,2)=28
4:吃4天,每天预先吃2块,即问7块糖,每天至少1块,吃4天?c(6 ,3)=20
所以一共是 2+10+28+20=60 种
逐步插板法
例8 :在一张节目单中原有6个节目,若保持这些节目相对次序不变,再添加3个节目,共有几种情况?
-o - o - o - o - o - o - 三个节目abc
可以用一个节目去插7个空位,再用第二个节目去插8个空位,用第三个节目去插9个空位
所以一共是 c(7, 1)×c(8, 1)×c(9 ,1)=504种
两道附加题
1.一共n个元素,从中选取m个元素,选出的元素中没有相邻的元素,一共有多少种选法(ZOJ3557)
解答:首先我们拿出m个小球,还剩下n-m个小球,可以产生n−m+1个空,这道题就变成了把m个小球插到这n−m+1个空中有多少种方法,即这m个小球的编号取决于它插入的位置,和选哪个小球没关系,即C为(n-m+1,m)
在计算阶段要用到卢卡斯定理,这部分在OI中的数论方法里有讲。
2.2.hdu 3037 Saving Beans
有n个不同的盒子,在每个盒子中放一些球(可以不放),使得总球数≤m,求方案数
第一种方法:
设最后放了k个球,根据"隔板法"由方案数C(k+n-1,n-1),:
ans=C(n-1,n-1)+C(n,n-1)+C(n+1,n-1)+……+C(n+m-2,n-1)+C(n+m-1,n-1)
=C(n+m,n);
第二种方法:
这个题和原来不一样的地方:总球数≤m,一般我们就是总球数就是m,所以我们可以增加一个盒子,现在n+1个盒子,现在假设就要放m个球,n来来放k个球,剩下的m-k就放在那个我们增加的盒子里,这样n个盒子的组合球数就是我们要求的,所以题目等价于m个球放入n+1个盒子中,盒子有里球数可以为0,添元素插板法,每一个盒子都增加一个球,即m+n+1个球放入n+1个盒子,c(m+n,n)为答案。