組合數學——卡特蘭數

咱們以一道題爲例來介紹卡特蘭數:spa

  題目連接:知足條件的01序列
3d

給定n0n個1,它們將按照某種順序排成長度爲2n的序列,求它們能排列成的全部序列中,可以知足任意前綴序列中0的個數都很多於1的個數的序列有多少個。blog

輸出的答案對109+7取模。字符串

  爲了便於解決,咱們能夠把這個問題轉化成:get

給定一個n*n的矩陣,每一步只能往右走或者往上走,求從左下角頂點走到右上角頂點全部方案中,往右走的步數很多於往上走的步數的方案的數量,而且對109+7取模。數學

  咱們再將目標進行一步轉化:it

合法路徑數 = 總路徑數 - 非法路徑數class

  其中總路徑數顯然爲組合數C126,故接下去只需求非法路徑數便可。原理

  咱們舉n=6的實例來看:百度

  以下圖:

  

  從(0,0)走到(6,6)的路徑全部路徑就是總路徑。

  顯然,全部黑線如下的路徑皆爲合法路徑,如圖中綠線所示路徑就是一條合法路徑。

  而任何一條通過紅線的路徑必定是非法路徑,如圖中藍線所示路徑。

  那麼咱們將該非法路徑第一次通過紅線後的部分關於紅線做對稱,如圖中黃線所示。

  不難發現,任何一條非法路徑進行如上的對稱操做後終點必定是(5,7)。

  進而又能夠發現,從(0,0)到(5,7)的任何一條路徑進行如上對稱操做後必定是一條非法路徑。

  故從(0,0)到(5,7)的路徑與非法路徑構成雙射。

  那麼顯然,非法路徑數便是組合數C125

  因此合法路徑數就是C126 - C125。

  而咱們又能夠發現,C2nn - C2nn-1 = C2nn/(n+1)。

  這就是卡特蘭數

  而上述該題正是卡特蘭數的一個應用。


 卡特蘭數:

  如下內容參考百度百科:卡特蘭數

卡特蘭數又稱卡塔蘭數,卡特蘭數是組合數學中一個常出如今各類計數問題中的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名。

原理:

設h(n)爲catalan數的第n項,令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)=h(n-1)*(4*n-2)/(n+1);

遞推關係的解爲:

h(n)=C(2n,n)/(n+1) (n=0,1,2,...)

遞推關係的另類解爲:

h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)

 


 卡特蘭數的常見應用:

1、出棧次序

一個棧(無窮大)的進棧序列爲1,2,3,…,n,有多少個不一樣的出棧序列?

2、括號化

矩陣連乘: P=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種)

3、凸多邊形三角劃分

在一個凸多邊形中,經過若干條互不相交的對角線,把這個多邊形劃分紅了若干個三角形。任務是鍵盤上輸入凸多邊形的邊數n,求不一樣劃分的方案數f(n)。好比當n=6時,f(6)=14。

4、給定節點組成二叉搜索樹

給定N個節點,能構成多少種不一樣的二叉搜索樹(能構成h(n)個)

5、n對括號正確匹配數目

給定n對括號,求括號正確配對的字符串數。

相關文章
相關標籤/搜索