卡蘭特數對出棧序列的解法

2021-10-01 18:12:58 字數 2442 閱讀 2568

卡特蘭數又稱卡塔蘭數,

英文名catalan number,是

組合數學

中乙個常出現在各種計數問題**現的

數列。由以

比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)命名,其前幾項為 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

令h(0)=1,h(1)=1,catalan數滿足遞推式

[1]:

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

另類遞推式

[2]:

h(n)=h(n-1)*(4*n-2)/(n+1);

遞推關係的解為:

h(n)=c(2n,n)/(n+1)         (n=0,1,2,...)

遞推關係的另類解為:

h(n)=c(2n,n)-c(2n,n+1)       (n=0,1,2,...)

問題等價於:n個1和n個0組成一2n位的2

進製數,要求從左到右掃瞄,1的累計數不小於0的累計數,試求滿足這條件的數有多少?

首先,我們設f(n)=序列個數為n的出棧序列種數。同時,我們假定,從開始到棧第一次出到空為止,這段過程**棧的序數最大的是k。特別地,如果棧直到整個過程結束時才空,則k=n

首次出空之前第乙個出棧的序數k將1~n的序列分成兩個序列,其中乙個是1~k-1,序列個數為k-1,另外乙個是k+1~n,序列個數是n-k。

此時,我們若把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(n)=h(n)= c(2n,n)/(n+1)= c(2n,n)-c(2n,n+1)(n=0,1,2,……)。

最後,令f(0)=1,f(1)=1。

代數證明:

設p2n為這樣所得的數的個數。在2n位上填入n個1的方案數為 c(n 2n)

不填1的其餘n位自動填以數0。從c(n 2n)中減去不符合要求的方案數即為所求。

不合要求的數指的是從左而右掃瞄,出現0的累計數超過1的累計數的數。

不合要求的數的特徵是從左而右掃瞄時,必然在某一

奇數2m+1位上首先出現m+1個0的累計數,和m個1的累計數。

此 後的2(n-m)-1位上有n-m個1,n-m-1個0。如若把後面這部分2(n-m)-1位,0與1交換,使之成為n-m個0,n-m-1個1,結果得 1個由n+1個0和n-1個1組成的2n位數,即乙個不合要求的數對應於乙個由n-1個1和n+1個0組成的乙個排列。

反過來,任何乙個 由n+1個0,n-1個1組成的2n位數,由於0的個數多2個,2n是偶數,故必在某乙個奇數字上出現0的累計數超過1的累計數。同樣在後面的部分,令0 和1互換,使之成為由n個0和n個1組成的2n位數。即n+1個0和n-1個1組成的2n位數,必對應於乙個不合要求的數。

用上述方法建立了由n+1個0和n-1個1組成的2n位數,與由n個0和n個1組成的2n位數中從左向右掃瞄出現0的累計數超過1的累計數的數一一對應。

例如 10100101

是由4個0和4個1組成的8位2

進製數。但從左而右掃瞄在第5位(顯示為紅色)出現0的累計數3超過1的累計數2,它對應於由3個1,5個0組成的10100010。

反過來 10100010

對應於 10100101

因而不合要求的2n位數與n+1個0,n-1個1組成的排列一一對應,故有

p2n = c(n 2n)— c(n+1 2n)

這個結果是乙個「卡塔蘭數」catalan

hdoj 2067

1 #include2 __int64 a[36];3

intmain()415

while(scanf("

%d",&n)!=eof&&n!=-1)16

19return0;

20 }

view code

Catlan數之棧的出棧序列 legend

棧的出隊順序問題 一 catlan數 1 給出入棧序列,求出所有的出棧的序列個數 c 2n,n n 1 2 給出入棧序列,求出所有的出棧序列 1 舉例 1 2 3這三個數字,入棧並出棧共有5種方式,分別為 321 312 231 213 123。2 分析 1.可以用佇列 queue 來模擬輸入,佇列...

1330 出棧序列統計 卡特蘭數

題目描述 按照1,2,n 1,n的順序入棧,問可以得到多少種出棧序列。如n 3時有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1共5種出棧序列。解題思路 設f n 為n個數時的方案數。可知 f 0 1 f 1 1 f 2 2 f 3 5 當n 4時 f1 f2 f3 f4 1 2 3 4...

可能的出棧序列問題

首先的前提是進棧一定是要按照順序進棧如1 2 3 4的順序,如果第乙個出的是4,那麼要依次先進棧1 2 3 4,然後出棧,這樣的話第乙個是4,沒有其他的元素可以再進棧了,所以只能按順序出棧,這樣出棧的順序就是4 3 2 1。假如出棧的順序是3 4 2 1,你就要先分析出3的情況,只有先將1 2 3入...