贝尔数
贝尔数以埃里克·坦普尔·贝尔命名,是组合数学中的一组整数数列,开首是 (OEIS A000110):
公式¶
贝尔数适合递推公式:
证明:
假如它被单独分到一类,那么还剩下
假如它和某 1 个元素分到一类,那么还剩下
假如它和某 2 个元素分到一类,那么还剩下
以此类推就得到了上面的公式。
每个贝尔数都是相应的第二类 斯特林数 的和。 因为第二类斯特林数是把基数为
贝尔三角形¶
用以下方法构造一个三角矩阵(形式类似杨辉三角形):
- 第一行第一项为 1
(a_{1,1}=1) - 对于
n>1 n n-1 n - 1 (a_{n,1}=a_{n-1,n-1}) - 对于
m,n>1 n m (a_{n,m}=a_{n,m-1}+a_{n-1,m-1})
部分结果如下:
每行的首项是贝尔数。可以利用这个三角形来递推求出 Bell 数。
参考实现
1 2 3 4 5 6 7 8 9 10 11 | // C++ Version
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];
}
}
|
1 2 3 4 5 6 7 8 9 | # Python Version
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]
|
参考文献¶
https://en.wikipedia.org/wiki/Bell_number
build本页面最近更新:,更新历史
edit发现错误?想一起完善? 在 GitHub 上编辑此页!
people本页面贡献者:OI-wiki
copyright本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用