组合数学(2)——盒子与球
组合数学(球和盒子)
将球是否相同,盒子是否相同,是否可以有空盒分为八种情况。
将球设为个,盒子设为个(有空盒指的是可以有空盒)。
1.球相同,盒子不同,无空盒
挡板法,相当于将个球分成组,相当于在中插入块板子。
结论是:
2.球相同,盒子不同,有空盒
在每个盒子里面先放个球,一共个球,现在就等价于(1)的这个问题。
结论是:
3.球相同,盒子相同,有空盒
假设为个球放到个盒子里的方案数。
如果,此时个盒子必然装不满,
如果,此时可以选择将盒子放满或者盒子不放满。
如果没放满,那就减掉一个盒子,此时为。
如果放满了,那就在每个盒子上里放一个球。现在就是。
。
得到转移方程之后考虑边界条件。
如果没有球或者只有一个盒子,此时方案数为1,即。
for(ll i = 0;i <= n;i++){
for(ll j = 1;j <= m;j++){
if(j == 1|| i == 0)f[i][j] = 1;
else if(i < j) f[i][j] = f[i][i];
else if(i >= j) f[i][j] = f[i-j][j]+f[i][j-1];
}
}
4.球相同,盒子相同,无空盒
类比上面问题3的情况,我们发现答案就是的值。
5.球不同,盒子不同,有空盒
对于每一个球,我们可以放在任意一个位置,也就是说每一个球都有种取法。
故一共有种方案数。
6.球不同,盒子相同,无空盒
这个问题需要拓展第二类斯特林数。
将读作关于的第二类斯特林数。
两种求法:
递推:
单独看第一个球,如果第一个球独立存在于一个盒子里面。那么就是。
如果不是如此,那么就是把这个球放在任意的盒子里面。也就是在的情况下,找一个盒子塞进去一个球,因为有个盒子所以就乘。
容斥:
(说实话可能需要用到多项式的知识,所以完全不会)
联系问题5,问题6还可以得到一个性质
什么意思呢?
左边指的是,个球任意的放在个盒子里(5)
右边,我们枚举有多少个非空的盒子数(盒子不同,乘上),再乘上我们选盒子的方案数。
S[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
S[i][j]=S[i-1][j-1]+j*S[i-1][j];
}
}
7.球不同,盒子不同,无空盒
与上面问题6基本相同,只需要乘即可
8.球不同,盒子相同,有空盒
也是对6的拓展,只需要枚举非空盒子的对应的方案数量即可 。
对于这个问题我们再引入一个数列——贝尔数
贝尔数更常见的定义为,将个数的集合所有的划分方式,你可以认为这是问题8在盒子数与球数相同时的解。
它有一个递推公式:
证明:
假设,是含有个元素集合的划分个数。
先单独拿出一个一个元素。
这个元素分为一类,剩下个元素,有
这个元素和某1个单独元素分成一类,
这个元素和某2个单独元素分成一类,
求和可得。
在关注问题8和贝尔数就可以得到贝尔数和第二类斯特林数的关系。
以上就是盒子和小球小小的总结。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具