必威电竞|足球世界杯竞猜平台

貝爾數
來源:互聯網

貝爾數是專業術語,拼音為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

#include

using namespace std;

unsigned __int64 c(int n,int m){

if(m>n/2)

m=n-m;

int i;

unsigned __int64 a=1,b=1;

for(i=n;i>n-m;i--)

a*=i;

for(i=2;i<=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<=n-1;i++)

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

}

return t;

}

int main(){

int n;

while(scanf("%d",&n)!=EOF)

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

return 0;

}

參考資料 >

生活家百科家居網