小球与盒子(组合数学基本模板)

烂漫一生 提交于 2019-12-04 06:36:11

小球与盒子

在离散数学里面,组合数是一个重点。下面就对常见的几个小球盒子模型进行总结

参考了chengni的这篇文章,在此表示感谢。

注意

  • 以下未说明,均默认球数为n,盒子数为m。
  • \(C_{n}^{m}=\binom{n}{m}\) ,两者是等价的。
  • 从不同变为相同需要乘以阶乘而不是除

一、球相同,盒子不同,不可以有空盒

很经典的隔板法模型,相同的物品划分为几个不同的集合。设球为n,盒子为m,方案数为
\[ ans= \binom{n-1}{m-1} \]

二、球相同,盒子不同,允许空盒

这和上面唯一的区别就是允许空盒。不妨假设每个空盒已经被我们放了一个球,那么问题就变成了上面的情况,。所以我们可以看做自己有 n+m 个小球,然后我们在排列完之后在每一组都删去一个小球,这样就能枚举出有空盒的情况了。n个球分成m个集合等价于n+m个球分成m个非空集合。
于是答案为
\[ ans= \binom{n+m-1}{m-1} \]

(在这里把盒子想成集合会好想一些)

三、球不同,盒子不同,允许空盒

对于每一个球,你都可以放到1~m的任意位置,所以方案数为
\[ ans= m^n \]

四、球不同,盒子相同,不可以有空盒

对于这个问题有个东西叫做第二类斯特林数

在数学上,斯特林数有两类,本文只介绍第二类。

第二类斯特林数(\(S2[n][m]\))的含义:n 个不同的小球放入m个相同的盒子中(且盒子不能为空)的方案数 。它有个递推公式\(S2[i][j]=S2[i-1][j]\times j+S2[i-1][j-1]\)

我们可以这样理解:

  1. 如果\(i-1\)个元素已经构成了\(j-1\)个集合,那么第\(i\)个元素单独构成一个集合的方案数为\(S2[i-1][j-1]\times 1\)(空的集合都是无序相同的,任选一个即可);
  2. 如果\(i-1\)个元素已经构成了\(j\)个集合,将第\(i\)个元素插入到任一个集合中的方案数为\(S2[i-1][j]\times j\)(选择\(j\)个集合中的一个有\(j\)种选法)。

(在这里把盒子想成集合会好想一些)

当然,第二类斯特林数还有另一个公式,需要用到容斥。
\[ S2[n][m]=\frac{1}{m!}\times \sum^{m}_{k=0}(-1)^k \binom{m}{k} \times (m-k)^n \]
证明:

为了方便,不妨假设\(A_i\)表示第\(i\)个盒子为空的情况。总方案数为\(S\),则有
\[ S=m^n \\ A_i=(m-1)^n \]
\(A_i\):对于每个球,都只有\(m-1\)种选择。所以是\((m-1)^n\)
\[ A_1+A_2+A_3+A_4+\cdots+A_m=\sum_{i=1}^{m}A_i=m(m-1)^n=\binom{m}{1}\cdot(m-1)^n \]
这一个盒子为空的情况,但同时也包含了两个盒子为空的。两个盒子为空的方案数如下
\[ \sum_{i=1}^{m}\sum_{j>i}(A_i\cap A_j)=\binom{m}{2}\cdot(m-1)^n \]

如此推导下去,就可以得出所求第二类斯特林数:
\[ S2[i][j]=|\bar{A_1}\cap\bar{A_2}\cap\cdots\cap\bar{A_m}|\\=m^n-\sum_{i=1}^{m}|A_i|+\sum_{i=1}^{m}\sum_{j>i}(A_i\cap A_j)-\cdots+(-1)^{m}|A_1\cap A_2\cap\cdots\cap A_m|\\ =m^n+(-1)\cdot\binom{m}{1}\cdot(m-1)^n+(-1)^2\cdot\binom{m}{2}\cdot (m-2)^n+\cdots+(-1)^k\binom{m}{k}\cdot(m-k)^n\cdots\\ =\sum_{k=0}^{m}\binom{m}{k}(m-k) \]
最后除一个 \(m!\) 消掉有序性,如果不除就是有序的

五、球不同,盒子不同,不可以有空盒

其实就是上一个问题的最后一句话,“如果不除就是有序的。”
\[ ans=m!\cdot S2[n][m]; \]

六、球不同,盒子不同,允许空盒

我们可以枚举每次有几个盒子非空,最后加起来就好了
\[ ans=\sum_{i=1}^{m}S2[n][i] \]

七、球相同,盒子也相同,允许空盒

\(f[i][j]\)表示将\(i\)个球放到\(j\)个盒子的方案数

  • 当i < j 时,剩下的j-i个盒子没什么用,所以方案数为\(f[i][i]\)
  • 当i >= j 时

    • 如果将盒子放满,方案数为\(f[i-j][j]\)
    • 如果不把盒子放满,方案数为\(f[i][j-1]\)

然后就可以\(n^2\)递推了。

八、球相同,盒子也相同,无空盒

先假设每个盒子里都有一个球,所求即\(ans=f[n-m][m]\)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!