卡特蘭數 Catalan Number 學習筆記

2021-09-26 04:10:01 字數 1181 閱讀 6861

1.給定一串長為2n的01序列,其中0和1的數量相等,滿足任意字首中0的個數不少於1的個數,求序列的個數

2.給出一串長為n的序列,按順序將他們進棧,隨意出棧,求最後進出棧的方案

3.給定乙個n個節點的二叉樹,求二叉樹有多少種(這裡定義不同指樹的形態不同)

這三個問題都有關catalan數

事實上關於catalan的性質有關問題很多,這裡只是比較針對的列出了幾種。

稍微想一想及可以知道,問題1,2同構,問題3卻好像不一樣。

我們以問題1為例,推出卡特蘭數的計算式。

很簡單的容斥原理,我們先求出所有的序列,然後減去不合法的序列即是答案

所有序列個數直接根據組合數的定義為\(c_^n\)

關於不合法的序列,我們先介紹結論,然後進行證明

滿足存在乙個字首使得1的個數大於0的個數的 n個0與n個1構成的01序列n+1個0與n-1個1構成的01序列構成乙個雙射,即11對應關係

很顯然,後者的數量為\(c_^\)

證明:對前者,很顯然可以找到乙個位置為\(2p+1\)的字首,使得其中有\(p+1\)個\(1\)和\(p\)個\(0\),好的我們把它取反,即得到了後者

對後者,同樣我們可以找到乙個位置為\(2p+1\)的字首,使得其中有\(p\)個\(1\)和\(p+1\)個\(0\)(\(0\)比\(1\)多我們一定可以找到),然後取反,得到前者

綜上所述,我們得到了卡特蘭數的計算公式1

\[cat_n=c_^n-c_^\]

化簡搞一搞

\[cat_n=\frac^n}\]

可以繼續推出遞推式

\[cat_n=\fraccat_\]

對遞推式\(cat_0=1\)

事實上,計算時求有組合數的那個用的比較多。

很抱歉有一步的證明不能給出,一是網上沒找到,二是聽說比較難

對於問題3,我們發現它本身介紹乙個可以遞迴求解的子問題,設方案數為\(h(n)\)。

我們隨便選取一點作為根(點都是相同的),則分別討論左右子樹的大小即可

顯然有\[h(n)=\sum_^n h(i) \times h(n-1-i)\]

\[h(0)=h(1)=1\]

經過證明,\(h(n)=cat_n\)

於是對於遞推式是這樣的題目,我們也可以使用卡特蘭數解決。

可能會更新一些題目...

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

簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 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 解得 ...

卡特蘭數 Catalan

問題 程式設計之美 第4.3節中提到了 買票找零 問題,查閱了下資料,此問題和卡特蘭數 cn有關,其定義如下 卡特蘭數真是乙個神奇的數字,很多組合問題的數量都和它有關係,例如 yyy xyxxyy xyxyxy xxyyxy xxyxyy ab c d a bc d ab cd a bc d a b...