球放入盒的组合问题

        最近看《算法导论》第五章,一直纠结球放入盒中的问题,索性查了一下,发现大部分资料有点难懂orz...,这里把自己理解的内容记录一下吧,也算是一个总结了。

问题:n个小球放入m个盒中,由于球和盒子可以相同也可以不同,可以允许空盒也可以不允许空盒,因此有8种情况。

       1-1 n个相同的球放入m个不同的盒子中,不允许空盒子

  这个比较好理解,理解为n个球分为m堆,每堆至少1个球。球有n-1个空隙,相当于切m-1刀,

       1-2 n个相同的球放入m个不同的盒子中,允许空盒子

根据组合数性质:

    也可以这么想,相比上一个情况,可以想象每个盒子里已经放了一个,因此此时有m+n个小球,例如:有3个球2个盒子,不允许空盒情况如第一张图,允许空盒情况如第二张图,箭头左边的球放入盒子1,右边的球放入盒子2

       2-1  n个相同的球m个相同的盒子,不允许空

先从n个球中抽取m个球,分别填入m个盒子中,然后剩下n-m个球再开始划分,这一过程可以用一个公式表示(拆分公式):

表示n个球放入m个相同盒子中,基本情况是:

解释一下:表示n个球放入1个盒子中,只有一种情况,表示n个相同的球放入n-1个相同的盒子中,只有空一个盒子这一种可能。 

       2-2  n个相同的球m个相同的盒子,允许空

分析类似1-2中允许为空的情况

        3-1  n个不同的球m个相同的盒子,不允许空

这个需要借助一个递归式,叫做第二类斯特林数,具体可以见https://blog.csdn.net/Cold_Chair/article/details/75027786

求解出来就是

        3-2  n个不同的球m个相同的盒子,允许空

        4-1  n个不同的球m个不同的盒子,不允许空

可以在3-1的基础上,再加上第二步:排列m个箱子,因此是

        4-2  n个不同的球m个不同的盒子,允许空 

这个大概是最简单的了,orz....排列真的奇妙,如果再给我依次机会我不想接触它了 /无奈无奈

参考了网友的成果,再次表示感谢:

https://blog.csdn.net/qwb492859377/article/details/50654627

https://blog.csdn.net/zhangjie1989/article/details/51488402

猜你喜欢

转载自blog.csdn.net/xuqn0606/article/details/81782187
今日推荐