天天看點

卡特蘭數及其應用

卡特蘭數及其應用
卡特蘭數及其應用
卡特蘭數及其應用

出棧次序

一個棧(無窮大)的​​進棧​​序列為1,2,3,…,n,有多少個不同的​​出棧​​序列? 

正常分析

首先,我們設 f(n)=序列個數為n的出棧序列種數。(我們假定,最後出棧的元素為k,顯然,k取不同值時的情況是互相獨立的,也就是求出每種k最後出棧的情況數後可用加法原則,由于k最後出棧,是以,在k入棧之前,比k小的值均出棧,此處情況有f(k-1)種,而之後比k大的值入棧,且都在k之前出棧,是以有f(n-k)種方式,由于比k小和比k大的值入棧出棧情況是互相獨立的,此處可用乘法原則,f(n-k)*f(k-1)種,求和便是Catalan遞歸式。)

首次出空之前第一個出棧的序數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。

非正常分析

對于每一個數來說,必須進棧一次、出棧一次。我們把​​進棧​​設為狀态‘1’,出棧設為狀态‘0’。n個數的所有狀态對應n個1和n個0組成的2n位​​二進制數​​。由于等待入棧的操作數按照1‥n的順序排列、入棧的操作數b大于等于​​出棧​​的操作數a(a≤b),是以輸出序列的總數目=由左而右掃描由n個1和n個0組成的2n位二進制數,1的累計數不小于0的累計數的方案種數。

在2n位二進制數中填入n個1的方案數為c(2n,n),不填1的其餘n位自動填0。從中減去不符合要求(由左而右掃描,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個0和n-1個1組成的排列。

反過來,任何一個由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位數必對應一個不符合要求的數。

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

顯然,不符合要求的方案數為c(2n,n+1)。由此得出輸出序列的總數目=c(2n,n)-c(2n,n-1)=h(n)。

類似問題 

n對括号正确比對數目

給定n對括号,求括号正确配對的字元串數,例如:

0對括号:[空序列] 1種可能

1對括号:() 1種可能

2對括号:()() (()) 2種可能

3對括号:((())) ()(()) ()()() (())() (()()) 5種可能

将上例的1換成左括号,0換成右括号,則所有包含n對括号的合法運算式的個數也是卡特蘭數

買票找零

有2n個人排成一行進入劇場。入場費5元。其中隻有n個人有一張5元鈔票,另外n人隻有10元鈔票,劇院無其它鈔票,問有多少種方法使得隻要有10元的人買票,售票處就有5元的鈔票找零(将持5元者到達視作将5元入棧,持10元者到達視作使棧中某5元出棧)

計算長度為2n的Dyck Words的個數

h(n) 表示長度2n的dyck word的個數。Dyck詞是一個有n個X和n個Y組成的字串,且所有的字首字串皆滿足X的個數大于等于Y的個數。以下為長度為6的dyck words:

XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY

計算n×n格點中單調路徑的個數

h(n)表示所有在n×n格點中不越過對角線的單調路徑的個數。一個單調路徑從格點左下角出發,在格點右上角結束,每一步均為向上或向右。計算這種路徑的個數等價于計算Dyck word的個數:X代表“向右”,Y代表“向上”。下圖為n = 4的情況:

                                                          

卡特蘭數及其應用