n个球放到m个盒子中,球和盒子是否有区别,是否允许空盒?共有23=8种状态。
为了方便叙述,我们将有区别,有空盒,看做是显性的特性,用1表示,无区别,无空盒看做是非显性的特性,用0表示。
因此首先探讨第一种类型
111型(n个有区别的球,放到n个有区别空盒种,允许有空盒的方案数),这个提法应该是我的原创,:)
求这个类型有很多种方法:
(1)从盒的角度上看
第一个盒可以放0个,1个...n个球。同理,依次每个盒也如此。
用指数型母函数:
Ge(x)=(1+x+x2/2!+...++xn/n!)m
其中x的n次方的系数即为所求。
Ge(x)=emx=1+mx+m2x/2!+...+mnx/n!)
因此方案数有mn种,使用指数型母函数的原因是盒内球的顺序照成的重复度要去掉。
虽然这个问题没有必要这么求解,但下面会看到这个方法的普适性。
(2)从球的角度看
令xi表示第i个盒,每个球可以选择去第一个盒,第二个盒。。。第n个盒。
则(x1+x2+...+xm)n的系数和即为所求。
令x1,x2,...xn均为1,则结果为mn。
(3)看做是X和Y
将球投进盒中,看作是X映射到Y种的一个函数,则投法相当于球这样的函数集的大小。
球投在盒中,可以看做是一个球和一个盒发生了一次关系,但是区别在于,球一次只能投在一个盒中,但一个盒子可以有多个球投入。
因此可以把球看做是自变量,盒看做是应变量。
球1可以和m个盒发生关系(m种可能),球2也是如此。因此总共的可能是mn种可能。
(4)用字符串模型来解释
将n个球看做是长度为n的字符串(字符串的位置不同,因此自然的表示了n个不同的球),而盒看做是字符,全部的盒号看做是一个字符集。例如2个球,投入到3个盒子中,3个盒子用A,B,C表示,则全部的投入方案可以表示为:
AA 【2个球都投入到A中】
AB
AC
BA
BB
BC
CA
CB
CC
注意,这里AB和BA是两种方案,前者表示第一个球投入在A中,第二个球投入在B中,后者表示第一个球投入在B中,第二个球在A中。则字符串第一位可以有m种取法,第二位也是m种,用乘法法则,共计有mn种。
该问题的一个应用:
求找到一个hash函数且无碰撞的概率,这里待存储的key看做是球,key存放的位置看做是盒号。
球的数目为n,盒的数目为m,有上面可知,这样的hash函数的种类有mn种。
不冲突的hash函数的种类有(m)(m-1)(m-2)...(m-n+1)=m!/(m-n)!。
则找到这样一个函数的概率是m!/(mn*(m-n)!)。
111型可以看做是X集到Y集映射的全部函数集的大小。
后续博客:
8种球盒问题(111型)
http://blog.csdn.net/pennyliang/archive/2010/04/05/5452576.aspx
8种球盒问题(101型)
http://blog.csdn.net/pennyliang/archive/2010/04/06/5456033.aspx
8种球盒问题(110型,100型)
http://blog.csdn.net/pennyliang/archive/2010/04/05/5452741.aspx
8种球盒问题(011型)
http://blog.csdn.net/pennyliang/archive/2010/04/10/5471206.aspx
8种球盒问题(010型)
http://blog.csdn.net/pennyliang/archive/2010/04/24/5524572.aspx
8种球盒问题(001型,000型)
http://blog.csdn.net/pennyliang/archive/2010/05/05/5561071.aspx