放错信笺问题(错位排列含容斥原理)
2011-08-01 22:21阅读:
记得曾经有一道经常困惑的有关排列组合的问题,题目是这样的:
有3封信和3个信封,当然每个信封里只能装一封信,求每封信都不装在自己信封里的排列数。
有人看了觉得简单,用分步计数原理,若果把第一封信放到第二个信封里,那么剩两封信,第二封和第三封,第三封信不能放在第三个信封里只能放到第一个信封里(第二个信封里已经放了第一封信)剩下的第二封信只能放到第三个信封里。这样就知道,只要第一封信找到一个信封,就有唯一的放法使三封信全放错,第一封信可以放错的有2个位置,所以2×1=2,就是全放错的排列数。
那么,如果不是3封信呢,4封怎么办?那也好办,还那么想,先把第一封信放到第二个信封里,那么第二封信有三种放错的方法,分两类,一类是把第二封信放到第一个信封里,这样第三、四封信有唯一的放错方法,还有一类就是把第二封信放到第三或第四个信封里,要想把剩下的两封信(第三、第四封信)全放错,只有一种方法(因为所剩的信封序号有和所剩信一样的序号,要想放错只能把对应序号的信与信封分开),这类情况有2种结果,按分类计数原理,有1+2=3种情况。这样可以知道只要第一封信找到一个信封剩下的全部放错的排列数等于3,而第一封信有3种放错的情况,按照分步计数原理,全都放错的排列数为3×(1+2)=9
那么5封呢?5封信有点困难,可见信笺数越多算起来越困难,把所有情况都考虑到是件非常纠结的事儿,如果求n封信和n个信封,都放错怎么办呢?有人会好奇没事研究装错信干什么,但我们要知道这个问题是著名伯努利装错信笺问题,被数学家欧拉誉为“组合学的一道妙题”,当然我们不是数学家,对此感到无聊也是正常的,如果遇到一点点困难就退缩也难成大势,所以我
们要学习数学家们坚韧的信念,当然我们还要有浓厚的兴趣。言归正传,要想解决这道题,我们要明确容斥原理的一些性质。如果明白容斥原理,可以直接跳到后面来寻找最终结果。
说有三个集合A、B、C,若集合中元素个数用Card(集合名)表示,那么Card(A∪B∪C)怎么求?
方法很简单,就是
Card(A∪B∪C)=Card(A)+Card(B)+Card(C)-Card(A∩B)-Card(B∩C)-Card(A∩C)+Card(A∩B∩C)
所谓的容斥原理,如下图

当然两个集合更容易计算,即
Card(A∪B)=Card(A)+Card(B)-Card(A∩B)
那四个集合呢?
四个集合的图是这样的

看着比较乱, 考虑到比三个集合多一个,可以用Card(A∪B∪C)加上Card(D-A∪B∪C)就可以了,因为新插入一个集合,这样与D相关的集合就有了A∩D、B∩D、C∩D,由容斥原理,这三个集合的并集元素个数为
Card((A∩D)∪(B∩D
)∪(C∩D))=Card(A∩D)+Card(B∩D)+Card(C∩D)-Card(A∩B∩D)-Card(A∩C∩D)-Card(B∩C∩D)+Card(A∩B∩C∩D)
所以
Card(D-A∪B∪C)=Card(D)-Card((A∩D)∪(B∩D
)∪(C∩D))
=Card(D)-Card(A∩D)-Card(B∩D)-Card(C∩D)
+Card(A∩B∩D)+Card(A∩C∩D)+Card(B∩C∩D)-Card(A∩B∩C∩D)
又因为
Card(A∪B∪C)=Card(A)+Card(B)+Card(C)-Card(A∩B)-Card(B∩C)-Card(A∩C)+Card(A∩B∩C)
所以
Card(A∪B∪C∪D)=Card(A∪B∪C)+Card(D-A∪B∪C)
=Card(A)+Card(B)+Card(C)+Card(D)
-Card(A∩B)-Card(A∩C)-Card(A∩D)-Card(B∩C)-Card(B∩D)-Card(C∩D)
+Card(B∩C∩D)+Card(A∩C∩D)+Card(A∩B∩D)+Card(A∩B∩C)
-Card(A∩B∩C∩D)
通过2集合到4集合的容斥原理,可以发现容斥原理的规律
如果给定n个集合A(1),A(2),…,A(n),那么
Card(∪A(i))=∑Card(A(i))-∑Card(A(i)∩A(j))+∑Card(A(i)∩A(j)∩A(k))-
,…,
-(-1)^n*Card(∩A(i))
****这里i<j<k****
可以用数学归纳法证明,由于符号不容易写,而且写出来也很难理解,就不再赘述了,具体证法可以参照四个集合容斥原理的计算。
回过头来,让我们来看看放错信笺问题
设集合A(i)为第i封信装对的情况,那么
Card(A(i))=(n-1)!
(i=1,2,…,n)
同理,如果再给定一个信笺的序号j,那么集合A(i)∩A(j)表示第i、j封信都装对的情况,那么有
Card(A(i)∩A(j))=(n-2)!
(1≤i<j≤n)
同理,如果再给定一个信笺的序号k,那么集合A(i)∩A(j)∩A(k)表示第i、j、k封信都装对的情况,那么有
Card(A(i)∩A(j)∩A(k))=(n-3)!
(1≤i<j<k≤n)
……
我们知道A(1)∪A(2)∪A(3)…∪A(n)表示第一封装对或第二封装对或第三封装对……或第n封装对的情况,即存在装对信笺的情况,根据容斥原理,有
Card(A(1)∪A(2)∪A(3)…∪A(n))=∑Card(A(i))-∑Card(A(i)∩A(j))+∑Card(A(i)∩A(j)∩A(k))-
,…,
-(-1)^n*Card(∩A(i))
=n(n-1)!-C{2,n}(n-2)!+C{3,n}(n-3)!-,…,-(-1)^i*C{i,n}(n-i)!-,…,-(-1)^n*C{n,n}0!
=A{n-1,n}-A{n-2,n}+A{n-3,n}-,…,-(-1)^i*A{n-i,n}-,…,-(-1)^n*A{0,n}
那么全放错的情况就是排除有信件放对的情况,又因为所有装信的情况为排列数n!,所以n封信都放错的排列数为
n!-Card(A(1)∪A(2)∪A(3)…∪A(n))
=n!-A{n-1,n}+A{n-2,n}-A{n-3,n}+,…,+(-1)^i*A{n-i,n}+,…,+(-1)^n*A{0,n}
=A{n-2,n}-A{n-3,n}+,…,+(-1)^i*A{n-i,n}+,…,+(-1)^n*A{0,n}
观察这个式子,可以将它写成如下形式:
[(-1)^0/0!+(-1)^1/1!+(-1)^2/2!+(-1)^3/3!+,…,+(-1)^n/n!]*n!
这与e^x的泰勒级数非常像,当x=-1时,展开成级数的形式两边再乘以n!,有
n!/e=[(-1)^0/0!+(-1)^1/1!+(-1)^2/2!+(-1)^3/3!+,…,+(-1)^k/k!+…]*n!
可见n!/e与其非常相近,如果手边有计算器的话,可以直接计算n!/e保留到整数来计算排列数。
由这种方法会引起很多联想,没有疑问的学生是无法攀登到顶峰的,对于这道题如果认真分析,某些人必定会考虑这个疑问:题中,我们设集合A(i)为第i封信装对的情况,那么集合
A(1)∪A(2)∪A(3)…∪A(m)会表示什么呢?(m<n)有人会不耐烦,考虑那么多干什么呢?如果不去认真分析,半途而废的话,将错过比较重要的错位问题的推广,这才让我们意识到“子不学,断机杼”的故事有多么重要。
在这里A(1)∪A(2)∪A(3)…∪A(m)表示第一封信放对或第二封信放对或第三封信放对…或第m封信放对的情况,重要的不是这个,而是,对于任意给定的信件序号i1、i2、i3、…、im,集合
A(i1)∪A(i2)∪A(i3)…∪A(im)表示信件序号为i1或i2或i3或……或im放对的情况,我们应该知道
Card(A(1)∪A(2)∪A(3)…∪A(m))=Card(A(i1)∪A(i2)∪A(i3)…∪A(im))
因为一共有m个集合,那么其的并集的元素个数为
Card(A(i1)∪A(i2)∪A(i3)…∪A(im))
=∑Card(A(ij))-∑Card(A(ij)∩A(ik))+∑Card(A(ij)∩A(jk)∩A(il))-,…,-(-1)^m*Card(∩A(ij))
=m(n-1)!-C{2,m}(n-2)!+C{3,m}(n-3)!-,
…,-(-1)^p*C{p,m}(n-p)!-,…,
-(-1)^m*C{m,m}(n-m)!
如果把A(i1)∪A(i2)∪A(i3)…∪A(im)这些情况从全集里排除,即A(i1)∪A(i2)∪A(i3)…∪A(im)的补集合,那么该补集合表示:对于给定的序号为i1、i2、i3、…、im的信件都没放对的情况,
(当然,这里的ij=1,2,3,…,n)所以我们有,至少m封信放错的不同组合数为
n!-m(n-1)!+C{2,m}(n-2)!-C{3,m}(n-3)!+,
…,+(-1)^p*C{p,m}(n-p)!+,…,+(-1)^m*C{m,m}(n-m)!
=n![1-C{1,m}/A{1,n}+C{2,m}/A{2,n}-C{3,m}/A{3,n}+,
…,+(-1)^p*C{p,m}/A{p,n}+,
…,+(-1)^m*C{m,m}/A{m,n}]
因为公式比较复杂,所以再对全文总结一下,这可是曾经困惑许久的问题。
首先,我们的题目是:一共有
n封信和
n个信封,且
每个信封里只能装一封信,若求每封信都不装在自己信封里的排列数。
我们的公式是:
A{n-2,n}-A{n-3,n}+,…,+(-1)^i*A{n-i,n}+,…,+(-1)^n*A{0,n}
写成求和符号的形式:
∑{p=2,n}(-1)^p*A{n-p,n}
对于这道题的推广,若求至少有m封信放错的排列数,我们的公式是:
n![1-C{1,m}/A{1,n}+C{2,m}/A{2,n}-C{3,m}/A{3,n}+,
…,+(-1)^p*C{p,m}/A{p,n}+,
…,+(-1)^m*C{m,m}/A{m,n}]
写成求和符号的形式:
∑{p=0,m}(-1)^p*C{p,m}/A{p,n}
组合与集合巧妙的结合,可以达到意想不到的效果,就像这个问题。很多人对于容斥原理或排列组合并不是很明白,这都没关系,知识可以慢慢掌握,而我们对于问题的态度才是最重要的,只要我们有坚定的信念,顽强的毅力,知难而进的勇气,再加上一点点的兴趣,相信所有的困难都会被突破,困惑已久的问题也会
迎刃而解。
本文用到的符号解释:
C{m,n}=n!/m!(n-m)!
A{m,n}=n!/(n-m)!
注意集合A(i)与A{m,n}不同
∑{k=0,n}a(k)=a(0)+a(1)+a(2)+,…,+a(n)