卡特蘭數又稱卡塔蘭數,英文名Catalan number,是組合數學中一個常出如今各類計數問題中出現的數列。該數在計算機專業中比較重要,有一些具體的應用實例。這篇文章主要分三部分:php
假設h(0)=1,h(1)=1,catalan數知足遞推式:
\[ h(n) = h(0)*h(n-1) + h(1)*h(n-2) + h(2)*h(n-3) + ... +h(n-1)*h(0) \tag{1.1} \]
遞歸式背後有什麼物理含義呢,這裏以出棧序列問題進行說明:編程
問題描述:一個棧(無窮大)的進棧序列爲1,2,3,…,n,有多少個不一樣的出棧序列?spa
含義解釋:首先,咱們設\(h(n)\)=序列個數爲n的出棧序列種數。(咱們假定,最後出棧的元素爲k,顯然,k取不一樣值時的狀況是相互獨立的,也就是求出每種k最後出棧的狀況數後可用加法原則,因爲k最後出棧,所以,在k入棧以前,比k小的值均出棧,此處狀況有\(h(k-1)\)種,而以後比k大的值入棧,且都在k以前出棧,所以有\(h(n-k)\)種方式,因爲比k小和比k大的值入棧出棧狀況是相互獨立的,此處可用乘法原則,\(h(n-k)*h(k-1)\)種,求和即是Catalan遞歸式。.net
第n個卡特蘭數h(n)表達式以下
\[ h(n)=\frac{C_{2n}^{n}}{n+1}=C_{2n}^{n}-C_{2n}^{n-1} \tag{1.2} \]
具體證實過程以下code
爲了便於編程實現,須要進一步推導h(n)與h(n-1)之間的關係blog
已知\(h(n)\),易知
\[ h(n-1)=\frac{C_{2n-2}^{n-1}}{n} \]
推導\(h(n)\)的\(C_{2n}^{n}\)和\(h(n-1)\)的\(C_{2n-2}^{n-1}\)之間的關係,由\(kC_{n}^{k}=nC_{n-1}^{k-1}\)知
\[ \begin{align} n*C_{2n}^{n}&=2nC_{2n-1}^{n-1} \\ C_{2n}^{n}&=2C_{2n-1}^{n-1} \\ C_{2n}^{n}&=2\frac{(2n-1)C_{2n-2}^{n-1}}{n} \\ C_{2n}^{n}&=2(2n-1)h(n-1) \\ \frac{C_{2n}^{n}}{n+1}&=\frac{2(2n-1)}{n+1}h(n-1) \\ h(n)&=\frac{2(2n-1)}{n+1}h(n-1) \end{align} \]
最終獲得\(h(n)\)和\(h(n-1)\)之間的遞歸式\(h(n)=\frac{2(2n-1)}{n+1}h(n-1)\)遞歸
問題描述: 矩陣連乘 \(P=A_1A_2...A_n\),依據乘法結合律,不改變其順序,只用括號表示成對的乘積,問有幾種括號化的方案?leetcode
問題轉換一下就是n對括號的正確匹配方案,能夠作一下LeetCode-22get
問題描述: 一個棧(無窮大)的進棧序列爲1,2,3,..n,有多少個不一樣的出棧序列?數學
出棧問題問題正是卡特蘭數遞歸式\(h(n)=h(0)h(n-1)+h(1)h(n-2)+...+h(n-1)h(0)\)的由來
有2n我的排成一行進入劇場,入場費5元。其中只有n我的有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視做將5元入棧,持10元者到達視做使棧中某5元出棧)
n個1和n個0組成一個2n位的二進制數,要求從左到右掃描,0的累計數不小於1的累計數,求知足條件的的數。
12我的排成兩排,每排必須是從矮到高排列,並且第二排比對應的第一排的人高,問排列方式有多少種?
咱們先把這12我的從低到高排列,而後,選擇6我的排在第一排,那麼剩下的6個確定是在第二排。對問題進行轉化:用0表示對應的人在第一排,用1表示對應的人在第二排,那麼含有6個0,6個1的序列,而且任意前綴中0的個數大於等於1的個數就對應一種方案,轉化後的問題就是問題2了。
給定節點組成二叉樹的問題:給定n個節點,能構成多少種形狀不一樣的二叉樹?
先取一個點做爲頂點,而後左邊依次能夠取0至n-1個相對應的,右邊是n-1到0個,兩兩配對相乘,就是\(h(0)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(0)=h(n)\)能構成\(h(n)\)個,所以二叉樹問題也能夠解釋卡特蘭數遞歸式(1.1)式的由來
n*n棋盤從左下角走到右上角而不穿過主對角線的走法?
要從左下角走到右上角則必須向上走n步,向右n步,同時爲了避免跨過主對角線,則走過的步數中向上走的步數必須大於等於向右走的步數,剖析以後發現這個問題與問題3是等價問題,走法有卡特蘭數\(h(n)\)種。
能夠作一下下面兩題練練手:
n個+1和n個-1構成的2n項序列,其部分和總知足:\(a_1+a_2+...+a_n>=0\)的序列的個數。
卡特蘭數表達式(1.2)式就是以該問題模型爲基礎推導出來的
參考連接: