贝尔数
贝尔数以埃里克·坦普尔·贝尔命名,是组合数学中的一组整数数列,开首是 (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 数。
参考实现
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];
}
}
参考文献¶
https://en.wikipedia.org/wiki/Bell_number
buildLast update and/or translate time of this article,Check the history
editFound smelly bugs? Translation outdated? Wanna contribute with us? Edit this Page on Github
peopleContributor of this article OI-wiki
translateTranslator of this article Visit the original article!
copyrightThe article is available under CC BY-SA 4.0 & SATA ; additional terms may apply.