经典组合数学模型:盒子与球问题
前言
- 组合数学也是数学中一个比较重要的分支,而其中最经典的模型莫过于盒子与球问题。
问题
- 按照球是否不同,盒子是否不同,盒子是否允许为空,大致可以分为 \(2^3\),也就是 \(8\) 种问题。
- 给定 \(N\) 个不同的球,放进 \(M\) 个不同的盒子,盒子允许为空,有多少种方案?\((A)\)
- 给定 \(N\) 个不同的球,放进 \(M\) 个不同的盒子,盒子不允许为空,有多少种方案?\((B)\)
- 给定 \(N\) 个不同的球,放进 \(M\) 个相同的盒子,盒子允许为空,有多少种方案?\((C)\)
- 给定 \(N\) 个不同的球,放进 \(M\) 个相同的盒子,盒子不允许为空,有多少种方案?\((D)\)
- 给定 \(N\) 个相同的球,放进 \(M\) 个不同的盒子,盒子允许为空,有多少种方案?\((E)\)
- 给定 \(N\) 个相同的球,放进 \(M\) 个不同的盒子,盒子不允许为空,有多少种方案?\((F)\)
- 给定 \(N\) 个相同的球,放进 \(M\) 个相同的盒子,盒子允许为空,有多少种方案?\((G)\)
- 给定 \(N\) 个相同的球,放进 \(M\) 个相同的盒子,盒子不允许为空,有多少种方案?\((H)\)
解法
-
A :给定 \(N\) 个不同的球,放进 \(M\) 个不同的盒子,盒子允许为空,有多少种方案?
对于每一个球,都有 \(M\) 种选择,所以答案即为 \(M^N\)
-
F :给定 \(N\) 个相同的球,放进 \(M\) 个不同的盒子,盒子不允许为空,有多少种方案?
经典隔板法问题,可以转化为:在 \(N\) 个球之间的 \(N-1\) 个间隙中选择 \(M-1\) 个位置将其分成 \(M\) 份,组合数直接求解。答案即为 \(C_{N-1}^{M-1}\)
-
E :给定 \(N\) 个相同的球,放进 \(M\) 个不同的盒子,盒子允许为空,有多少种方案?
和 \(F\) 题类似,只不过盒子允许为空,那么这个时候我们可以假设每个盒子里都已经放了一个球,这个时候实际上就有 \(N+M\) 个球了,类似的,我们再次使用隔板法。对于每一种方案,我们就可以想象成每个空隙右边的第一个球是提前放好在盒子里的,如果将这个球省略,正好就是盒子允许为空的一种方案。故答案即为 \(C_{N+M-1}^{M-1}\)
-
G :给定 \(N\) 个相同的球,放进 \(M\) 个相同的盒子,盒子允许为空,有多少种方案?
设 \(f[n][m]\) 表示将 \(n\) 个球放到 \(m\) 个盒子里的方案数。我们可以分两种情况来考虑:1.有一个盒子不放球的情况,那么答案就是 \(f[n][m-1]\)。2.所有的盒子都放一个球,那么答案就是 \(f[n-m][m]\)。根据加法原理,我们可以得到递推式:\(f[n][m]=f[n][m-1]+f[n-m][m],m=\min(m,n)\)。边界:\(f[0][m]=1,f[n][1]=1\)
-
H :给定 \(N\) 个相同的球,放进 \(M\) 个相同的盒子,盒子不允许为空,有多少种方案?
每个盒先放一个球,然后就可以变成问题 \(G\)。答案:\(0\quad(N<M)\) 或者 \(f[N-M][M]\)
-
D :给定 \(N\) 个不同的球,放进 \(M\) 个相同的盒子,盒子不允许为空,有多少种方案?
设 \(f[n][m]\) 表示将 \(n\) 个球放到 \(m\) 个盒子里的方案数。那么对于第 \(n\) 个球,则有两种选择:1.其单独放在一个盒子里,那么答案就是 \(f[n-1][m-1]\)。2.其和其他的球共用一个盒子,因为有 \(m\) 个盒子可以选择,那么答案就为 \(m\times f[n-1][m]\)。实际上这就是第二类斯特林数。根据加法原理,递推式为 \(f[n][m]=f[n-1][m-1]+m\cdot f[n-1][m]\)。边界:
if(m==n||m==1) return 1
。 -
C :给定 \(N\) 个不同的球,放进 \(M\) 个相同的盒子,盒子允许为空,有多少种方案?
和 \(D\) 类似,分别考虑有 \(0\sim M-1\) 个盒子为空的情况,那么答案就为 \(\sum_{i=1}^nf[n][i]\)
-
B :给定 \(N\) 个不同的球,放进 \(M\) 个不同的盒子,盒子不允许为空,有多少种方案?
和 \(D\) 题类似,假如我们现在已经得到了将 \(N\) 个不同的球放进 \(M\) 个相同的盒子里的方案,那么实际上由于盒子是不同的,那么还需要对盒子进行排序,(因为盒子有异,所以交换两个盒子的顺序算不同的方案),乘上 \(M\) 的阶乘即可。
——2021年2月9日