http://chowkafat.net/Enumeration8.html
點算的奧秘:廣義容斥原理
在《點算的奧秘:容斥原理基本公式》中,筆者介紹了「容斥原理」的基 本公式。這些公式可用來計算以下兩個集合的元素個數:|S1 ∪ S2 ∪ ... Sn|和|S1' ∩ S2' ∩ ... Sn'|。用日常語言來表達 ,上述第一個集合代表屬於S1 ... Sn中「至少1個」集合的元素,第二個集合則代表 屬於S1 ... Sn中「剛好0個」集合的元素。以上兩個集合的共同點是,它們代表某種 「極端」情況。在本節我們要把「容斥原理」推廣至更一般的集合,這些集合的元素屬於S1 ... Sn中的「至少p個」或「剛好s個」集合,其中1 ≤ p ≤ n − 1和0 ≤ s ≤ n。
首先考慮「剛好s個」集合的情況。設有S1 ... Sn等n個集合,現在要求屬於這n個集 合中的「剛好s個」集合的那些元素的個數。我們把這個數記為N(n, s)(註1),以下給出這個數的公式:
對於論域中任何一個元素而言,這個元素屬於S1 ... Sn中的i個集合(0 ≤ i ≤ n),這個元素將被計算在Sn, i中。此外,由於這個元素也必然同時屬於這i個集合之中的k個(k < i),因此對於任何k < i而言,這個元素必然也被計算在Sn, j中。但對於任何k > i而言,這個元 素不可能被計算在Sn, k中。以上事實對於了解下面的證明是至關重要的,請讀者務必弄明白。由 於i與s可以存在三種關係:i < s;i = s和i > s,以下逐一考慮這三種情況。
首先考慮i < s的情況。在這種情況下,有關元素屬於少於s個集合。由於上述公式中求和符號Σ的下限是 s,Sn,i根本不會被加進上式中。換句話說,有關元素不會被加在上述公式中。
接著考慮i = s的情況。在這種情況下,有關元素剛好屬於s個集合,即它們會被計算在Sn, s中, 並且對於任何k < s而言,這些元素也會被計算在Sn, k中。但由於上述公式中求和符號Σ的 下限是s,我們只須考慮Sn, s的情況而無須考慮比s小的情況。請注意,如果某元素剛好屬於s個集 合,那麼這個元素只會出現於Sn, s中的某一個項(註3),即Sn, s只會把這個元素計算 一次。此外,由於(−1)s − s = 1並且C(s, s) = 1,這些元素在上述公式中剛好被加 一次。
最後考慮i > s的情況。在這種情況下,有關元素屬於超過s個集合。這類元素將被計算在Sn, i中 ,並且對於任何k < i而言,這類元素也會被計算在Sn, k中。但由於上述公式中求和符號Σ 的下限是s,我們只須考慮Sn, s、Sn,s+1 ... Sn, i−1、 Sn, i的情況。對於任何k ≤ i而言,由於從i個集合中抽k個出來構成交集共有C(i, k)種抽法, 所以每個這類元素在Sn, k中將會被計算C(i, k)次。因此每個這類元素在上述公式中被加的次數為
C(k, s) × C(i, k) × 1 |
k! | i! | (i − s)! | ||||
= | ----------------- | × | ----------------- | × | ----------------- | |
(k − s)! × s! | (i − k)! × k! | (i − s)! | ||||
i! | (i − s)! | |||||
= | ----------------- | × | ----------------------- | |||
(i − s)! × s! | (i − k)! × (k − s)! |
= | C(i, s) × C(i − s, k − s) |
請注意若把s = 0代入公式(1),便得到
若S1 ... Sn是「可交換集合」,那麼公式(1)中的Sn, k便可以簡化如下 :就某一個特定的k而言,Sn, k是由C(n, k)個相同的數加起來的總和,我們可以把這個相同的數 記為nk。這樣便可以把公式(1)改寫為
例題1:從A、B ... J這10類字母中可重覆地抽5個出來排列,若規定所得序列必須包含剛好4類字 母(例如A-B-C-B-D是合格的序列,而A-A-C-D-E則是不合格的序列),問有多少種合格的序列?
答1:設SA為從上述字母中可重覆地抽5個出來排列但不包括字母A的序列組成的集合, SB ... SJ的定義照此類推。由於包含剛好4類字母等於不包含剛好6類字母,本題所求 答案為N(10, 6)。顯然SA ... SJ是「可交換集合」,所以可用上述公式(4)求解。
接著讓我們求nk的值。對1 ≤ k ≤ 10而言,nk表示SA ... SJ中k個集合構成的交集的元素個數,這個交集就是從上述字母中可重覆地抽5個出來排列但不包括 其中k個字母的序列組成的集合。由於不包括其中k個字母,所以有關序列乃由餘下的10 − k個字母構成 ,即從10 − k個字母中可重覆地抽5個出來排成的序列。這是一個「無限重覆排列問題」,應用有關公式, 得nk = (10 − k)5,而nr+6 = (10 − r − 6)4 = (4 − r)5。
最後應用公式(4),求得答案為
N(10, 6) | = C(10, 6) Σ0 ≤ r ≤ 4(−1)r C(4, r) (4 − r)5 |
= 210 × (1 × 45 − 4 × 35 + 6 × 25 − 4 × 15 + 1 × 05) | |
= 50400 □ |
L(n, p) | = Σp ≤ k ≤ n N(n, k) |
= Σp ≤ k ≤ n Σk ≤ r ≤ n (−1)r − k C(r, k) Sn, r (6) |
k的取值範圍 | k取定左欄的值後r的取值範圍 |
---|---|
p | p, p + 1, ... n − 1, n |
p + 1 | p + 1, p + 2, ... n − 1, n |
...... | ...... |
n − 1 | n − 1, n |
n | n |
Σp ≤ k ≤ r(−1)k − p C(r, k) | = Σp ≤ k ≤ r(−1)k − p [C(r − 1, k − 1) + C(r − 1, k)] |
= Σp ≤ k ≤ r(−1)k − p C(r − 1, k − 1) + Σp ≤ k ≤ r(−1)k − p C(r − 1, k) | |
= Σp ≤ k ≤ r(−1)k − p C(r − 1, k − 1) + Σp+1 ≤ k ≤ r+1(−1)k − p − 1 C(r − 1, k − 1) |
Σp ≤ k ≤ r(−1)k − p C(r, k) | = (−1)p − pC(r − 1, p − 1) + (−1)r + 1 − p − 1 C(r − 1, r + 1 − 1) |
= C(r − 1, p − 1) + (−1)r − p C(r − 1, r) |
若S1 ... Sn是「可交換集合」,那麼公式(8)中的Sn, r便變成C(n, r) nr。這樣便可以把公式(8)改寫為
L(n, p) | = Σp ≤ r ≤ n(−1)r − p C(r − 1, p − 1) × C(n, r) nr |
= Σp ≤ r ≤ n(−1)r − p C(r − 1, p − 1) × C(n − 1, r − 1) × (n / r) nr |
例題2:從A、B ... J這10類字母中可重覆地抽5個出來排列,若規定所得序列最多只可包含4類字母 (例如A-A-B-B-C是合格的序列,而A-B-C-D-E則是不合格的序列),問有多少種合格的序列?
答2:首先我們沿用跟答1相同的集合定義SA ... SJ。由於包含最多4類字母 等同於不含至少6類字母,本題所求答案為L(10, 6)。根據答1,nj+6 = (4 − j)5。因此根據公式(10),我們求得答案為
L(10, 6) | = 10 × C(9, 5) × Σ0 ≤ j ≤ 4 (−1)j C(4, j) × (4 − j)5 / (j + 6) |
= 10 × 126 × (1 × 45 / 6 − 4 × 35 / 7 + 6 × 25 / 8 − 4 × 15 / 9 + 1 × 05 / 10) | |
= 69760 □ |
註1:按照這個記法,|S1' ∩ S2' ∩ ... Sn'|就等於N(n, 0)。
註2:請注意本文對公式(1)的證明只能證明它的正確性,而不能揭示該公式是如何推導出來的。這一點與「數 學歸納法」的證明有點類似。
註3:因為如果某元素出現於Sn, s中的兩個或更多不同的項,那麼這個元素就一定同時屬於不只s 個集合。舉例說,設s為3,並設某元素x既出現於S1 ∩ S2 ∩ S3 ,又出現於S2 ∩ S3 ∩ S4,那麼x便同時屬於4個而非3個集合。
註4:由於C(i, s)的i和s兩者都不等於式(2)求和符號Σ中的變項k,所以我們可以把C(i, s)從Σ的 右邊抽出來。這種做法就正如我們可以從(a × b + a × c)中把a抽出來,使之成為a × (b + c)一樣。
註5:學過微積分的讀者對這種變換應不會感到陌生,因為在進行積分時經常要對積分變項進行變換。事實上, 我們可以把「求和」(Summation)看成一種「離散」的「積分」(Integration),或者把「積分」看成一種「連 續」的「求和」。
註6:由於我們在前面假定了i > s,即i − s > 0,所以這裡(−1 + 1)i − s有 定義,即等於0。
註7:按照這個記法,|S1 ∪ S2 ∪ ... Sn|就等於L(n, 1)。