391 likes | 894 Views
第七章 進階計數技巧. §7.1 遞迴關係 (Recurrence Relations) §7.2 求解線性遞迴關係 §7.3 分部擊破演算法 §7.4 生成函數 (Generating Functions) §7.5 排容 (Inclusion-Exclusion) §7.6 排容的應用. 生成函數 (§7.4). 生成函數是表現數列一種有效的方式,它將數列的項當成 x 冪級數之係數。 生成函數能用來求解許多形態之計數問題。 透過將遞迴關係之數列轉換成生成函數,然後利用與生成函數有關之方程式來求解遞迴關係之解。
E N D
第七章 進階計數技巧 §7.1 遞迴關係(Recurrence Relations) §7.2 求解線性遞迴關係 §7.3 分部擊破演算法 §7.4 生成函數(Generating Functions) §7.5 排容(Inclusion-Exclusion) §7.6 排容的應用
生成函數(§7.4) • 生成函數是表現數列一種有效的方式,它將數列的項當成x冪級數之係數。 • 生成函數能用來求解許多形態之計數問題。 • 透過將遞迴關係之數列轉換成生成函數,然後利用與生成函數有關之方程式來求解遞迴關係之解。 • 藉由某些函數間相對簡單的關連性,利用比較係數的方式,生成函數也能用來證明組合等式。
定義:實數數列a1, a2, …, ak, …的生成函數為冪級數 上述定義所給定之數列{ak}的生成函數有時稱為 一般生成函數(ordinary generating function),用來與根據相同數列建立之其他形態生成函數做區別。
例:數列1, 1, 1, 1, 1, 1的生成函數為何? • 解:生成函數為 G(x) = 1 + x + x2 +x3 + x4 + x5 當x 1時, (x6 1)/(x 1) = 1 + x + x2 +x3 + x4 + x5, 所以,G(x) = (x6 1)/(x 1)。 因為x的次冪只用來表示數列中項數的順序位置,所以我們不須擔心G(1)是沒有定義的。
例:令m為正整數且ak = C(m, k),k = 0, 1, …, m。數列{ak}的生成函數為何? • 解:數列的生成函數為 G(x) = C(m, 0) + C(m, 1)x + … + C(m, m)xm 二項式定理告訴我們G(x) = (1 + x)m。
有關冪級數之有用事實 • 例:函數f(x) = 1/(1 x)是數列1, 1, 1, 1, …的生成函數。 因為當x < 1時,1/(1x) = 1 + x + x2 + …。 • 例:函數f(x) = 1/(1 ax)是數列1, a, a2, a3, …的生成函數。 因為當ax < 1(即,x < 1/a)時, 1/(1ax) = 1 + ax + a2x2 + …。
我們也需要一些將兩個生成函數相加或相乘的結果。這些結果的證明可於微積分課本中找到。 • 定理:令f(x) = 與g(x) = 。則 f(x) + g(x) = 且 f(x)g(x) =
一些有用的等式 ak 生成函數 G(x)
例:令 f(x) = 1/(1x)2利用前頁的公式找出展式的係數。 • 解:
推廣之二項式定理 • 令u為一實數而k為非負整數。則推廣之二項式係數(extended binomial coefficient)為 • 推廣的二項式定理
計數問題與生成函數 • 例:找出方程式e1+e2+e3= 17之解的個數,其中2e15,3e26和4e37。 • 解:在這些限制下,解的個數為下面之展式 (x2+x3+x4+x5)(x3+x4+x5+x6)(x4+x5+x6+x7) 中x17項之係數。 不難發現x17之係數為3。 所以,欲求之方程式在限制條件下有3組解。
例:將八個相同的餅乾分給三個小孩,若每個小孩至少有兩個但不能超過四個餅乾。能有幾種不同的分配方式?例:將八個相同的餅乾分給三個小孩,若每個小孩至少有兩個但不能超過四個餅乾。能有幾種不同的分配方式? • 解:因為每個小孩至少有兩個但不能超過四個餅乾,所以每個小孩在數列{cn}的生成函數中都能以相同的乘式(x2+x3+x4)來代表,其中cn為分配n個餅乾的方法數。 由於有三個小孩,所以生成函數為(x2+x3+x4)3。找出x8之係數,計算後得到係數為6。所以有六種方法來分配餅乾。
例:利用生成函數來找出n個元素集合中k-組合的可能方法數。假定二項式定理已知。例:利用生成函數來找出n個元素集合中k-組合的可能方法數。假定二項式定理已知。 • 解:令f(x) = 為數列{ak}之生成函數,其中ak表示n個元素集合中k-組合的可能方法數。 每個集合中的元素都對應於生成函數f(x)中的(1 + x)項。所以,f(x) = (1 + x)n。 根據二項式定理, 其中C(n, k) = n!/[k!(n k)!]。 所以,n個元素集合中k-組合的可能方法數C(n, k)為 n!/[k!(n k)!]。
例:利用生成函數求出當允許重複時,n個元素集合之r-組合數。例:利用生成函數求出當允許重複時,n個元素集合之r-組合數。 • 解:令G(x)是數列{ar}的生成函數,其中ar表示允許重複時n個元素集合之r-組合數。每個元素都對G(x)提供了一個(1+x+x2+x3+ …)的乘式。 由於集合中有n個元素,故G(x) = (1+x+x2+x3+ …)n。 由於x < 1,有1 + x + x2 + x3 + … = 1/(1 + x) 。 所以,G(x) = 1/(1x)n= (1x)n。使用二項式定理, G(x) = (1 + (x))n = 當r是正整數時,允許重複之n個元素集合的r-組合數即為總和中xr的係數ar。利用推廣之二項式的範例能找出ar等於C(n + r 1, r)。
利用生成函數求解遞迴關係 • 例:求解遞迴關係ak = 3ak1,其中k = 1, 2, 3, …而初始條件為a0 = 2。 • 解:令G(x)是數列{ar}的生成函數
例:假定一個有效的編碼字是個包含偶數個0長度為n之十進位數字字串。令an表示長度為n之有效編碼字數。在6.1節的範例中證明數列{an}滿足遞迴關係an = 8an1 + 10n1且初始條件為a1 = 9。利用生成函數找出an的明確公式。 • 解:為簡化推得生成函數的工作,我們假設a0 = 1。根據遞迴關係,a1 = 8a0 + 100 = 8 + 1 = 9,不違背原來的初始條件。 將遞迴關係之等式兩端同乘xn得到 anxn = 8an1xn1 + 10n1xn 如此一來,問題轉化成:
求解遞迴關係an = 8an1 +10n1,其中n = 1, 2, … 且初始條件為a0 = 1。 • 由於anxn = 8an1xn + 10n1xn,且
等式證明與生成函數 • 例:使用生成函數來證明,當n是個正整數時, • 解:C(2n, n)為(1 + x)2n中xn項之係數。 展開式中xn項之係數為
排容原理(§7.5) • 兩個有限集合A和B聯集之元素個數為兩集合元素個數之和減掉其交集元素個數。也就是, AB = A + BAB。 • 此公式稱為排容原理(principle of inclusion-exclusion)。 • 考慮三個集合A,B與C聯集之元素個數,我們發現A + B + C中,只恰恰在某一個集合中的元素只算了一次,但是恰在兩集合中之元素被算了兩次。移去重複計算的部份,減去兩兩相交之交集元素個數。如下: A + B + CABACBC。 再加上被減掉太多次的部份,我們能得到 ABC =A+B+CABACBC+ABC。
例:在離散數學課中,每個學生不是主修數學就是主修電腦科學。主修電腦科學的學生有25個;主修數學的有13個;而同時主修電腦科學和數學的學生有8個。則這個班上共有多少個學生?例:在離散數學課中,每個學生不是主修數學就是主修電腦科學。主修電腦科學的學生有25個;主修數學的有13個;而同時主修電腦科學和數學的學生有8個。則這個班上共有多少個學生? • 解:令A為主修電腦科學的學生所成集合;B為主修數學之學生所成集合。則AB表示同時主修電腦科學和數學的學生集合。 因為班上的學生不是主修數學就是主修電腦科學,班上學生數為即AB, 故AB = A + BAB = 25 +13 8 = 30。 所以,班上共有30個學生。
例:有多少個不超過1000的正整數能被7或11整除?例:有多少個不超過1000的正整數能被7或11整除? • 解:令A為不超過1000能被7整除的正整數所成集合;令B為不超過1000能被11整除的正整數所成集合。 AB為不超過1000能被7或11整除的正整數所成集合;而AB為不超過1000能同時被7與11整除的正整數所成集合。 能被7整除的正整數個數為1000/7;能被11整除的正整數個數為1000/11;能同時被7與11整除的正整數個數為1000/(711)。 因而,AB = A + BAB= 1000/7 + 1000/111000/(711) = 142 + 90 12 = 220個不超過1000能被7或11整除的正整數。
例:假設學校中有1807個新生,他們之中有453人選了電算系的課,567人選了數學系的課,299人同時選修電算與數學系的課。一共有多少人既沒選數學系的課,也沒選修電算系的課?例:假設學校中有1807個新生,他們之中有453人選了電算系的課,567人選了數學系的課,299人同時選修電算與數學系的課。一共有多少人既沒選數學系的課,也沒選修電算系的課? • 解:令A為新生中有修電算系課的學生集合;B為新生中有修數學系課的學生集合。 根據題意A = 453,B = 567而AB = 299。所以,有選數學系或是有修電算系課的人數為 AB = A + BAB = 453 + 567 299 = 721。 因此,既沒選數學系的課也沒選修電算系的課的人數為1807 721 = 1086人。
例:若有1232個學生修西班牙文,879個學生修法文,114個學生修俄文。此外,有103個人同時修西班牙文與法文,23個人同時修西班牙文和俄文,14個學生同時修法文和俄文。若有2092個學生至少修一門語文課(西班牙文、法文或俄文),則有多少學生同時修這三門語言課?例:若有1232個學生修西班牙文,879個學生修法文,114個學生修俄文。此外,有103個人同時修西班牙文與法文,23個人同時修西班牙文和俄文,14個學生同時修法文和俄文。若有2092個學生至少修一門語文課(西班牙文、法文或俄文),則有多少學生同時修這三門語言課? • 解:令S為修西班牙文之學生所成集合,F為修法文之學生所成集合,R為修俄文之學生所成集合。則有S = 1232,F = 879,R = 114,SF = 103,SR = 23,FR = 14,且SFR = 2092。 代入公式SFR = S + F + RSFSRFR + SFR。得到2092 = 1232 + 879 + 114 103 23 14 + SFR。解SFR,得到SFR = 7。即,有七個學生同時修這三門語言課。
排容原理(the principle of inclusion-exclusion) 令A1, A2, …, An為有限集合。則
例:對於4個集合之聯集,找出一個公式來求出聯集之元素個數。例:對於4個集合之聯集,找出一個公式來求出聯集之元素個數。 • 解:排容原理證明 A1A2A3A4=A1+A2+A3+A4 A1 A2A1 A3A1 A4A2 A3 A2 A4A3 A4+A1 A2 A3 +A1 A2 A4+A1 A3 A4 +A2 A3 A4 A1 A2 A3 A4 我們注意到,公式中有15個不同的項,包含所有{A1, A2, A3, A4}的任意交集組合。
排容的應用(§7.6) • 有許多計數問題能使用排容原理來求解。 • 我們能用原理來求出小於某正整數之質數個數。 • 有許多問題能藉由計算一個有限集合對應到另一個有限集合間之映成函數個數來求解。排容原理便能用來求出這類函數之個數。 • 著名的帽子問題(hatcheck problem)──將帽子隨機還給寄放帽子的人時,沒有人拿到自己的帽子之機率為何?──便能用排容原理來求出答案。
另一種排容形式 • 排容原理有另一種形式:對找出某集合中不具P1, P2, …, Pn等n個性質之元素個數時相當有用。 令Ai為具有性質Pi之元素所成之子集合。有 等性質之元素個數為 若不具P1, P2, …, Pn等n個性質之元素個數記為 ,且集合中所有元素個數記為N,則 = NA1A2An • 根據排容原理,我們發現
例:當x1, x2和x3為非負整數,x1 3, x2 4與x3 6時,方程式x1 + x2 + x3 = 11有多少組解? • 解:利用排容原理,假定某解有性質P1,若x1 > 3;某解有性質P2,若x2 > 4;某解有性質P3,若x3 > 6。則滿足不等式x1 3, x2 4與x3 6之解的個數為 • N = C(3+111, 11) = 78, • N(P1) = C(3+71, 7) = 36,N(P2) = C(3+61, 11) = 28,N(P3) = C(3+41, 4) = 15, • N(P1P2) = C(3+21, 2) = 6,N(P1P3) = C(3+01, 0) = 1,N(P2P3) = 0,N(P1P2P3) = 0。 將這些量代入的公式,得到解的個數為
埃拉托斯特尼篩選法 • 用來找出不超過某特定正整數之所有質數。譬如,下面之程序是用來找出不大於100的質數。 • 首先,保留2但將所有能被2整除的整數都刪去。 • 因為3是第一個來留下來之大於2的整數,所以保留3但將留下來之整數中,所有能被3整除的整數都刪去。 • 因為5是第一個來留下來大於3的整數,所以保留5但將留下來之整數中,所有能被5整除的整數都刪去。 • 接下來處理的整數為7,保留7但將留下來之整數中,所有能被7整除的整數都刪去。 • 由於不大於100的合成數一定都能被2, 3, 5或是7整除,所以留下來的必然都是質數。
找出不大於100的質數個數 • 要找出不大於100的質數,首先注意到不大於100的合成數一定有個質因數不大於10。因為不大於10的質數只有2, 3, 5和7,故不大於100的質數,除了這四個外,就是所以大於1不大於100而無法被2, 3, 5和7整除的正整數。 不大於100(大於1)的而能被{2, 3, 5, 7}之任意子集合中所有質數整除之整數個數為100/N,其中N為子集合中所有質數之乘機。(因為任意兩質數並沒有公因數。) 使用排容原理: 99 100/2 100/3 100/5 100/7 + 100/23 + 100/25+ 100/27+ 100/35+ 100/37+ 100/57 100/235 100/237 100/257 100/357 + 100/2357 = 9950332014+16+10+7+6+4+23210+0 = 21 因而得知有4 + 21 = 25個質數不大於100。
映成函數的數目 • 例:由6個元素集合對應到3個元素集合之映成函數有多少個? • 解:假設在對應域中的元素為b1,b2與b3。令P1,P2與P3分別表示b1,b2與b3不在值域中的性質。一個映成函數若且唯若此函數沒有P1,P2與P3這三個性質。根據排容原理, 其中N為由6個元素集合對應到3個元素集合之所有函數個數。我們將計算等式右端的每一項。 已知N = 36。N(Pi)為bi不在值域中之函數個數,每個定義域之元素有兩個選擇,所以N(Pi) = 26。這種情況共有C(3, 1)種。相同的理由,因為N(PiPj)為bi與bj不在值域中之函數個數,所以N(PiPj) = 16 = 1。而這種情況有C(3, 2)種。最後,N(P1P2P3) = 0,因為b1,b2與b3都不在值域中之函數個數,很明顯的沒有這樣的函數。因此,由6個元素集合對應到3個元素集合之映成函數個數為 36 C(3, 1)26 +C(3, 2)16 = 729 192 + 3 = 540
定理:令m與n為正整數,mn。則共有 nm C(n, 1)(n 1)m + C(n, 2)(n 2)m … + (1)n1C(n, n 1)(1)m 個由m個元素集合對應到n個元素集合之映成函數。
例:將五種不同工作分配給四個僱員,若每個人至少有一件工作,則有多少種分配的方法?例:將五種不同工作分配給四個僱員,若每個人至少有一件工作,則有多少種分配的方法? • 解:將工作分配考慮為由五個工作之集合對應到四個僱員之集合的函數。由於每個僱員都至少有一個工作,所以此函數為由5個元素集合對應到4個元素集合之映成函數。 根據定理可得, 45 C(4, 1)35 + C(4, 2)25 C(4, 3)15 = 1024 972 + 192 4 = 240 種分配方式將五個不同工作分配給四個僱員,且每個人至少有一件工作。
亂排 • 所謂亂排(derangement)是指將n個物件重新排列沒有一個物件留在原來位置的排列。 • 例:排列21453為12345的亂排。因為第一種排列中沒有一個元素在原來的位置。然而,21543就不是12345的亂排,因為4的位置並沒有變。 • 令Dn表示n個物件的亂排個數。譬如,D3 = 2,因為123的亂排有231與312。我們將利用排容原理來計算所有正整數n的Dn。
定理:n個元素的亂排個數為 Dn = n![1 1/1! + 1/2! 1/3! + … + (1)n(1/n!)] • 帽子問題(需要一些簡單的機率概念) 一個新的僱員在衣物寄存間時,忘了將將n個客人寄存帽子編號。當客人來取回帽子時,這個僱員便從尚存的帽子中隨機拿一頂。則沒有一位客人取回自己的帽子之機率為何? • 解:根據定理,機率為 Dn/n! = 1 1/1! + 1/2! 1/3! + … + (1)n(1/n!)。 利用微積分的方法能證明出 1 1/1! + 1/2! 1/3! + … + (1)n(1/n!) + … = e1 ~ 0.368。