1. 程式人生 > >Catalan數&&Python實現

Catalan數&&Python實現

Catalan數 &&Python實現
1、Catalan數
卡塔蘭數是組合數學中一個常在各種計數問題中出現的數列。如:
1,1,2,5,14,42,132,429,1430,4862……其遞迴式如下:
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … +h(n-2)*h(1)+ h(n-1)*h(0)
(其中n>=2,h(0) = h(1) = 1)
其遞迴式的解為h(n)=c(2n,n)/(n+1)
用Python程式碼實現非常簡單,僅僅一個遞迴就可以了:

def catalan(n):
    if n==0 or n==1
: return 1 return (4*n-2)*catalan(n-1)/(n+1

Catalan數在計算機排列組合中佔有非常重要的比重,應用非常廣泛,應用如下:
應用1描述:n對括號有多少種匹配方式?
應用2描述:矩陣鏈乘: P=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?
應用3描述:一個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?
應用4描述:n個節點構成的二叉樹,共有多少種情形?
應用5描述:一個平面凸n+2邊形,若用其對角線將其劃分為三角形,總共有多少種不同的劃分方法?
應用5描述:有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?
這些問題都非常相似,都是採用遞迴的方法!