贝尔数——详解

贝尔数  以埃里克·坦普尔·贝尔命名,是组合数学中的一组整数数列,开首是(OEIS A000110):

 是基数为  的集合的划分方法的数目。集合  的一个划分是定义为  的两两不相交的非空子集的族,它们的并是 。例如  因为 3 个元素的集合  有 5 种不同的划分方法:

 是 1 因为空集正好有 1 种划分方法。

递推公式

贝尔数适合递推公式:

证明:

 是含有  个元素集合的划分个数,设  的集合为  的集合为 ,那么可以认为  是有  增添了一个  而产生的,考虑元素 

  • 假如它被单独分到一类,那么还剩下  个元素,这种情况下划分数为 ;

  • 假如它和某 1 个元素分到一类,那么还剩下  个元素,这种情况下划分数为 

  • 假如它和某 2 个元素分到一类,那么还剩下  个元素,这种情况下划分数为 

  • ……

以此类推就得到了上面的公式。

每个贝尔数都是相应的 第二类斯特林数 的和。 因为第二类斯特林数是把基数为  的集合划分为正好  个非空集的方法数目。

贝尔三角形

用以下方法构造一个三角矩阵(形式类似杨辉三角形):

  • 对于 ,第  行首项等于上一行的末项,即 
  • 对于 ,第  行第  项等于它左边和左上角两个数之和,即 

部分结果如下:

每行的首项是贝尔数。可以利用这个三角形来递推求出贝尔数。

参考实现

 
 

指数生成函数

考虑贝尔数的指数生成函数及其导函数:

根据贝尔数的递推公式可以得到:

这是一个卷积的式子,因此有:

这是一个微分方程,解得:

最后当  时 ,带入后解得 ,得到贝尔数指数生成函数的封闭形式:

预处理出  的前  项后做一次 多项式 exp 即可得出贝尔数前  项,时间复杂度瓶颈在多项式 exp,可做到  的时间复杂度。

参考文献

https://en.wikipedia.org/wiki/Bell_number

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值