贝尔数 :专业术语

更新时间:2024-09-20 12:22

贝尔数是专业术语,拼音为bèi ěr shù,在组合数学里,贝尔数给出了集合划分的数目,以数学家埃里克·坦普尔·贝尔(Eric Temple Bell)命名,是组合数学中的一组整数数列。

定义

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

B是1因为空集 正好有1种划分方法。划分的定义要求空集的划分中的每个成员都是非空集合,而它们的并是 本身。所以 是它自身的唯一划分。(这是定义所允许的因为)

公式

贝尔数适合递推公式:

它们也适合“Dobinski公式”:

期望值为1的泊松分布的''n''次矩。

它们也适合“Touchard同余”:若p是任意质数,那么

每个贝尔数都是"第二类Stirling数"的和

Stirling数S(n, k)是把基数为n的集划分为正好k个非空集的方法的数目。

把任一概率分布的n次矩以首n个累积量表示的多项式,其系数和正是第n个贝尔数。这种数划分的方法不像用Stirling数那个方法粗糙。

贝尔数的指数母函数是

贝尔三角形

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

(1) 第一行第一项是1()

(2) 对于,第n行第一项等同第行最后一项。( )

(3) 对于,第n行第m项等于它左边和左上方的两个数之和。( )

结果如下:(OEIS的A011971数列)

每行首项是贝尔数。

这个三角形称为贝尔三角形、Aitken阵列或Peirce三角形(Bell triangle, Aitken's array, Peirce triangle)。

程序

计算贝尔数的程序如下:(VC++环境下调试通过)

#include\u003ciostream\u003e

#include \u003cstdio.h\u003e

using namespace std;

unsigned __int64 c(int n,int m){

if(m\u003en/2)

m=n-m;

int i;

unsigned __int64 a=1,b=1;

for(i=n;i\u003en-m;i--)

a*=i;

for(i=2;i\u003c=m;i++)

b*=i;

return a/b;

}

unsigned __int64 bell(int n){

unsigned __int64 t=0;

int i;

if(n==0)

return 1;

else{

for(i=0;i\u003c=n-1;i++)

t+=c(n-1,i)*bell(i);

}

return t;

}

int main(){

int n;

while(scanf("%d",\u0026n)!=EOF)

printf("%I64u\n",bell(n));

return 0;

}

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: