在學習到資料結構-棧的時候,遇到棧的棧混洗情況,對於棧中n個元素,存在的情況為catalan數
在組合數學中發現卡特蘭數是怎麼來的:
首先看乙個題目:
對於n個-1和n個+1組成的2n個序列,a1,a2,….,a2n;
滿足其部分和:
a1+a2+a3+…ak>=0(k=1,2,….,2n)
滿足這樣的序列的個數就等於第n個catalan數
cn=(2n
n)n+
1 (n ≥
0) 證明:如果滿足n個+1和n個-1的序列,我們稱之為可接受的,反之為不可接受的,滿足上述序列的個數分別記為an,un,則
an+un=(2
nn)
只要算出un,an自然就得到了;
考慮n個+1和n個-1的不可接受序列,存在乙個最小k使得部分和 a1
+a2+
a3+.
..+a
k 是負的,因為k最小,所以在ak前面存在的相等的+1和-1,且有 a1
+a2+
a(k−
1)=0
ak=-1;
所以k是乙個奇整數,把前k項符號反過來,後面的餘項保持不變,則有(n+1)個+1,(n-1)個-1
這個過程可逆,當存在+1的個數超過-1的個數的時候的第乙個例項;將+1和-1對調(總共2n個),結果就得到n個+1和n個-1的序列,也即是不可接受序列。這樣,有多少(n+1)個+1和(n-1)個-1序列就有多少個不可接受序列。
則un=(2
nn+1
) ,
於是an=(2
nn) -(2
nn+1
) =(2
nn)n
+1
以上就是catalan數的乙個定理。
後面通過擬catalan數就可以和棧混洗對應起來,後面有空再補充;
卡特蘭數 生成序列
1.括號生成 左邊括號 右邊括號 n 每個右邊括號左邊至少有乙個左括號 def generate n,left 0,right 0,result if left right 2 n print result return if left n generate n,left 1,right,resul...
卡特蘭數 售票序列問題
問題描述 2n個人排隊買電影票,n個人持5元買票,n個人持10元買票。售票處在售票前只有票沒有錢,票價5元 問有多少種排隊方式能讓2n個人順利買票?方式一 遞迴 includeusing namespace std define ll long long ll f int m,int n m,n分別...
卡特蘭數,高精度卡特蘭數
簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyc...