卡特蘭數及其使用典型例子

2021-08-20 09:49:02 字數 1496 閱讀 8341

卡特蘭數是乙個常用在計數情況中使用的一種特殊的數列,其原理如下:

一、原理

若令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)=c(2n,n)/n+1(或者c(2n,n)-c(2n,n+1)))

三、常用案例

1.求出棧次序

例:有一進棧順序e1、e2、e3、e4、e5,求有多少可能的出棧序列。

分析:假設我們要求的出棧數為n,要得到的出棧序列為f(n),我們知道,因為入棧的順序是確定的,假設入棧順序記為1、2、3、4、5...n,那麼假設最後出棧的那個數為第k個數,那麼我們要求f(k)時,k-1個數已經先完成進棧出棧,此時有f(k-1)種方式,然後k之後的n-k個數也完成進棧和出棧,也就是f(n-k)種方式,最後第k個數出棧,此時的f(k)=f(k-1)*f(n-k),而每個數都可能是最後出棧的,也就是k的取值範圍是從1到n,滿足卡特蘭數通式:

把n=5,帶入公式即可求得f(5)=42

2.凸多邊形劃分

問題描述:在乙個凸多邊形中,通過若干條互不相交的對角線,把這個多邊形劃分成了若干個三角形。任務是鍵盤上輸入凸多邊形的邊數n,求不同劃分的方案數f(n)。比如當n=6時,f(6)=14。

思路:因為凸多邊形的任意一條邊必定屬於某乙個三角形,所以我們以某一條邊為基準,以這條邊的兩個頂點為起點p1和終點pn(p即point),將該凸多邊形的頂點依序標記為p1、p2、……、pn,再在該凸多邊形中找任意乙個不屬於這兩個點的頂點pk(2<=k<=n-1),來構成乙個三角形,用這個三角形把乙個凸多邊形劃分成兩個凸多邊形,其中乙個凸多邊形,是由p1,p2,……,pk構成的凸k邊形(頂點數即是邊數),另乙個凸多邊形,是由pk,pk+1,……,pn構成的凸n-k+1邊形。此時,我們若把pk視為確定一點,那麼根據乘法原理,f(n)的問題就等價於——凸k多邊形的劃分方案數乘以凸n-k+1多邊形的劃分方案數,即選擇pk這個頂點的f(n)=f(k)×f(n-k+1)。而k可以選2到n-1,所以再根據加法原理,將k取不同值的劃分方案相加,得到的總方案數為:f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2)。看到此處,再看看卡特蘭數的遞推式,答案不言而喻,即為f(n)=h(n-2) (n=2,3,4,……)。

3.給定節點生成二叉樹

給定n個節點,求能生成多少個不同形狀的二叉樹?

和第乙個問題類似,如法炮製,很容易可以看得起滿足f(0)=1,f(1)=1的卡特蘭數

卡特蘭數及其應用總結

優秀blog 優秀blog 定義 卡特蘭數是組合數學中乙個常出現在各種計數問題中的數列。給定n個0,n個1,排成2n的序列,滿足 任意字首中0的個數大於等於1的個數的排列方式種數,即為卡特蘭數。其前幾項為 從第零項開始 1,1,2,5,14,42,132,429,1430,4862,16796 遞推...

卡特蘭數,高精度卡特蘭數

簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyc...

卡特蘭數和超級卡特蘭數

這篇部落格主要是想講一下超級卡特蘭數 大施洛德數 順帶就想講一下卡特蘭數.卡特蘭數記為 c n c 1 1 forall n geq 2,c n sum c i c 前幾項大概是 1,1,2,5,14,42,132.直接遞推未免效率太低,我們考慮用生成函式優化.顯然有 c x c x 2 x 解得 ...