1. 程式人生 > >卡塔蘭數的應用

卡塔蘭數的應用

卡塔蘭數定義

f(n) = f(0)f(n-1) + f(1)f(n-2) + ... + f(n-1)f(0)

      = f(k-1)f(n-k) k=1...n

以k為軸劃分子問題,左邊子問題的解的個數和右邊子問題的解的個數是原問題以k為軸的解法的2個獨立步驟,適用乘法原理

分別以1,2,。。。n為軸,是原問題的n種解法,適用加法原理。

int cantalan(int n) {
    vector<int> f(n + 1);
    f[0] = 1;
        
    for (int i = 1; i <= n; i++)
        for (int k = 1; k <= i; k++) //iterate the case k(1..i) as the root
            f[i] += f[k - 1] * f[i - k];
                
    return f[n];
}


應用:

1)給定n個括號,求所有合法括號組合數。

劃分辦法:第一個左括號分別和第k個(k=1...n)右括號結合,這樣k左邊有k-1個右括號(也必然有k-1個左括號,因為我們在討論合法組合),解個數f(k-1), k右邊n-k個右括號,解個數f(n-k)

或者這麼理解劃分:第一個括號裡放k個括號(可以是從0到n - 1)對問題是一個獨立且完備的劃分。f(n) = f(k) f(n -k) k=0..n-1

2)連乘加括號問題

劃分辦法:考慮乘號而不是數,第幾個乘號之前的右括號和最前面的左括號結合。

3)給定一個集合,求可以構造的所有二叉查詢樹的個數:

劃分:分別以每個數為root

相關推薦

應用

卡塔蘭數定義 f(n) = f(0)f(n-1) + f(1)f(n-2) + ... + f(n-1)f(0)       = f(k-1)f(n-k) k=1...n 以k為軸劃分子問題,左邊子問題的解的個數和右邊子問題的解的個數是原問題以k為軸的解法的2個獨立步驟,適

(Catalan)

tracking ng- iostream snippet log con pos using sin 卡塔蘭數(Catalan) 原理: 令h(0)=1,h(1)=1。 卡塔蘭數滿足遞推式:h(n)=h(0)*h(n-1)+h(1)*h(n-

HDOJ 1023 Train Problem II (

stat scrip fine ger title divide color code ostream Problem Description As we all know the Train Problem I, the boss of the Ignatius Tr

一、定義和公式:----------------------------------------------------------------------------------------令h(0)=1,h(1)=1,catalan數滿足遞推式 : h(n)= h(0)*h(n-1)+h(1)*h(n-2

應用--n個元素的出棧順序與從(0,0)到(n,n)不穿過對角線的方法

1.出棧順序方法數: hdoj1023 求出棧序列,比如1,2,3,出棧序列為3 2 1,1 2 3,1 3 2,2 1 3,2 3 1,一共5種 第一種思路: 我們把入棧看做1,出棧看做0,那麼入棧

(catalan)總結 (特蘭大特蘭大取模、應用

本文講解卡特蘭數的各種遞推公式,以及卡特蘭數、卡特蘭大數、卡特蘭大數取模的程式碼實現,最後再順帶提一下卡特蘭數的幾個應用。 什麼是卡特蘭數呢?卡特蘭數無非是一組有著某種規律的序列。重要的是它的應用。

(Catalan)及其應用

入棧 一個 其中 無法 數列 選擇 每天 編號 匹配 卡特蘭數 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特蘭數是組合數學中一個常出現在各種計數問題中出現的數列。 卡特蘭數前幾項為 : C0=

(Catalan Number)和斯特林公式(Stirling Approximation)分析

1.卡塔蘭數 設第n個卡塔蘭數為h(n)h(n)h(n),h(n)h(n)h(n)滿足h(n)=∑i=1nh(n−i)∗h(i−1)(h(0)=1,h(1)=1)h(n)=\sum^{n}_{i=1}{h(n-i)*h(i-1)}(h(0)=1,h(1)=1)h

在多種問題下的應用 組合數學-Catalan

4)排隊順序問題1】長度為2n的Dyck words有多少種?(Dyck words是由n個X和n個Y組成的字串,其有一個特點:從左往右,對X和Y分別計數,Y的個數始終不大於X的個數。)轉化思路:可以把X看作入棧,Y看作出棧,Y的個數始終不大於X的個數這一性質正好和空棧無法再出棧相一致,所以Dyck word

一道面試題到及其應用

繪畫展覽門票每張5元,如果有2n個人排隊購票,每人一張,並且其中一半人恰有5元錢,另一半人恰有10元錢,而票房無零錢可找,那麼如何將這2n個人排成一列,順次購票,使得不至於因票房無零錢可找而耽誤時間,應該採用什麼演算法解決呢?(分支限界法) 這個是卡特

及其應用

一道棧的題目 最近做一道有關棧的題目,題目是這樣的:       若一序列進棧順序為e1,e2,e3,e4,e5,問存在多少種可能的出棧序列?       這道題用遞推可以算出來,假設第k個數進棧,設f(k)表示k個數的總出棧序列數,則它前面的k-1個數有f(k-1)種出棧

catalan證明及應用舉例

卡塔蘭數是組合數學中一個常在各種計數問題中出現的數列。其計算公式是 Cn=Cn2nn+1=(2n)!(n+1)!n!,n為自然數 C n

的性質及其應用擴充套件

    問題描述:卡塔蘭數,是組合數學中一個常出現在各種計數問題中出現的數列。輸入一個整數n,計算h(n)。其遞迴式如下:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(

性質及應用

卡塔蘭數是組合數學中一個常在各種計數問題中出現的數列。以比利時的數學家歐仁·查理·卡塔蘭(1814–1894)命名。歷史上,清代數學家明安圖(1692年-1763年)在其《割圜密率捷法》最早用到“卡塔蘭數”,遠遠早於卡塔蘭[1][2][3]。有中國學者建議將此數命名為“明安

,程式實現,遞迴,迴圈,BST和出入棧順序的應用

 卡特蘭數是組合數學中的一種數列,它的來歷和重要性可以自行百度,我主要說它的特徵和程式設計實現。 前幾項是1, 1, 2, 5, 14, 42, 132……, 如果令h(0)=h(1)=1,那麼h(n)=h(0)*h(n-1)+h(1)*h(n-2) + .

應用(易懂版)

不符合要求的數的特徵是由左而右掃描時,必然在某一奇數位2m+1位上首先出現m+1個0的累計數和m個1的累計數,此後的2(n-m)-1位上有n-m個 1和n-m-1個0。如若把後面這2(n-m)-1位上的0和1互換,使之成為n-m個0和n-m-1個1,結果得1個由n+1個0和n-1個1組成的2n位數,即一個不

(轉載)Catalan——

出現 註意 城市 ads 大於 編號 只有一個 導致 一個點 Catalan數——卡特蘭數 今天阿裏淘寶筆試中碰到兩道組合數學題,感覺非常親切,但是筆試中失蹤推導不出來後來查了下,原來是Catalan數。悲劇啊,現在整理一下一、Catalan數的定義令h(1)=1,Cata

ini bits clas cnblogs 操作 div esp class 序列 卡特蘭數是組合數學 常見的數列 主要有4中形式: 1: h(n)= C 2n n /(n+1) 2: h(n)= C 2n n - C 2n n-1 3: h(n)= h(n

HDU 1133 Buy the Ticket

i++ ava () pos str mat bre == ann 設50元的人為+1 100元的人為-1 滿足前隨意k個人的和大於等於0 卡特蘭數 C(n+m, m)-C(n+m, m+1)*n!*m! import java.math.*; import java

HDU 1134 Game of Connections(

cut res ras sam eof cpp ont des tel 題目代號:HDU 1134 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 200