卡特蘭數:就是n個數按照1~n的順序進棧,出棧後所有排列的總數。
卡特蘭數滿足乙個遞推公式:
h[1]=1;
h[n]=h[n-1]*(4*n-2)/(n+1);
其中n表示數的個數。最好記住這個公式。
適用的題目型別:已經標好1~n的序號,求打亂順序排列的總方法數 + 配對排列(變相的打亂順序排列)。說白了,就是求進出棧的全排列數。
出棧次序
x星球特別講究秩序,所有道路都是單行線。乙個甲殼蟲車隊,共16輛車,按照編號先後發車,夾在其它車流中,緩緩前行。
路邊有個死胡同,只能容一輛車通過,是臨時的檢查站,如圖【p1.png】所示。
x星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。
如果車輛進入檢查站和離開的次序可以任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?
為了方便起見,假設檢查站可容納任意數量的汽車。
顯然,如果車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。
現在足足有16輛車啊,親!需要你計算出可能次序的數目。
h[1]=1;
for(n=2;n<=16;n++)
① 括號的匹配方式
有n對括號,即2n個符號,則h(n)=f(2n)
你想嘛,左括號已經各自按照序號1~n整整齊齊排在前面了,就跟車已經都進站了一樣,就等著出來,所以也就是看右括號打亂順序排列。有n個右括號。所以h(n)為答案。
故第0個符號一定是左括號,右括號一定是2i+1個字元(一定是奇數字元,這樣中間的字元方可成功匹配)
則第0個字元與第1個字元匹配的次數是f(0)*f(2n-2)
第0個字元與第3個字元匹配的次數是f(2)*f(2n-4) =>將所有括號分成了兩部分,一部分是兩個符合,另一部分是2n-4個符號
②出棧序列
順序進棧,進棧相當於是左括號,出棧相當於是右括號,n個數字,依次進棧構成了有2n個數字的序列。h(n)為答案。
有 f(2n)=f(0)*f(2n-2)+f(2)*f(2n-4)+...+f(2n-2)*f(0)
其中當n=0時,h(0)=f(2*0)=0;
當n=1時,h(1)=f(2*1)=1;
n=2,h(2)=f(2*2)=2;
n=3,h(3)=f(2*3)=f(0)*f(4)+f(2)*f(2)+f(4)*f(0)=5;
.則h(16)=c(16*2,16)/17=35357670
③圓連線點
乙個圓周長等分n個點,每兩個點之間連線,使得各線之間不相交的情況總共有多少種。
同樣可模擬成出棧進棧,取任意乙個點為0點,則0點必須與2n+1個點相連,必須成對同時滿足,與括號匹配類同
類似的還有二叉樹。
卡特蘭數,高精度卡特蘭數
簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 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...