多重集合与容斥定理
多重集合的排列:
设S是有k种不同类型对象的多重集合,每个元素都有无限的重复数。那么s的r排列数目是k^r.
例子:最多有4位的3进制数(3元数)的个数是多少?
分析:3^4=81。
设s是多重集合,有k种类型的对象,且每种类型的有限重复数是n1,n2,……,nk。s的大小是n=n1+n2+n3+……+nk。那么s的排列数目等于:result=n!/(n1!*n2!*……*nk!)
(因为重复运算)
例子:词MISSISSIPPI中字母的排列数是?
分析:词含有的字母总个数是11,M:1,I:4,S:4,P:2。所以result=11!/(1*4!*4!*2!).
设n是正整数,并设n1,n2,……,nk是正整数且n=n1+n2+……+nk。把所有的对象划分成k个标有不同标签的盒子,且盒子们分别对应n1,n2,……,nk。那么划分的总方案数是: n!/(n1!*n2!*……nk!)。假如这些标签都是相同的或者说没有标签,并且n1=n2=……=nk,那么总数是n!/[k!*n1*n2*……*nk!].
例子:3种类型9个对象的多重集合s={3*a,2*b,4*c}。求s中8排列的个数?
分析:要排列的数目和对象的总个数不相同。分成3种情况讨论,s1={2a,2b,4c},s1=8!/(2!*2!*4!)=420; s2={3a,b,4c},s2=8!/(3!*1*4!)=280; s3={3a,2b,3c},s3=8!/(3!*2!*3!)=560. result=s1+s2+s3.
多重集合的组合:
通过一个例子来初步认识:设s={2a,1b,3c},那么s的3组合是:{2a,b},{2a,c},{a,b,c},{b,2c},{a,2c},{3c}。
设S是有k种类型对象的多重集合,每种元素均有无限的重复数。那么S的r组合的个数等于:C(r+k-1,k-1)=C(r+k-1,r).
证明:x1+x2+……+xk=r.用隔板法,这样有了r+k-1位置可以插入隔板个元素(要插入k-1个隔板)。那么这样的排列个数是,即C(r+k-1,k-1)。
问题:一家面包店有8种炸面包圈。如果一盒内装有一打(12个)炸面包圈,那么能够装配多少不同类型的面包圈盒?
分析:用8个小写字母表示8种不同的炸面包圈,即a+b+c+d+e+f+g+h=12,result=C(12+8-1,8-1)。
问题:继续上面的问题,如果8种面包圈每一种都需要至少一个,那么能够装配多少不同类型的面包圈盒?
分析:既然每种面包圈都至少需要一个,那么每个盒子中先放入8个不同的面包圈,即盒子中只剩下4个位置放置面包圈了。则a+b+c+d+e+f+g+h=4,result=C(4+8-1,8-1).
组合问题中的每种类型的对象出现次数的下界可以通过变量代换来解决。
问题:x1+x2+x3+x4=20的整数解的个数是多少?其中x1>=3,x2>=1,x3>=0,x4>=5.
分析:y1=x1-3,y2=x2-1,y3=x3,y4=x4-5. y1+y2+y3+y4=20-9=11.result=C(11+4-1,4-1)=364.
首先介绍一个重要定理(容斥定理):
问题一:多重集合的组合问题
问题描述:给定3个a,4个b,5个c,现在要选10个元素,求一共有多少种组合?
分析:本问题就是相当于求S={3·a,4·b,5·c}的10组合数。
首先,多重集合的组合有一个定理,定理描述如下:
设S是有k种类型对象的多重集合,每种元素均具有无限的重复数,那么S的r组合的个数等于:
那么既然这样,我们令S∞={∞·a, ∞·b,∞·c},那么S的10-组合数为
设集合A是S∞的10-组合全体,则|A|=66,现在要求在10-组合中的a的个数小于等于3,b的个数小于等于4,c的个数小于等
于5的组合数.
定义性质集合P={P1,P2,P3},其中:
P1:10组合中a的个数大于等于4;
P2:10组合中b的个数大于等于5;
P3:10组合中c的个数大于等于6;
将满足性质Pi的10-组合全体记为Ai(1≤i≤3).
那么,A1中的元素可以看作是由S∞的10-4=6组合再拼上4个a构成的,所以
同理有:,
,
所以根据容斥原理,原问题的解为:
问题二:方程解的个数问题
(1)问题描述:已知非负整数不大于7,求方程
整数解的个数。
分析:其实用容斥,跟上题一样,先求出总数,因为不可能出现两个或两个以上的数大于等于8,所以这里就简单很多了。
首先,S的10-组合数为:,由于只会出现
中的一个大于等于8的情况,所以四种情况一样的,
其结果都是,所以问题的解就是286-4*10=246
(2)问题描述:求方程整数解的个数,其中
分析:对于这个问题需要先转化一下就跟上题一样了。
令:,然后就有
,此类问题不再赘述。答案为21
问题三:集合划分问题
问题描述:将一个n元集合划分为r个非空子集,并给每个子集标上号1,2,3,...r,求划分方案数。
分析:设S为将n元集划分成有序r部分的全部划分方案集,注意这里每一部分可以为空,那么我们用总数减去为空的情况就可
以了,那么进一步有一个不为空,两个不为空,三个不为空,...等等。这样我们就可以容斥。
我们知道 ,
,
所以最后得到方案数为: