Catalan Numbers: 卡特蘭數
Catalan 數 C n C_{n} Cn 源於數學家 Catalan 解決凸 n + 2 n+2 n+2 邊形的剖分問題時所得到的數列. Catalan 問題的解決過程中, 大量地采用了映射 (Mapping) 方法. 學習和熟悉 Catalan 問題的一般解法與其變形問題對組合數學的學習與 “組合思維” 的養成有顯著的正面作用.
文章目录
Catalan 問題描述
Catalan 問題是對凸多邊形的劃分問題:
求凸多 n + 2 n + 2 n+2 邊形被它的 n − 1 n-1 n−1 條對角綫分割為互不重曡的三角形的分法總數.
爲了解決這一問題, 我們需要先不加證明地引入以下兩個引理:
-
(括號表達式問題)
由 n n n 對括號形成的合法括號表達式個數爲 C n C_{n} Cn.
-
(多數連乘問題)
n + 1 n+1 n+1 個數連乘, 不同的乘法順序數為 C n C_{n} Cn.
下面, 我們著手解決 Catalan 問題:
我們用 1 , 2 , ⋯ , n + 2 1,2,\cdots,n+2 1,2,⋯,n+2 順序標記凸 n + 2 n+2 n+2 邊形的邊: 按逆時針方向, 從標爲 1 1 1 的邊的起點開始, 按照 “未標記的對角綫均爲向外方向” 這一原則標記分割多邊形的對角綫的 “方向”.
隨後, 從
1
1
1 號邊的起點開始, 逆時針重新讀圖, 將 “出” 方向讀為 “(”, “入” 方向讀為 “)”.
這樣, 我們即得到了一個凸多邊形剖分方式與數字連乘順序的一一對應. 由上述兩個引理可得: 所求的剖分方式總數為
C
n
C_{n}
Cn.
■
\blacksquare
■
Catalan 數問題其一: 進出棧問題
進出棧問題是一個 Catalan 問題的變形, 由它的解決過程可以相應地得到上述兩個引理的證明.
棧 (stack), 是數據結構的一種, 就是指數據暫時存儲的地方. 它是一種 “運算受限” 的綫性表: 我們只被允許在這種綫性表的 表尾 進行數據的插入和刪除操作.
基於上述定義和知識, 我們提出問題: 若一個足夠大的棧, 其進棧序列為 1 , 2 , 3 , ⋯ , n 1,2,3,\cdots,n 1,2,3,⋯,n, 它有多少個不同的出棧序列?
[解]
進棧順序和出棧順序顯然不是一一對應的. 但是, “進出棧順序” 和 “出棧順序” 是一一對應的. 下面規定, 用 “+1” 表示進棧, “-1” 表示出棧.
對於 n n n 個數的序列, 其總的 “進出棧順序數” 并不是 ( 2 n n ) \binom {2n}{n} (n2n), 因爲出棧操作可被執行的前提是有進棧操作. 因此, 我們要求: 每個代表進, 出棧操作的排列, 其任意前 n n n 項和均不可爲負數.
現在, 我們考慮一個由所有無效排列所組成的集合 M \mathbb{M} M. 取 M \mathbb{M} M 中的一個元素 a i \mathbb{a_{i}} ai, 考慮其中首次發現排列無效, 也就是首次發現該排列的前若干項和為 − 1 -1 −1 時, 此時將 “使前若干項和為 − 1 -1 −1 的這一項” 與 “它之前的所有項” 全部取相反數, 那麽我們得到了一個包含 n − 1 n-1 n−1 個 − 1 -1 −1, n + 1 n+1 n+1 個 + 1 +1 +1 的排列.
設所有這樣的排列構成集合 N \mathbb{N} N. 顯見: 映射 M ↣ N \mathbb{M}\rightarrowtail \mathbb{N} M↣N 是一個雙射, 無效排列共有 ( 2 n n − 1 ) \binom {2n}{n-1} (n−12n) 個.
綜上, 所有的不同出棧序列總數為
(
2
n
n
)
−
(
2
n
n
−
1
)
=
1
n
+
1
(
2
n
n
)
=
C
n
.
\binom{2n}{n} - \binom{2n}{n-1} = \frac{1}{n+1}\binom{2n}{n} = C_{n}.
(n2n)−(n−12n)=n+11(n2n)=Cn.
二叉樹問題
二叉樹問題的要求是求出具有 n + 1 n+1 n+1 個葉子的滿二叉樹的個數. 它是進出棧問題的簡單變形, 求解過程和進出棧問題非常相似.
[解]
以 “向左優先” 的原則, 由二叉樹頂部的根節點開始遍歷二叉樹. 向左遍歷記爲 “+1”, 向右記爲 “-1”. 因此, 相應地我們可用 “+1” 和 “-1” 組成的數組表示每一棵二叉樹. 由 Catalan 數的定義即得: 符合條件的二叉樹的個數爲 C n C_{n} Cn.
兩個引理的證明
上文中, 我們得到了 進出棧問題 的解答. 下面我們以它爲基礎, 對 Catalan 問題解決過程中所給出的兩個引理給出證明.
引理1證明:
[證明]
將每一個括號表達式中的左, 右括號分別視爲 “+1” 和 “-1”. 聯係進出棧問題的解決過程, 原命題得證. ■ \blacksquare ■
引理2證明:
[證明]
因爲括號表達式本質上是對數字連乘順序的規定, 因此由 n n n 對括號組成的合法括號表達式的個數就是 n + 1 n+1 n+1 個數連乘的不同方式. 因此, 所要求的順序數也是 C n C_{n} Cn. ■ \blacksquare ■
Catalan 數問題其二: 電影購票問題和 Catalan 問題的幾何直觀
假設某影院的電影票單價 50 50 50 元, 現有 m + n m + n m+n 人排隊購票. 其中, m m m 人只有百元紙幣, n n n 人只有 50 50 50 元紙幣, 售票處沒有用於找零的現鈔. 問: 有多少種方法可將這 m + n m+n m+n 人排成一列, 使他們可以按照順序購票而無需等待售票處找出零錢?
在這一問題中, 我們將引入一個幾何模型來解決這個問題. 該幾何模型也可作爲進出棧問題的集合解釋.
[解]
構建一個 m ⋅ n m \cdot n m⋅n 網格, 問題等價於規定從左下角起始, 每次向右 (表示購票人只有50元) 或向上 (購票人只有100元) 移動一格, 最後到達右上角 ( m , n ) (m,n) (m,n) 的路徑條數.
我們設
M
\mathbb{M}
M 為: 穿過直綫
y
=
x
y = x
y=x 的, 從左下角到右上角的路徑所組成的集合. 與解決進出棧問題相同, 利用路徑關於直綫
y
=
x
y = x
y=x 的對稱性, 可以定義集合
N
\mathbb{N}
N, 並建立雙射關係, 并得出:
c
a
r
d
(
M
)
=
c
a
r
d
(
N
)
=
(
m
+
n
n
−
1
)
.
card(\mathbb{M}) = card(\mathbb{N}) = \binom{m+n}{n-1}.
card(M)=card(N)=(n−1m+n).
於是, 所求排列數目為
(
m
+
n
n
)
−
(
m
+
n
n
−
1
)
.
\binom{m+n}{n} - \binom{m+n}{n-1}.
(nm+n)−(n−1m+n).
特別地, 儅
m
=
n
m = n
m=n 時, 即得 Catalan 數.