卡特蘭數的證明以及應用


出棧序列計數問題

給定一長為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表示出棧。則出入棧操作可以由一個長為2n01串唯一表示。這個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對括號排列組成的合法的括號序列個數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM