點算的奧秘:容斥原理基本公式「容斥原理」(Principle of Inclusion and Exclusion)(亦作「排容原理」)是「點算組合學」中的一條重要原理。
但凡略為複雜、包含多種限制條件的點算問題,都要用到這條原理。
現在首先從一個點算問題說起。
例題1:設某班每名學生都要選修至少一種外語,其中選修英語的學生人數為25,選修法語的學生人數為18,選修德語的學生人數為20,同時選修英語和法語的學生人數為8,同時選修英語和德語的學生人數為13 ,同時選修法語和德語的學生人數為6,而同時選修上述三種外語的學生人數則為3,問該班共有多少名學生?答1:我們可以把上述問題表達為下圖:其中紅色、綠色和藍色圓圈分別代表選修英語、法語和德語的學生。
根據三個圓圈之間的交叉關係,可把上圖分為七個區域,分別標以A至G七個字母。
如果我們用這七個字母分別代表各字母所在區域的學生人數,那麼根據題意,我們有以下七條等式:(1) A+D+E+G = 25;(2) B+D+F+G = 18;(3) C+E+F+G = 20;(4) D+G = 8; (5) E+G = 13;(6) F+G = 6;(7) G = 3。
現在我們要求的是A+B+C+D+E+F+G。
如何利用以上資料求得答案?把頭三條等式加起來,我們得到A+B+C+2D+2E+2F+3G = 63。
可是這結果包含了多餘的D、E、F和G,必須設法把多餘的部分減去。
由於等式(4)-(6)各有一個D、E和F,若從上述結果減去這三條等式,便可以把多餘的D、E和 F減去,得A+B+C+D+E+F = 36。
可是這麼一來,本來重覆重現的G卻變被完全減去了,所以最後還得把等式(7)加上去,得最終結果為A+B+C+D+E+F+G = 39,即該班共有39名學生。
□在以上例題中,給定的資料是三個集合的元素個數以及這些集合之間的交集的元素個數。
在該題的解答中,我們交替加上及減去這些給定的資料。
如果我們用S 1、S2和S3分別代表選修英語、法語和德語學生的集合,那麼我們要求的答案就是|S1∪ S2∪ S3|,而該題的解答則可以重新表達為|S1∪ S2∪ S3| = (|S1| + |S2| + |S3|) − (|S1∩ S2| + |S1∩ S3| + |S2∩S3|) + |S1∩ S2∩ S3|我們可以把上式推廣至集合個數為n的情況,便得到以下的「容斥原理」。
設有n個集合 S1、S2... Sn,那麼|S1∪ S2∪ ... Sn|= (|S1| + |S2| + ... |Sn|)− (|S1∩ S2| + |S1∩ S3| + ... |Sn − 1∩ Sn|)+ (|S1∩ S2∩ S3| + |S1∩ S2∩ S4| + ... |Sn − 2∩ Sn − 1∩ S n|)− (|S1∩ S2∩ S3∩ S4| + ... |S n − 3∩ S n − 2∩ S n − 1∩Sn|)......+ (−1)n − 1 |S1∩ S2∩ ... Sn − 1∩ Sn| (1)有必要對上式作一些解釋。
為易於理解,上式分數行列出,每一行都是一些集合元素個數的總和,其中第1行包含全部n個集合S1、S2... Sn;第2行包含所有由2個集合構成的交集,應共有C(n, 2)個項;第3行包含所有由3個集合構成的交集,應共有C(n, 3)個項...第n行包含由全部n個集合構成的交集,這樣的交集只有C(n, n) = 1個。
每行的開首交替為一個「加」(相當於「容納」)和一個「減」(相當於「排斥」)號,第1行開首為「加」號,第2行為「減」號,第3行為「加」號,第4行為「減」號...。
由於當k 為奇數時,(−1)k = −1;當k為偶數時,(−1)k= 1,我們可以把第1行開首的「加」號改寫為「+ (−1)0」,把第2行開首的「減」號改寫為「+ (−1)1」...如此類推,我們可知第k行開首應有一個「+ (−1)k − 1 」。
我們還可以把上式化簡,方法是引入一個新的變項Sn, k來代表上式等號右邊的第k行。
Sn, k 是由C(n, k)個項加起來的總和,每個項都是由S1、S2... Sn這n個集合中抽r個出來構成的交集的元素個數。
舉例說,當n = 5,k = 3時,S5, 3是由C(5, 3) = 10個項加起來的總和,這10個項都是由S1 ... S5這5個集合中抽3個出來構成的交集的元素個數,其中一個是|S2∩ S4∩ S5|,其餘類推。
利用Sn, k以及Σ求和符號,我們便可以把上面的「容斥原理」公式大大簡化為:|S1∪ S2∪ ... Sn| = Σ1 ≤ k ≤ n(−1)k − 1 Sn, k(2)接著讓我們證明以上「容斥原理」公式(1)的正確性,為此我們必須證明,S1...Sn這n個集合中的每一個元素在公式中都只被加一次。
我們逐一考慮各種集合元素的情況。
首先考慮那些只包含於一個集合中的元素,每個這類元素只出現於上述公式的第1行n個集合的其中一個,因此只會被加一次。
其次考慮那些包含於兩個集合的元素,每個這類元素都出現於上述公式的第1行n個集合的其中兩個,並且出現於第2行 C(n, 2)個交集的其中一個。
由於每個這類元素在第1行中被加兩次並在第2行中被減一次,因此結果該元素在公式中被加一次。
我們把上述推理推廣至一般情況,即考慮那些包含於k個集合的元素。
每個這類元素都出現於第1行的其中 C(k, 1) = k個集合,並且出現於第2行的其中C(k, 2)個交集,並且出現於第3行的其中C(k, 3)個交集...並且出現於第k行的其中C(k, k) = 1個交集(註1)。
總括而言,每個這類元素在公式中被加的次數為C(k, 1) − C(k, 2) + C(k, 3) − C(k, 4) ... (−)k − 1 C(k, k) = Σ1 ≤ r ≤ k(−1)r− 1 C(k, r)現在的問題是,如何證明上式等於1?答案是借助《點算的奧秘:二項式定理和多項式定理》中介紹的「二項式定理」:(a + b)n = Σ0 ≤ r ≤ nC(n, r) a r b n −r。
為了應用「二項式定理」,我們首先把上式等號右邊重寫:Σ 1 ≤ r ≤ k(−1)r − 1 C(k, r) = −Σ 1 ≤ r ≤ k(−1)r C(k, r)= − [Σ0 ≤ r ≤ k(−1)r C(k, r) − (−1)0 C(k, 0)]= −Σ0 ≤ r ≤ kC(k, r) (−1)r + 1現在如果把「二項式定理」中的a、b和n分別設定為−1、1和k,便得到Σ0 ≤ r ≤ kC(k, r) (−1)r = (−1 + 1)k = 0。
把這個結果代入上面最後一行,我們便得到Σ1 ≤ r ≤ k(−1)r − 1 C(k, r) = −0 + 1 = 1。
至此我們證明了每一個元素在「容斥原理」公式中都被加一次,因此該公式是正確的。
在應用上述「容斥原理」公式(1)時,我們必須逐一找出所有集合以及各種交集的元素個數,有時這是頗為繁瑣的工作,會令上述公式失去價值,因此「容斥原理」一般應用於「可交換集合」(Exchangeable Sets)。
如果從 n個集合S1、S2...Sn中任意抽取k個出來(1 ≤ r ≤ n),所得交集的元素個數只跟k有關,而跟抽取結果無關,則我們說這n個集合是「可交換」的。
換句話說,不論是由哪k 個集合構成的交集,所得交集的元素個數都是同一個數字。
上面「容斥原理」公式(1)的第k行的每一項都是由k個集合構成的交集的元素個數。
如果S1、 S2... Sn是「可交換集合」,那麼該行的每一項都是同一個數字,可不妨用符號 nk來代表。
由於該行共有C(n, k)個項,所以該行可簡化為(−1)k − 1 C(n, k) nk。
因此,「可交換集合」的「容斥原理」公式便是|S1∪ S2∪ ... Sn| = Σ1 ≤ k≤ n(−1)k − 1 C(n, k) nk(3)在某些應用中,所求的答案是不屬任何指定集合的元素個數,因此我們需要找出以上「容斥原理」公式的變化形式。
設某論域U包含n個集合S1、S2... Sn,現在我們要求不屬這n個集合的任何一個的元素個數,即|S1' ∩ S2' ∩ ... Sn'|(註2)。
根據集合論的「德.摩根律」(De Morgan's Law),S1' ∩ S2' ∩ ... Sn'等於U − (S1∪ S2∪ ... Sn),因此 |S1' ∩ S2' ∩ ... Sn'| = |U| − |S1∪ S2∪ ... Sn | = |U| + (−|S1∪ S2∪ ... Sn|)(註3)。
應用上面的「容斥原理」公式(2),我們便得到|S1' ∩ S2' ∩ ... Sn'| = |U| + Σ1 ≤ k ≤ n(−1)k Sn, k(4)同理,如果S1、S2... Sn是「可交換集合」,那麼上式便變成|S1' ∩ S2' ∩ ... Sn'| = |U| + Σ1 ≤ k ≤ n(−1)k C(n, k) nk(5)現在讓我們來看看「容斥原理」的一些簡單應用例子。
有關該原理的其他應用,以後還會談到。
例題2:從26個英文字母中(可重覆地)抽取10個出來排成字串(String)(無需考慮這個字串是否構成一個英文單詞),其中不可包含全部5個元音字母(即A、E、I、O、U),問有多少種排法?答2:利用「容斥原理」解題的關鍵在於,把原題表達為適當的集合。
就本題而言,如果我們用 SA 來代表所有由10個字母組成但不含A的字串集合...用SU來代表所有由10個字母組成但不含U的字串集合,那麼本題所要求的答案就是|SA∪ SE ∪ SI∪ SO∪ SU|。
由於5個元音字母具有平等的地位,從SA、 SE、SI、S O 和SU這5個集合中任意抽取k個出來所構成的交集的元素個數都是一樣的,所以這5個集合是「可交換」的。
因此我們可以用上面的公式(3)來解題,但須先求得 nk(1 ≤ k ≤ 5)的值。
我們先求n1的值,這個值相當於由10個字母組成但不含A、E、I、O、U中某一個字母的字串的數目。
由於撇除了一個字母,我們可以從餘下的25個字母中(可重覆地)抽取10個出來排成字串,這是一個「無限重覆排列」問題,應共有2510個這樣的字串,即n1= 2510。
接著考慮n2,這個值相當於由10個字母組成但不含A、E、I、O、U中某兩個字母的字串的數目。
由於撇除了兩個字母,我們可以從餘下的24個字母中(可重覆地)抽取10個出來排成字串,因此n2= 2410。