卡特蘭數(shù)

卡特蘭數(shù)的應(yīng)用:

  1. 括號(hào)化問題。
      矩陣鏈乘: P=a1×a2×a3×……×an,依據(jù)乘法結(jié)合律疑苔,不改變其順序,只用括號(hào)表示成對(duì)的乘積甸鸟,試問有幾種括號(hào)化的方案惦费?(h(n)種)

  2. 出棧次序問題兵迅。
      一個(gè)棧(無窮大)的進(jìn)棧序列為1,2,3,..n,有多少個(gè)不同的出棧序列?

  3. 將多邊行劃分為三角形問題。
      將一個(gè)凸多邊形區(qū)域分成三角形區(qū)域的方法數(shù)?
      類似:在圓上選擇2n個(gè)點(diǎn),將這些點(diǎn)成對(duì)連接起來使得所得到的n條線段不相交的方法數(shù)?

  4. 給頂節(jié)點(diǎn)組成二叉樹的問題薪贫。
      給定N個(gè)節(jié)點(diǎn)恍箭,能構(gòu)成多少種不同的二叉樹?(能構(gòu)成h(N)個(gè))


C++

//卡特蘭數(shù)的大數(shù)算法
//1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796(0--10)
//公式:f(n) = f(n - 1) * (4 * n - 2) / (n + 1);
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <utility>
#include <map>
#include <string>
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
const int MAX_N = 100 + 10;
int ans[105][MAX_N];//ans[n][i]
int id;
int base = 10000;  //數(shù)組每一位存放大數(shù)的四位數(shù)字瞧省,相當(dāng)于萬進(jìn)制

//大數(shù)乘
void multiply(int n, int x) {
    int add = 0;   //進(jìn)位
    for (int i = 1; i <= id || add; ++i) {
        ans[n][i] = ans[n][i] * x + add;
        add = ans[n][i] / base;
        ans[n][i] %= base;
        if (i > id) id = i;
    }
    //cout << add << endl;
}

//大數(shù)除
void divide(int n, int x) {
    int re = 0;   //余數(shù)
    bool flag = true;
    for (int i = id; i >= 1; --i) {
        ans[n][i] = re * base + ans[n][i];
        re = ans[n][i] % x;
        ans[n][i] /= x;
        if (ans[n][i] != 0) flag = false;
        if (flag && ans[n][i] == 0) --id;//去掉前導(dǎo)零
    }
    //cout << re << endl;
}

int main() {
    //ios::sync_with_stdio(false);
    //cin.tie(NULL);
    //cout.tie(NULL);
    ans[0][0] = ans[0][1] = 1;//f(0) = 1
    id = 1;//大數(shù)反向存放在數(shù)組中
    
    //預(yù)處理
    for (int i = 1; i <= 100; ++i) {
        for (int j = 1; j <= id; ++j) ans[i][j] = ans[i - 1][j];
        multiply(i, 4 * i - 2);
        divide(i, i + 1);
        ans[i][0] = id; //ans[i][0]存放n為i時(shí)的答案的數(shù)組長(zhǎng)度扯夭。
    }   

    int n;
    while (scanf("%d", &n) != EOF) {
        int len = ans[n][0];
        printf("%d", ans[n][len]);//輸出最前面的數(shù)
        for (int i = len - 1; i >= 1; --i) {
            printf("%04d", ans[n][i]); //輸出后面的數(shù),并每位都保持4位長(zhǎng)度!
        }
        printf("\n");
    }
    return 0;
}

//f(100) = 896519947090131496687170070074100632420837521538745909320


Java

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        
        BigInteger[] ans = new BigInteger[105];
        ans[0] = BigInteger.valueOf(1);
        
        for (int i = 1; i <= 100; ++i) {
            ans[i] = ans[i - 1].multiply(BigInteger.valueOf(4 * i - 2)).divide(BigInteger.valueOf(i + 1));
        }
        
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            System.out.println(ans[n]);
        }
        in.close();
    }

}

本文參考自博客:http://blog.163.com/lz_666888/blog/static/1147857262009914112922803/
(很棒的總結(jié))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鞍匾,一起剝皮案震驚了整個(gè)濱河市交洗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橡淑,老刑警劉巖构拳,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梁棠,居然都是意外死亡置森,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門符糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凫海,“玉大人,你說我怎么就攤上這事濒蒋⊙渭睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵沪伙,是天一觀的道長(zhǎng)瓮顽。 經(jīng)常有香客問我,道長(zhǎng)围橡,這世上最難降的妖魔是什么暖混? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮翁授,結(jié)果婚禮上拣播,老公的妹妹穿的比我還像新娘。我一直安慰自己收擦,他們只是感情好贮配,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著塞赂,像睡著了一般泪勒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天圆存,我揣著相機(jī)與錄音叼旋,去河邊找鬼。 笑死沦辙,一個(gè)胖子當(dāng)著我的面吹牛夫植,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播油讯,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼详民,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了陌兑?” 一聲冷哼從身側(cè)響起阐斜,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诀紊,沒想到半個(gè)月后谒出,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邻奠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年笤喳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌宴。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杀狡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贰镣,到底是詐尸還是另有隱情呜象,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布碑隆,位于F島的核電站恭陡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏上煤。R本人自食惡果不足惜休玩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劫狠。 院中可真熱鬧拴疤,春花似錦、人聲如沸独泞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)懦砂。三九已至蜒犯,卻和暖如春讲坎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愧薛。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衫画,地道東北人毫炉。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像削罩,于是被迫代替她去往敵國(guó)和親瞄勾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Catalan數(shù)——卡特蘭數(shù) 今天阿里淘寶筆試中碰到兩道組合數(shù)學(xué)題弥激,感覺非常親切进陡,但是筆試中失蹤推導(dǎo)不出來后來查了...
    mylocal閱讀 626評(píng)論 0 0
  • 名字來源比利時(shí)數(shù)學(xué)家卡塔蘭∥⒎卡塔蘭:Catalan 數(shù)列滿足 通項(xiàng): 給定n個(gè)節(jié)點(diǎn)趾疚,能構(gòu)成的二叉搜索樹個(gè)數(shù)為Cn。...
    方某某閱讀 295評(píng)論 0 0
  • C(n) = C(0)C(n-1) + C(1)C(n-2) + ... + C(n-1)C(0)或者C(n) =...
    yuansip閱讀 296評(píng)論 0 0
  • 又是一個(gè)考驗(yàn)算法積累的題目以蕴,該題討論的是卡特蘭數(shù)的應(yīng)用糙麦。 卡特蘭數(shù)的使用條件為:h(n)=h(0)×h(n-1)+...
    碧影江白閱讀 3,015評(píng)論 0 2
  • 為什么赡磅,我可以鎖住我的心,為什么宝与,卻鎖不住愛和憂傷焚廊。在長(zhǎng)長(zhǎng)的一生里,為什么习劫,歡樂總是乍現(xiàn)就凋落咆瘟,走得最急的都是最美...
    錦公子閱讀 322評(píng)論 0 1