我第一次知道卡特蘭數是在這樣一道題中:
supposethe coming sequence into a stack is: 1,2
,3,4……n . writea function to print all the possibilities of output sequence.
我是用最笨的深搜
dfs來做的。**如下:
#include "stdafx.h"
#include #include #include #include #include using namespace std;
int n = 0;
typedef stackstack;
typedef queuequeue;
void dfs(int level,stack s, queue buf, const int level);
void dfs(int level,stack s, queue buf, const int level)
{ if (level == level)
{ // whether the last one goes into print queue
// or goes into stack
// has the same effect
buf.push(level);
while(!buf.empty())
{ cout<>x;
dfs(1, s, q, x);
cout<<"the catalan number of "<
設h(n)代表
①括號化問題:矩陣鏈乘法:
n個矩陣有多少種括號化方案?
-------h(n) ②
出棧順序的變形:在圓上選擇
2n個點
,將這些點成對連線起來,使得所得到的
n條線段不相交的方法數;有
2n個人排成一行進入劇場。入場費
5元。其中只有
n個人有一張
5元鈔票,另外
n人只有
10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有
10元的人買票,售票處就有
5元的鈔票找零?(將持
5元者到達視作將
5元入棧,持
10元者到達視作使棧中某
5元出棧)
③將乙個凸多邊形區域分成三角形區域的方法數?
④給定n個節點,能構成多少種形狀不同的二叉樹?
先取乙個點作為頂點
,然後左邊依次可以取0至
n-1個相對應的
,右邊是
n-1到0個
,兩兩配對相乘,就是
h(0)*h(n-1) + h(2)*h(n-2) ++ h(n-1)h(0)=h(n)
我有這樣乙個想法:能不能用二叉樹優化列印序列?(不用把龐大的
stack
和queue
當做引數傳遞。只要把每一種構型的二叉樹遍歷一下就好啦。)
卡特蘭數,高精度卡特蘭數
簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 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...