第3章 容斥原理与鸽巢原理
3.1 De Morgan定理
德摩根(De Morgan)定理:若A和B是集合U的子集,则
-
¯¯¯¯¯¯¯¯¯¯¯¯¯¯A∪B=¯¯¯¯A∩¯¯¯¯B
-
¯¯¯¯¯¯¯¯¯¯¯¯¯¯A∩B=¯¯¯¯A∪¯¯¯¯B
德摩根定理的推广:
- ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯A1∪A2∪⋯∪An=¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩⋯∩¯¯¯¯¯¯¯An
- ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯A1∩A2∩⋯∩An=¯¯¯¯¯¯A1∪¯¯¯¯¯¯A2∪⋯∪¯¯¯¯¯¯¯An
3.2 容斥定理
|A∪B∪C|=|A|+|B|+|C|−|A∩B|−|A∩C|−|B∩C|+|A∩B∩C|
容斥原理的推广:
设A1,A2,...An是n个有限的集合,则
|A1∪A2∪…∪An|=n∑i=1|Ai|−n∑i=1∑j>i∣∣Ai∩Aj∣∣+n∑i=1∑j>i∑k>j∣∣Ai∩Aj∩Ak∣∣−…+(−1)n−1|A1∩A2∩…∩An|
|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩…∩¯¯¯¯¯¯¯An|=N−|A1∪A2∪…∪An|
3.3 容斥原理举例
例题:求从1到600的整数中能被2、3、5除尽的数的个数和不能被2、3、5除尽的个数。
解:令A、B、C分别为从1到600的整数中被2、3、5除尽的数的集合。
|A|=⌊6002⌋=300,|B|=⌊6003⌋=200,|C|=⌊6005⌋=120,
|A∩B|=⌊6002×3⌋=100,|A∩C|=⌊6002×5⌋=60,|B∩C|=⌊6003×5⌋=40,
|A∩B∩C|=⌊6002×3×5⌋=20,
被2、3,、5除尽的数的个数为
|A∪B∪C|=|A|+|B|+|C|−(|A∩B|−|A∩C|−|B∩C|)+|A∩B∩C|=300+200+120−(100+60+45)−20=400
不能被2、3,、5除尽的数的个数为
|¯¯¯¯A∩¯¯¯¯B∩¯¯¯¯C|=N−|A∪B∪C|=600−400=200
例题:求由a、b、c、d四个字母构成的n位符号串中,a、b、c(每个)至少出现一次的符号串数目。
解:令A、B、C分别为n位符号串中不出现a、b、c符号的集合。由于n位符号串中每一位都可取a、b、c、d四种符号中的一个,故不允许出现a的n位符号串的个数应是3n,即|A|=|B|=|C|=3n,|A∩B|=|A∩C|=|B∩C|=2n,|A∩B∩C|=1,a、b、c每位都至少出现一次表示为|¯¯¯¯A∩¯¯¯¯B∩¯¯¯¯C|,
|¯¯¯¯A∩¯¯¯¯B∩¯¯¯¯C|=4n−(|A|+|B|+|C|)+(|A∩B|+|A∩C|+|C∩B|)−|A∩B∩C|=4n−3⋅3n+3⋅2n−1
3.4 容斥原理的应用
例题:对问题x1+x2+x3=15,0≤x1≤5,0≤x2≤6,0≤x3≤7,求整数解的数目。
解:如果没有0≤x1≤5,0≤x2≤6,0≤x3≤7,记所求的整数解的集合为S,|S|=C153+15−1=C217=136。
分别设S中满足x1≥6的子集为A1,满足x2≥7的子集为A2,满足x3≥8的子集为A3,问题转化为求|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩¯¯¯¯¯¯A3|。
对于A1,相当于x1+x2+x3=15−6,即x1+x2+x3=9,求其非负整数解得|A1|=C93+9−1=55。
同理得|A2|=C83+8−1=45,|A3|=C73+7−1=36
|A1∩A2|=C15−6−73+(15−6−7)−1=C24=6
|A1∩A3|=C15−6−83+(15−6−8)−1=C23=3
|A1∩A2|=C15−7−83+(15−7−8)−1=C22=1
|A1∩A2∩A3|=0
|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩¯¯¯¯¯¯A3|=136−(55+45+36)+(6+3+1)−0=10
例题:求从(0,0)点到(10,5)点得路径中不通过AB,CD,EF,GH的路径数,已知各点坐标为A(2,2),B(3,2),C(4,2),D(5,2),E(6,2),F(6,3),G(7,2),H(7,3)。
解:从(0,0)点到(10,5)点的所有路径数为C510+5=3003(第一章的简单格路问题)
设A1表示从(0,0)到(10,5)其中过AB的路径,
设A2表示从(0,0)到(10,5)其中过CD的路径,
设A3表示从(0,0)到(10,5)其中过EF的路径,
设A4表示从(0,0)到(10,5)其中过GH的路径,
因此有
|A1|=(42)((10−3)+(5−2)5−2)=(42)(103)=6×120=720
同理
|A2|=(62)(83)=15×56=840
|A3|=(82)(62)=28×15=420
|A4|=(92)(52)=36×10=360
|A1∩A2|=(42)(82)=6×56=336
|A1∩A3|=(42)(62)=6×15=90
|A1∩A4|=(42)(52)=6×10=60
|A2∩A3|=(62)(62)=15×15=225
|A2∩A4|=(62)(52)=15×10=150
|A3∩A4|=0
|A1∩A2∩A3|=(42)(62)=6×15=90
|A1∩A2∩A4|=(42)(52)=6×10=60
|A2∩A3∩A4|=0
|A1∩A2∩A3∩A4|=0
所以
|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩¯¯¯¯¯¯A3∩¯¯¯¯¯¯A4|=3003−(720+840+420+360)+(336+90+60+225+150)−(90+60)=3003−2340+861−150=1374
3.5 n对夫妻问题
例题:n对夫妻围圆桌而坐,每个男人都不和他的妻子相邻,有多少种方案?
解:n对夫妻有2n个人,2n个人围圆桌而坐的方案数为(2n−1)!
设Ai表示第i对夫妻相邻而坐的集合,i=1,2,...,n,则问题转化为求
|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩…∩¯¯¯¯¯¯¯An|=N−n∑i=1|Ai|+n∑i=1∑j>i∣∣Ai∩Aj∣∣−…+(−1)n|A1∩A2∩…∩An|
|Ai|相当于讲第i对夫妻作为一个对象围圆桌,同一对夫妻之间可以换位,故
|Ai|=2Q2n−12n−1=2(2n−2)!
|Ai∩Aj|=22Q2n−22n−2=22(2n−3)!
|Ai∩Aj∩Ak|=23Q2n−32n−3=22(2n−4)!
⋯⋯
|A1∩A2∩⋯An|=2nQ2n−n2n−n=2n(n−1)!
故夫妻不相邻方案数为
M=(2n−1)!−2(n1)(2n−2)!+22(n2)(2n−3)!−⋯+(−1)n2n(nn)(n−1)!=n∑h=0(−1)h2h(nh)(2n−h−1)!
例题:n对夫妻排成一列,每个男人都不和他的妻子相邻,有多少种可能的方案?
解:
M=(2n)!−2(n1)(2n−1)!+22(n2)(2n−2)!−⋯+(−1)n2n(nn)(n)!=n∑h=0(−1)h2h(nh)(2n−h)!
3.6 错排问题
定义:一个排列其中所有的元素都不在原来的位置上,则称这个排列为错排,也叫重排。
证明:n个元素的错排为n!(1−11!+12!−⋯±1n!)
设Ai为数i在第i位上的全体排列,i=1,2,..,n。因为数字i不能动,因而有:
|Ai|=(n−1)!,i=1,2,...,n
|Ai∩Aj|=(n−2)!,i,j=1,2,..,n,i≠j
⋯⋯
每个元素都不在原来位置的排列数为
|¯¯¯¯¯¯A1∩¯¯¯¯¯¯A2∩…∩¯¯¯¯¯¯¯An|=n!−C(n,1)(n−1)!+C(n,2)(n−2)!−⋯−±C(n,n)1!=n!(1−11!+12!−⋯±1n!)
例题:1,2,…,9的全排列中,求偶数都在原来的位置上,其余都不在原来位置上的错排数目。
解:实际上是1,3,5,7,9五个数的错排问题,总数为:
5!−C(5,1)4!+C(5,2)3!−C(5,3)2!+C(5,4)1!−C(5,5)=120(12−16+124−1120)=44
3.7 棋盘多项式和有禁区的排列
对于X=1,2,...,n的一个排列恰好对应了n个棋子在n×n棋盘上的一种布棋方案。以棋盘的行表示X中的元素element,列表示排列中的位置position。如下图所示这种放棋方案就对应了排列2143。
如果在排列种限制元素i不能排列在第j个位置,则相应的布棋方案种的第i行第j列的方格不允许放棋子。把所有这些不许放棋的方格称为禁区。
对于{1,2,3,4}的一个排列P=e1e2e3e4,规定e1≠3,e2≠1,4,e3≠2,4,e4≠2。这样的排列对应于有禁区的布子。如下图有阴影的格子表示禁区。
棋盘多项式:设C为一棋盘,称∑nk=0rk(C)xk为C的棋盘多项式,其中rk(C)表示k个棋子布到棋盘C的方案数。规定r0(C)=1。
性质:
- 设Ci是棋盘C的某一指定格子所在的行与列都去掉后所得的棋盘,Ce是仅去掉该格子后的棋盘,则rk(C)=rk−1(Ci)+rk(Ce)。
- 如果C由互相分离的C1和C2组成,即C1的任一格子所在的行和列中都没有C2的格子,则有rk(C)=∑ki=0ri(C1)rk−i(C2)。
定理:设ri为i个棋子布入禁区的方案数,i=1,2,3,...n。有禁区的布子方案数(即禁区内不布子的方案数)为,
r0n!−r1(n−1)!+r2(n−2)!−⋯+(−1)nrn=n∑k=0(−1)krk(n−k)!
定理证明见棋盘多项式 - 维基百科,自由的百科全书 (wikipedia.org)
例题:如下所示,在4×4的棋盘上,打叉的地方为禁区,求棋子无一落入禁区的排列数。
解:首先计算棋盘多项式,即r0(C)+r1(C)x+r2(C)x2+r3(C)x3+r4(C)x4,只需依次计算r0,r2,r2,r3,r4即可。
由规定知r0(C)=1,
r1(C)即1个棋子布到棋盘C的方案数,棋盘C有6个禁区,这一个棋子可以布到这6个地方且不存在其他棋子与这一个棋子冲突,因此r1(C)=6;
r2(C)即2个棋子布到棋盘C的方案数,从6个禁区中找到两个不在同一行不在同一列的。有(1,3)和(2,1),(1,3)和(2,4),(1,3)和(3,2),(1,3)和(3,4),(1,3)和(4,2),(2,1)和(3,2),(2,1)和(3,4),(2,1)和(4,2),(2,4)和(3,2),(2,4)和(4,2),(3,4)和(4,2),共11种。即r2(C)=11;
r3(C)即3个棋子布到棋盘C的方案数,得到r3(C)=7;
r4(C)即4个棋子布到棋盘C的方案数,四个棋子要求都不同行不同列,只有一种方案,即r4(C)=1;
综上得棋盘多项式为1+6x+11x2+7x3+x4,再结合定理得无一落入禁区得排列数为1×4!−6×(4−1)!+11×(4−2)!−7×(4−3)!+1×(4−4)!=24−36+22−7+1=4。
3.8 有限制的排列
-
有禁区排列是对元素排列位置的限制,计算的是绝对禁用位置;
-
有限制排列讲的是相对禁用位置,它限制的是对元素之间的相邻关系的限制 。也称为有限制条件(模式)的排列
-
这里谈的有限制排列与前面章节提到的“受限多重排列”不同。
3.9 鸽巢原理
鸽巢原理是组合数学中最简单也是最基本的原理,也叫抽屉原理。
-
若有n个鸽子巢,n+1个鸽子,则至少有一个巢内有至少有两个鸽子。
-
m只各自,n个鸽巢,至少有一个鸽巢里有不少于⌊m−1n⌋+1只鸽子。
-
m1,m2,...,mn都是正整数,并有m1+m2+⋯+mn−n+1个鸽子住进n个鸽巢,则至少对某个i有第i个巢中至少有mi个鸽子,i=1,2,...,n。
-
设k和n都是任意正整数,若至少有kn+1只鸽子分配在n个鸽巢,则至少有一个鸽巢里有至少k+1只鸽子。
-
若取n(m−1)+1个球放进n个盒子,则至少有一个盒子有m个球。
-
若m1,m2,...,mn是正整数,且m1+m2+...+mnn>r−1,则m1,m2,...,mn中至少有一个数不小于r。
3.9.1 整除问题
例题:如果有n+1个正整数,而这些整数是小于或等于2n,是否一定会有一对数是互素的?为什么?
解:证明,如果从{1,2,...,2n}中选择n+1个整数,那么存在两个整数,它们之间差为1。
设选择的n+1个整数为a1,a2,...,an+1,a1<a2<...<an,令b1=a1+1,b2=a2+1,...,bn=an+1,
则1<b1<b2<...<bn≤2n。
a1,a2,...,an+1,b1,b2,...,bn这2n+1个数,但范围只有2n,所以其中至少有一对相等,且bj=aj+1,bj=ak所有ak和aj只相差1。因此得证。
3.9.2 图形问题
例题:在边长为1的等边三角形内任意选择5个点,存在两个点,其间距最多为12。/在边长为1的等边三角形内任意选择10个点,存在两个点,其间距最多为13.
解:
有4个小三角形,任选5个点,必有两个点在同一小三角形内。/有9个小三角形,任选10个点必有两个点在同一小三角形内。鸽巢原理。
3.9.3 连续累加问题
例题:设a1,a2,...am是正整数序列,则至少存在k和l,1≤k<l≤m,使得和ak+ak+1+⋯+al是m的倍数。
证明:设Sh=∑hi=1ai,Sh≡rhmodm,0≤rh≤m−1,h=1,2,...,m。若存在l,Sl≡0modm,则命题成立。否则,1≤rh≤m−1,但h=1,2,...,m,由鸽巢原理知,存在rk=rh,即Sk≡Shmodm,不妨设h>k,则Sh−Sk=ak+1+ak+2+⋯+ah≡0modm。
例题:一个孩子每天至少做一题,总共做7周,每周总共不超过11题。必存在连续若干天在次期间这个孩子恰好做了20题。
证明:设a1,a2,...a49,Sk=a1+a2+⋯+ak,即证必定存在0≤k<l≤49,ak+1+ak+2+⋯+al=20,即Sl−Sk=20。
其中1≤S1,S2,...S49≤77,构造b1=S1+20,...,b49=S49+20≤97。
1≤S1,S2,...,S49,b1,b2,...b49≤97,98个元素,但最高只能取到97,根据鸽巢原理其中必有两个元素相等。即存在bk=Sl,而bk=Sk+20,所以Sk+20=Sl,即Sl−Sk=20。
类似问题:生产产品、看电视、做运动…
例题:设a1,a2,...a100是由1和2组成的序列,已知从其任一数开始的顺序10个数的和不超过16,即ai+ai+1+⋯+ai+9≤16,1≤i≤91,则至少存在h和k,k>h,使得ah+ah+1+⋯+ak=39。
证明:令Sj=∑ji=1ai,j=1,2,...,100,显然S1<S2<⋯<S100,且S100≤10×16=160
做序列S1,S2,...,S100,S1+39,...S100+39共200项。其中最大项S100+39≤160+39=199。
由鸽巢原理,必有两项相等,而且必是前段中的某项与后段中的某项相等,设Sk=Sh+39,k>h,Sk−Sh=39,即ah+ah+1+⋯+ak=39
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了