1. 程式人生 > >【卡特蘭數】

【卡特蘭數】

傳送門

卡特蘭遞推公式

1. C_n = /frac{1}{n+1}{2n/choose n} = /frac{(2n)!}{(n+1)!/,n!} /quad n/ge 0  

2. C_n = {2n/choose n} - {2n/choose n+1} /quad n/ge 0

3. C_0 = 1 /quad , /quad C_{n+1}=/frac{2(2n+1)}{n+2}C_n

4. /begin{displaymath}C_0 = 1 /quad , /quad C_{n+1}=/sum_{i=0}^{n}C_i/,C_{n-i}/quad n/ge 0/end{displaymath}

5. /begin{displaymath}C_n= /frac 1{n+1} /sum_{i=0}^n {n /choose i}^2/end{displaymath}

卡特蘭數的應用

1. 由n個+1和n個-1構成2n項a_1,a_2,...,a_n其部分和滿足a_1 + a_2 + ... + a_k /ge 0 /quad , /quad 0 /le k /le 2n的序列個數等於第n個Catalan數C_n

假設不滿足條件的序列個數為U_n,那麼就有C_n + U_n = {2n /choose n}。而對於不滿足的序列,必然存在某一個奇數位使a_1 + a_2 + ... + a_k < 0,而且+1的個數恰好比-1的個數少一個,此時我們將前k項中的+1變為-1,將-1變為+1,那麼就得到一個有(n+1)個+1和(n-1)個-1的序列,即一個不滿足條件的序列對應於一個由n+1個+1和n-1個-1組成的排列。所以 U_n = {2n/choose n + 1}。那麼C_n = {2n/choose n} - U_n = {2n/choose n} - {2n/choose n + 1}}}

2. 我們可以將應用1變換形式:將-1看成右括號,+1看成左括號,就變成了左括號和右括號各有n個時,合法括號表示式的個數。比如2個左括號和2個右括號組成的合法表示式有C_2 = 2

種,是()()和(())。

3. 再次轉換形式,對於n+1個數連乘,乘法順序有C_n種,比如三個數連乘a*b*c,n=2,相當於在式子上加括號,有2種乘法順序,分別是(ab)c和a(bc)。四個數連乘a*b*c*d,n=3,有5種乘法順序,分別是a(b(cd)),(ab)(cd),((ab)c)d,(a(bc))d和a((bc)d)。同時對於n為3得到合法的括號序列有5個,分別是:((())),()(()),()()(),(())()和(()()),也即與n+1個數連乘的順序數一一對應關係。

4. n個節點構造二叉樹的所有可能形態數為C_n。考慮隨便取一個節點作為根,那麼他左邊和右邊的兒子節點個數就確定了,假定根節點標號為x,那麼左子樹的標號就是從1到x-1,共x-1個,右子樹的標號就是從x+1到n,共n-x個,那麼將x從1取到n,就獲得了所有的情況數/begin{displaymath}C_n = /sum_{i = 0}^{n - 1}C_i/,C_{n - i - 1}/end{displaymath}

5. n個非葉節點的滿二叉樹的形態數(對稱後得到的二叉樹除非自己本身對稱,否則算是不同)

對於滿二叉樹,實際上就是將應用4中的每個子節點的空兒子上都加上葉子,就形成了對應的滿二叉樹,那麼n個非葉節點形成的滿二叉樹的形態數即為Cn

6. 對於一個n*n的正方形網格,每次只能向右或者向上移動一格,那麼從左下角到右上角所有在副對角線右下方的路徑總數為C_n

可以將一條水平邊記為+1,垂直邊記為-1,那麼就組成了一個n個+1和n個-1的序列,並且保證前k步中水平邊數不小於垂直邊數,換句話說前k個元素的和非負。

7. 對凸n+2邊形進行不同的三角形分割(只連線頂點對形成n個三角形)數為Cn

8. n個數入棧後的出棧的排列總數是C_n。例如1,2,3入棧的出棧排序有123,132,213,231和321五種

9. 對於集合/{1,2,...,2n/},將集合元素兩兩分為n個子集,若任意兩個子集都不交叉,那麼我們稱此劃分為一個不交叉劃分。此時不交叉的劃分數就是C_n。考慮將每個子集中較小的數用左括號代替,較大的用右括號代替,那麼帶入原來的1至2n的序列中就形成了合法括號問題。例如集合{1,2,3,4,5,6}的不交叉劃分有五個:{{1,2},{3,4},{5,6}},{{1,2},{3,6},{4,5}},{{1,4},{2,3},{5,6}},{{1,6},{2,3},{4,5}}和{{1,6},{2,5},{3,4}}。

10. n層的階梯切割為n個矩形的切法數也是C_n。如下圖所示:

 考慮先繪製如下圖片,即n為5的時候的階梯:

注意到每個切割出來的矩形都必需包括一塊標示為*的小正方形,那麼此時列舉每個*與#標示的兩角作為矩形,剩下的兩個小階梯就是我們的兩個更小的子問題了,於是我們的C_5 = C_0 * C_4 + C_1 * C_3 + C_2 * C_2 + C_1 * C_3 + C_0 * C_4

11. 在一個2*n的格子中填入1到2n這些數值使得每個格子內的數值都比其右邊和上邊的所有數值都小的情況數也是C_n

12. 平面上連線可以形成凸包的2n個點分成2個一組連成n條線段,兩兩線段之間不相交的情況總數是C_n,這裡實際上和應用7本質上是一樣的。

13. n+m個人排隊買票,並且滿足n /ge m,票價為50元,其中n個人各手持一張50元鈔票,m個人各手持一張100元鈔票,初始時候售票視窗沒有錢,問有多少種排隊的情況數能夠讓大家都買到票。

如果m=n的話那麼這就是初始的Catalan數問題,也就是將手持50元的人看成是+1,手持100元的人看成是-1,任前k個數值的和都非負的序列數。

對於n>m的情況,假設大家都可以買到票的情況數是D_{n+m},無法讓每個人都買到的情況數是U_{n + m},那麼就有D_{n + m} + U_{n +m} = {n + m /choose n},假設最早買不到票的人編號是k,他手持的是100元並且售票處沒有錢,那麼將前k個人的錢從50元變成100元,從100元變成50元,這時候就有n+1個人手持50元,m-1個手持100元的,所以就得到U_{n + m} = {n + m /choose n + 1},同時D_{n + m} = {n + m /choose n} - {n + m /choose n + 1}