贝尔数
贝尔数以埃里克·坦普尔·贝尔命名,是组合数学中的一组整数数列,开首是 (OEIS A000110):
公式
贝尔数适合递推公式:
证明:
假如它被单独分到一类,那么还剩下
假如它和某 1 个元素分到一类,那么还剩下
假如它和某 2 个元素分到一类,那么还剩下
以此类推就得到了上面的公式。
每个贝尔数都是相应的第二类 斯特林数 的和。
因为第二类斯特林数是把基数为
贝尔三角形
用以下方法构造一个三角矩阵(形式类似杨辉三角形):
- 第一行第一项为 1
; - 对于
,第 行第一项等于第 行的第 项 ; - 对于
,第 行的第 项等于它左边和左上角两个数之和
部分结果如下:
每行的首项是贝尔数。可以利用这个三角形来递推求出 Bell 数。
参考实现
=== "C++"
```cpp
const int maxn = 2000 + 5;
int bell[maxn][maxn];
void f(int n) {
bell[1][1] = 1;
for (int i = 2; i <= n; i++) {
bell[i][1] = bell[i - 1][i - 1];
for (int j = 2; j <= i; j++)
bell[i][j] = bell[i - 1][j - 1] + bell[i][j - 1];
}
}
```
=== "Python"
```python
maxn = 2000 + 5
bell = [[0 for i in range(maxn)] for j in range(maxn)]
def f(n):
bell[1][1] = 1
for i in range(2, n + 1):
bell[i][1] = bell[i - 1][i - 1]
for j in range(2, i + 1):
bell[i][j] = bell[i - 1][j - 1] + bell[i][j - 1]
```
参考文献
贡献者:@Menci@Ir1dXD@WenzelTian@Great-designer
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用