1. 程式人生 > 其它 >卡特蘭數的證明以及可以用到卡特蘭數的一些問題

卡特蘭數的證明以及可以用到卡特蘭數的一些問題

出棧序列計數問題

給定一長為n的序列,各位元素各不相同,那麼經過入棧,出棧後,可以得到多少種不同的序列。

這個問題的答案是卡特蘭數C(n)

卡特蘭數

卡塔蘭數是中一個常在各種計數問題中出現的數列。用C(n)表示卡特蘭數第n項,則有通項公式

\[C(n)=C_{2n}^n-C_{2n}^{n+1}=\frac{C_{2n}^n}{n+1}=\frac{(2n)!}{(n+1)!n!} \]

有遞推公式

\[C(0)=1 \qquad and\qquad C(n+1)=\frac{2(2n+1)}{n+2}C(n) \]

證明

長為n的序列,每個元素需要入棧一次,出棧一次,以0表示入棧,1表示出棧。則出入棧操作可以由一個長為2n

01串唯一表示。這個01串需符合以下條件:

  1. 其中01的數量均為n

  2. 對於任意位置i[1,i]位置的子串中,出現的1的個數不大於0的個數(棧的性質,未入棧不可出棧)。

可以用容斥原理統計符合條件的01串。

首先易得符合條件1的01串個數為C(2n,n)

其中不符合條件2的串一定有: 對於某個位置2i+1[1,2i+1]出現的1的個數為i+10的個數為i

又此串符合條件1,那麼剩餘位置的0,1個數分別為n-i,n-i-1

如果將剩餘位置的1變為00變為1。那麼這個串就變成了一個由n-10n+11組成的串。

設符合條件1但不符合條件2的串構成集合N,由n-10n+11組成的01串構成集合M

由於01互換操作是一個一一對映函式,故MN之間存在一個一一對映,故M,N元素個數相等(對映的性質)。

故卡特蘭數的通項公式為C(2n,n)-C(2n,n+1)

這種思想稱為對映計數法。

一些可以用卡特蘭數的問題

  1. (0,0)(n,n)的不越過直線y=x的非降路徑數

  2. n個節點的不同構的二叉樹的數量

  3. n+2邊形分割為n個三角形的方法數

  4. n對括號排列組成的合法的括號序列個數