4.3 組合
4.3.1 基礎組合
1. 加法原理:兩個互相獨立 (互不影響)的選擇,只能選其中一邊中的一種,其總方法數為 兩者相加。
2. 乘法原理:兩個互相獨立 (互不影響) 的選擇,兩邊各要選一種,其總方法數為兩者相 乘。
3. 階乘 n! = 1×2×3× · · · ×n:(同時也是 m 個相異物排列成不同順序的方法數)。
4. 排列數 Pnm = m!
(m−n)!:m 個相異物,選其中 n 個來排 (順序有差) 的方法數。
5. 組合數 Cnm = m!
n!(m−n)!:m 個相異物,選其中 n 個出來 (順序不計) 的方法數,同時 也是 n 個 A 物和 m−n 個B 物排成一列(順序有差)的方法數。
6. 重覆組合 Hnm =Cnm−n+1:m 種不同的東西無限供應,總共選 n 個出來 (可以重覆,順 序不計) 的方法數。同時也是方程式 x1+x2+· · ·+xm =n 的非負整數解組數。
7. 二項式定理:(x+y)n =
∑n k=0
Cknxn−kyk,即二項式展開的係數為組合數。
8. 巴斯卡定理:Cnm =Cnm−1 +Cn−1m−1。
9. 組合數經常會超出 long long 範圍,因此需要配合同餘運算。
4.3.2 遞迴式
定義
將數列 (或函數) 的任何一項以前一 (幾) 項表示的方法。
例:數列 {an}, ai =ai−1 +ai−2,即代表這個數列中每一項皆為其前兩項的和。
初始條件
若要以遞迴式確定其數列 (或函數),經常需要幾個初始條件 (數量通常等於為遞迴式的 階數)。
例:上述數列若加上條件 a0 = 0, a1 = 1,即可確定其整個數列:
a0 = 0, a1 = 1, a2 = 1, a3 = 2, a4 = 3, a5 = 5, a6 = 8,· · ·(費氏數列)
計算方法
• DP
• 矩陣法 (線性遞迴式適用,參考:數學方法 I)
• 解出一般式 (不一定適用於所有遞迴式,且計算過程和結果可能非常複雜)
51 Author: STEP4
CHAPTER 4. 數學方法 建國中學2012年資訊能力競賽培訓講義 - 06
4.3.3 卡特蘭數
定義
卡特蘭數 Cn:在 n×n 的方格中,一次只能往右或往上走一格,從左下角 (0,0) 走到右
上角 (n, n),且不能越過對角線的方法數。
Cn={1,1,2,5,14,42,132,· · · }
遞迴式
設第一次碰到對角線時的座標是 (i, i),則可分割為兩個部份:
1. 0∼i−1 (還沒碰到對角線之前的部份):
相當於從 (1,0) 走到 (i, i−1),不越過對角線的走法數,也就是卡特蘭數Ci−1。
2. i∼n (已經碰過對角線的部份):
相當於從 (i, i)走到 (n, n),不越過對角線的走法數,也就是卡特蘭數Cn−i。
由於上面兩部份互不相干,所以這兩個方法數以乘法原理連結:於 (i, i) 第一次碰到對角 線的方法數為Ci−1Cn−i。
所以總方法數為:
Cn=
∑n i=1
Ci−1Cn−i
或
Cn+1 =
∑n i=0
CiCn−i
此即為卡特蘭數的遞迴式。單次遞迴時間複雜度為 O(n);以 DP 法計算 Cn,總時間複 雜度為 O(n2)。
一般式
事實上,卡特蘭數可以寫成一般式:(暫時不證明) Cn = Cn2n
n+ 1 計算時間複雜度為 O(n)。
應用
以下各種情況的方法數皆為卡特蘭數 Cn
1. 邊長為 n 的正方形不跨越對角線的捷徑走法數。
2. n 個節點可產生的二元樹個數。
3. 在正 n 邊形中,以三角形分割多邊形的方法數。
4. n 對括號可產生的合法匹配數。(合法運算式)
Author: STEP4 52
2012/11/12 4.3. 組合
廣義卡特蘭數
定義廣義卡特蘭數為
Ck,n = Cnkn (k−1)n+ 1 此數等於有 n 個節點的k 元樹個數。
4.3.4 Exercise
1. 山稜線 <TIOJ 1607>
對 T 筆詢問,輸出長度為 2N 的山稜線的種類數 mod 1000000007 的值。
2. 燈泡問題 <TIOJ 1770>
問有幾種方法點燈泡 M 秒鐘且沒有超過連續 N 秒燈是亮的 3. 放錯的信封 < 94 建中校內資訊能力競賽 > <TIOJ 1086>
問你 N 個人都拿到不該拿的東西的方法有幾種。
輸出末 8 位數:O(N);輸出前 8位數:O(1) 4. 海藻 < 98 北市賽 (prob 1) > <TIOJ 1677>
有一個神奇觸手,一開始是 (綠) 的,接者每天 (綠) 會變成 (黃),而 (黃) 會變成 (綠 黃),求第 N 天由左往右第K 個觸手是甚麼顏色
53 Author: STEP4
CHAPTER 4. 數學方法 建國中學2012年資訊能力競賽培訓講義 - 06