不論是在數論中,還是在組合數學中,都有着一些特殊的數列——斐波那契數、歐拉數,斯特林數、卡特蘭數,這篇文章,筆者將帶領讀者去探尋歷代數學家是如何從一些簡單基本的問題中提煉出這些特殊的數列。
斯特林數:
斯特林數有兩類,分別基於這不同情境的問題,我們首先介紹第二類斯特林數。
第二類斯特林數基於這樣一個問題模型:將含有n個元素的集合分成k個非空子集(用S2(n,k)表示),有多少張種情況?
首先我們從幾個簡單的例子開始,顯然,對於任意n>0,k=1,有S2(n,k) = S2(n,n) = 1。
而當n = 0時呢?S2(0,1) = ?我們用文字描述一下這個式子想要表達的東西,空集分成一個非空集合的情況數,顯然是不存在的,即S(0,1) = 0。
讓我們進一步討論k = 2的情況,對於S2(n,2),我們可以將其看成將第n個元素加入到前n-1個元素構成集合的一個任意子集中,由於這種選擇最終不能形成空集,因此需要排除一種情況,即S2(n,2) = 2^(n-1) - 1.
分析了k兩種特殊取值,我們嘗試用分析k=2時的思路進行推廣式的分析。考察S2(n,k),我們可將其看成在n-1個元素的集合上進行一系列操作。對於第n個元素,無非有如下兩種情況:
1.第n個元素單獨一組,此時出現S2(n-1,k-1)種情況。
2.第n個元素不是單獨一組,此時出現k*S2(n-1,k)種情況。
綜合起來,得到第二類斯特林數的遞推公式S2(n,k) = S2(n-1,k-1) + k*S2(n-1,k)。
那么這里我們結合剛剛學到的第二類斯特林數,來一道實戰的應用。
Q:當前有n場比賽以及m個桌子,組織每一場比賽需要一些桌子,那么現在請問,完成這n場比賽,有多少種不同的分配桌子的方法?(每個桌子至少要用一次。)
我們能夠看到,在應用第二類斯特林數的時候,S2(n,k)中兩個參量分別表示元素數和集合數,在具體的問題中如何恰到好處的找到這兩個參量,是用好它的關鍵。在這個問題當中,我們首先會很自然的考慮將m個桌子看成元素,然后分配到n個集合當中,但是這里不能夠忽視的一個重要細節是,對於每個桌子,它是可以在不同的比賽中多次出現的,因此這就與第二類斯特林數給出的模型漸行漸遠了,但是不要氣餒,我們這里可以反過來思考,如果將n場比賽當做元素呢?即這里給出m個集合,將第i場比賽往第j個集合里填,表示第i場比賽中會用到j,顯然這里n個元素僅能夠出現一次,這就與第二類斯特林數呼應了起來,即這里有S2(n,m)種情況。應考慮到,第二類斯特林數基於划分的k個集合無序排列,而在這個問題當中,m個桌子是互不相同的,因此最終的結果應該是S2(n,m)*m!。
下面我們來討論第一類斯特林數,它基於這樣一個問題模型,將含有n個元素分成k個輪換的所有方法數,為了與第一類斯特林數進行區別和比較,我們用S1(n,k)來表示。
這里需要解釋一下什么是輪換,就是元素之間構成了一個環,例如我們用A、B、C做一個輪換,可是是A->B->C->A,還可以是A->C->B->A,這是兩種本質不同的輪換,而輪換B->C->A->B顯然是與A->B->C->A本質相同的一種輪換。
我們先從特殊情形入手,我們容易看到,對於m元素,它們能夠組成的輪換數是要大於等於它們構成的集合數的,即有S1(n,k) >= S2(n,k),而當某個輪換只有1個或2個元素的時候,這時輪換是與集合相對應的,即有S1(n,n)=S2(n,n),S1(n,n-1) = S2(n,n-1)。
我們再從更一般的情況來尋求第一類斯特林數的遞推計算公式。當前模擬求解S1(n,k)的過程,其實非常類似在求得第二類斯特林數遞推式中的思維過程,我們基於n-1個元素的第一類斯特林數來實現,現在添加第n個元素,無非有如下兩種情況:
1.第n個元素單獨形成一個輪換,則有S1(n-1,k-1)種方法。
2.第n個元素不是單獨形成一個輪換,則有(n-1)*S1(n-1,k)種方法。(即將第n個元素插入n-1個元素構成的輪換形成的n-1個間隔中)
由此我們可以得到第一類斯特林數的遞推公式:S1(n,k) = S1(n-1,k-1) + (n-1)*S1(n-1,k)。
歐拉數:
歐拉數基於這樣一個簡單模型,對於整數1~n的一個排列記作p1p2p3……pn,我們考察n-1個pi和p(i+1)的大小關系,如果其中滿足p(i+1) > pi的組數為k(i∈[1,n-1]),則用E(n,k)來表示。
類似於對斯特林數的分析,我們從幾種特殊的情況入手。
k = 0 , 對於E(n,0),顯然有E(n,0) = 1.
k = n , 對於E(n,n) ,通過上文的描述我們可知,p(i+1)與pi至多有n-1組,因此有E(n,n) = 0。
下面我們探討如何用遞推關系來得到所有的歐拉數。
模擬計算E(n,k)的過程,我們基於n-1個元素的排列p1p2p3p4p5……pn中添加n,n-1個元素的排列會形成n+1個可以插入整數n的空擋,整數n的位置無非有如下兩種情況。
情況一:整數n插入到第1個空擋,或者插入第j個空擋並且滿足p(j-1)<pj,在表明這種操作在原來排列的基礎上沒有增加滿足p(i+1)>pj的組數,因此考慮建立其與C(n-1,k)之間的聯系,綜合這兩種情況,有k+1個滿足的地方,因此我們得到(k+1)*E(n-1,k)種情況。
情況二:整數n插入到第n+1個空擋,或者插入第j個空擋並滿足p(j-1)>pj,容易看到,這種操作使得滿足p(i+1)>pi的組數在原來的基礎上增加了1,因此我們考慮建立其與E(n-1,k-1)之間的關系,結合在情況一中尋求滿足情況的方法,這里其實就是用總數減去滿足情況一的空擋。(之所以這樣做是因為我們可以從E(n,k)值得得到滿足情況一的空擋數)。即,滿足情況二的空擋數為 n - (k-1) - 1,得到(n-k)E(n-1,k-1)種情況。
綜合兩種情況看,我們得到歐拉數的遞推公式:E(n,k) = (k+1)E(n-1,k) + (n-k)E(n-1,k-1).
調和數:
調和數首先基於這樣一個有趣的謎題。將n張撲克牌堆在一張桌子上,在滿足重力定理的情況下(即撲克的擺放不會使其從桌子上掉下來),求解這n張能夠伸出桌子邊緣的最大長度。
為使問題分析起來簡便,撲克的擺放中應使撲克邊緣和桌子邊緣平行,並記每個撲克的長度為2,重量為1.
對於這個過程的模擬,我們用一個"貪心"的策略,給出n張撲克,我們將桌子視為第n+1張撲克,而前n張撲克的最優搭法應該是這n張撲克的重心剛好落在第n+1撲克的邊緣,這使得這n張撲克不會掉落而且將“伸出”最長的距離,我們記dn表示牌堆最上面的一張牌的右側邊緣到從上數第n張牌右側邊緣的距離,那么對於有n張牌的上述謎題,d(n+1)即為謎題的答案。
為了實現我們的貪心策略,我們借助重心的位置公式——(w1p1+w2p2+w3p3……w3p3)/(w1+w2+w3……wn),其中wi、pi分別表示第i個物體的重量和位置。
則有d(n+1) = [(d1+1) + (d2+1)…… + (dn+1)]/n。
通過化簡,我們得到nd(n+1) = n + d1 + d2 +……+dn (n>=0) ①
(n-1)d(n) = (n-1) + d1 + d2 +……+d(n-1) (n>=1) ②
兩式相減,可得d(n+1) = d(n) + 1/n。
伯努利數:
關於伯努利數,本篇文章暫時給出其來源,其遞歸式及其證明涉及比較高深的數學方法,筆者目前暫時還力不能及。
伯努利數基於這樣一個函數Sm(n) = 0^m + 1^m + 2^m + …… + (n-1)^m = ∑k^m(k∈[0,n-1]),將S1(n)、S2(n)、S3(n)一直到S10(n),得到以下一系列多項式。
伯努利憑借其觀察力,找到了這一系列多項式系數與組合數C(m+1,k)之間的聯系並給出了通式,記Bi是第i個伯努利數,則Sm(n)可以表示成如下和伯努利數相關聯的形式。
Sm(n) = 1/(m+1) ∑ C(m+1 , k)*Bk*n^(m + 1 - k) ,其中k[0,m]。這是伯努利根據觀察和歸納給出通式,並沒有給出證明,而該通式的證明需要擾動法,這里暫且不提。
斐波那契數:
眾所周知,斐波那契數起源於意大利斐波那契的生兔子問題,其在自然界廣泛的統治力和其中蘊含的“黃金”讓人震驚,接下來我們來就《具體數學》中呈現出的內容,討論幾條關於斐波那契數列的性質。這里我們用F[n]表示第n個斐波那契數。
卡西尼恆等式:F[n+1]*F[n-1] - F[n]^2 = (-1)^n (n >= 1)
證明:利用歸納法。
當n = 1時,顯然成立。
假設,當n = k的時候該等式成立,則有F[k+1]*F[k-1] - F[k]^2 = (-1)^k ①, 即我們需要證當n = k + 1的時候,該等式仍然成立。
基於斐波那契數列最基本的遞推式,F[n] = F[n-1] + F[n-2] ,(n >= 2),我們從n = k + 1時的等式開始入手。
F[k+2]F[k] - F[k+1]^2 = (F[k+1]+F[k])F[k] - F[k+1]^2
= F[k]^2 - F[k+1]^2 + F[k+1]F[k]
= F[k]^2 - (F[k] + F[k-1])^2 + F[k+1]F[k]
= (F[k+1] + F[k])F[k] - F[k-1]^2 - 2F[k]F[k-1]
= F[k]^2 - F[k]F[k-1] - F[k-1]^2
= F[k]^2 - F[k-1]F[k+1]
= (-1)^(k+1)
證畢。
基於這個恆等式,我們能夠很好的了解卡西尼悖論的機理了。
即對於F[n]*F[n]的棋盤,我們切兩個上底是F[n-2],下底和高均為F[n-1]的直角梯形,切兩個直角邊分別為F[n-2]、F[n]的直角三角形,然后分別將梯形和直角三角形長為F[n-2]的邊重合構成直角三角形,會給人一種形成了一個直角邊分別為F[n+1]、F[n-1]的視覺錯覺,基於這種錯覺人們會覺得拼出了F[n-1]*F[n+1]的矩陣,這便可以解釋為什么會少一個小矩形。(從卡西尼恆等式看,也可以多一個,這取決於n的奇偶性。)