卡特蘭數的證實及其應用

卡特蘭數又稱卡塔蘭數,卡特蘭數是組合數學中一個常出如今各類記數問題中的數列spa

原理
設h(n)爲catalan數的第n+1項,令h(0)=1,h(1)=1,catalan數知足遞推式  :
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)
 
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
 
另類遞推式:
h(n)=h(n-1)*(4*n-2)/(n+1);
 
遞推關係的解爲:
h(n)=C(2n,n)/(n+1) (n=0,1,2,...)
 
遞推關係的另類解爲:( c(2n,n-1)與c(2n,n+1)是同樣的,排列組合知識 )
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)
 
 
下面經過一個例題來體現其遞推式的產生過程

一個棧(無窮大)的進棧序列爲1,2,3,…,n,有多少個不一樣的出棧序列?(進棧的順序已經肯定了,且n>=2orm

1.咱們設  f(n)=序列個數爲n的出棧序列種數。同時,咱們假定,從開始到棧第一次出到空爲止,這段過程當中第一個出棧的序數是k。特別地,若是棧直到整個過程結束時才空,則k=n。blog

2.第一個出棧的序數k將1~n的序列分紅兩個序列,其中一個序列是1~k-1,序列個數爲k-1,另一個序列是k+1~n,序列個數是n-k。數學

3.咱們若把k視爲肯定一個序數,那麼根據乘法原理,f(n)的問題就等價於——序列個數爲k-1的出棧序列種數乘以序列個數爲n - k的出棧序列種數,即選擇k這個序數的 f(n)=f(k-1)×f(n-k)。而k能夠選1到n,因此再根據加法原理,將k取不一樣值的序列種數相加,獲得的總序列種數爲:f(n)=f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)。( f (0)==1 f(1)==1),因此此問題的求解式知足卡特蘭數的原理的。it

4.卡特蘭數的遞推關係的解,即求出此問題不一樣出棧順序有多少。咱們用折現法來證實。io

事實上,能夠認爲問題是,任意兩種操做(入棧和出棧),要求每種操做的總次數同樣,且進行第k次出棧前必須先進行至少k次入棧。咱們假設一我的在原點,入棧是此人沿右上角45°走一個單位(一個單位設爲根號2,這樣他第一次進行操做1就恰好走到(1,1)點),出棧是此人沿右下角45°走一個單位。第k次出棧前必須先進行至少k次入棧,就是說明所走出來的折線不能跨越x軸走到y=-1這條線上!在進行n次入棧和n次出棧後,此人必將到到達(2n,0)!若無跨越x軸的限制,折線的種數將爲 C(2n,n),即在2n次操做中選出n次做爲入棧的方法數。class

如今只要減去跨越了x軸的狀況數。對於任意跨越x軸的折線狀況,必有將與y=-1相交的點。找出第一個與y=-1相交的點k,將k點以右的折線根據y=-1對稱(即後面曲線的變化規律是反的可是數量上是保持一致的)。能夠發現終點最終都會從(2n,0)對稱到(2n,-2)(由於的座標終點是固定的)。因爲對稱老是能進行的,且是可逆的。(即所求不一樣折線的總數是同樣的,等價的)咱們能夠得出全部跨越了x軸的折線總數是與從(0,0)到(2n,-2)的折線總數數量相等。撇開k點後的實線折線圖無論,虛線表示的其實就是入棧和出棧的總數是2n,而出棧的數量比入棧多了一次(沒必要在乎其在文字上的合理性,咱們只是須要求出其值)那麼出棧就出了n+1次,入棧就入了n-1次。因此其不一樣折線數量爲C(2n,n-1) or C (2n,n+1).原理

因此卡特蘭數遞推關係的解爲f(n)=C(2n,n)-C(2n,n-1) or f(n)=C(2n,n)-C(2n,n+1)

map

相關文章
相關標籤/搜索