WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA FUNKCJE TWORZĄCE Nieskończony ciąg liczbowy: a0, a1, a2, ..., ak, ... ∞ formalnie reprezentujemy szeregiem potęgowym ∑a k =0 k xk : ∞ A( x ) = ∑ a k x k - formalne przypisanie ciągowi funkcji analitycznej A(x) (jeśli szereg potęgowy jest k =0 zbieżny) A(x) – funkcja tworząca ciągu a0, a1, a2, ..., ak, ... Definiujemy operacje na szeregach, aby manipulować ciągami: • ∞ ∞ k =0 k =0 ∞ A( x ) = ∑ ak x k i B( x ) = ∑ bk x k dla definiujemy A( x ) + B( x ) = ∑ (ak + bk ) x k dodawanie: k =0 • ∞ p ⋅ A( x ) = ∑ p ⋅ ak x k mnożenie przez liczbę: k =0 • ∞ A( x ) ⋅ B( x ) = ∑ ck x k , gdzie ck = a0 bk + a1 bk−1 + ... + ak b0 = iloczyn Cauchy’go: k =0 k ∑a b i =0 i k −i ; ciąg c0, c1, c2, ..., ck, ... nazywamy splotem ciągów ak i bk 0 ... b 6 0 ... ... a 0 b 5 a a a6 ... 4 b 2 5b 1 0 b 4 4b 1 b a 3 3b 1 ... b 3 0 b a5 3 a 3 b 2 a a 2 2b 1 2 b a a 2 3 b 2 a4 ... 5 a 2 b 4 a 0 a a 2 a 3 a 4 a3 ... 0 b 1 a 1b 1 a b 1 a b 1 a b 1 a b b 0 a 2 b 0 0 4 b 0 0 b 5 a ... 6 b 0 ... a 6 c ... b6 a 4 c b5 b 3 a b4 a 2 c b3 0b 1 0 b2 a c b1 a2 1 b0 a1 a a0 • jeżeli ak = 0 dla k > n , to funkcja tworząca ciągu jest wielomianem A(x) = a0 + a1x + ... + an xn • jeśli szereg ∞ ∑a x k =0 k k jest zbieżny w pewnym otoczeniu zera, to jego suma A(x) jest funkcją analityczną w tym otoczeniu oraz zachodzi ak = A( k ) (0) dla k = 0, 1, 2, ... ; gdzie A(k)(0) k! jest wartością k-tej pochodnej funkcji A(x) dla x = 0 ∞ szereg ∑a x k =0 k k jest rozwinięciem funkcji A(x) w szereg Maclaurina MATEMATYKA DYSKRETNA (4) J.Sikorski Strona 1 / 4 WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA ∞ ∑a x Utożsamiamy formalną reprezentację ciągu w postaci szeregu ∞ określaną przez ten szereg, np. ∑x k = k =0 k =0 ∞ 1 1− x ∑ lub k =0 k k z funkcją analityczną A(x) 1 k x = ex k! Przykłady funkcji tworzących dla różnych ciągów 1. ciąg współczynników dwumiennych dla ustalonego n: n , 0 n , 1 n , ..., 2 n , 0, 0, ... ; funkcja tworząca: n n n k n k x = x = (1 + x ) n ∑ ∑ k k =0 k =0 k ∞ ∞ 1 2. ciąg: 1, −1, 1, −1, ..., (−1)k, ... ; funkcja tworząca: ∑ ( −1) k x k = ∑ ( − x ) k = 1+ x k =0 k =0 ∞ ∞ 1 3. ciąg: 1, 2, 4, 8, ..., 2k, ... ; funkcja tworząca: ∑ 2 k x k = ∑ (2 x ) k = 1 − 2x k =0 k =0 ∞ ∞ ∞ d d 1 x 4. ciąg: 0, 1, 2, 3, ... ; funkcja tworząca: ∑ k x k = x ∑ k x k −1 = x xk = x = ∑ dx k = 0 dx 1 − x (1 − x ) 2 k =0 k =0 ∞ Funkcje tworzące dla liczby podzbiorów k-elementowych Zbiór X= { a1, ↓ (1 + x) ⋅ a2, ↓ ..., an } ↓ (1 + x) ⋅ ... ⋅ (1 + x) = (1 + x)n = ∞ n k =0 ∑ k x k ↓ ↓ ↓ 0 1 0 1 (x + x ) ⋅ (x + x ) ⋅... ⋅ (x0 + x1) podzbiór zbioru X jest wyznaczony przez podanie czy dany element ak ( k = 1, ..., n ) jest w nim zawarty, czy nie: x0 = 1 – odpowiada pominięciu danego elementu (zero wystąpień) 1 x =x – odpowiada wystąpieniu danego elementu (jeden raz) Podzbiór jest k-elementowy ↔ w k czynnikach wybrano składnik x1 Przykład dla zbioru z powtórzeniami Z = < 3∗a1, 1∗a2, 2∗a3 > ↓ ↓ ↓ (1 + x + x2 + x3) ⋅ (1 + x) ⋅ (1 + x + x2) = A(x) = ∞ ∑c x k =0 k k ck − liczba podzbiorów k-elementowych zbioru Z ; A(x) = 1 + 3x + 5x2 + 6x3 + 5x4 + 3x5 + x6 ⇒ 1 podzbiór pusty, 3 podzbiory jednoelementowe, 5 podzbiorów dwuelementowych, 6 podzbiorów trzyelementowych itd. Przy konstrukcji funkcji tworzącej dla liczby podzbiorów k-elementowych zbioru z powtórzeniami można nakładać dodatkowe warunki na liczbę wystąpień elementu ai Przykłady dodatkowych warunków dla zbioru z powtórzeniami 1. element ai musi wystąpić przynajmniej raz: czynnik odpowiadający elementowi ai − (x + x2 + x3 + ...) = x 1− x 2. element ai nie występuje lub występuje parzystą liczbę razy: czynnik odpowiadający elementowi ai − (1 + x2 + x4 + ...) = MATEMATYKA DYSKRETNA (4) J.Sikorski 1 1 − x2 Strona 2 / 4 WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA 3. element ai występuje nieparzystą liczbę razy: x 1 − x2 czynnik odpowiadający elementowi ai − (x + x3 + x5 + ...) = 4. element ai występuje dowolną liczbę razy (brak warunków): A(x) = (1 + x + x2 + ...) ⋅ ... ⋅ (1 + x + x2 + ...) = 1 1 1 = ⋅ ... ⋅ 1− x 1− x (1 − x) n Funkcja tworząca dla ciągu liczb Fibonacciego Równanie rekurencyjne dla liczb Fibonacciego: z warunkami początkowymi: daje ciąg liczb 1, 1, 2, 3, 5, 8, 13, 21, ... Fn+1 = Fn + Fn−1 F0 = F1 = 1 Jak pozbyć się definicji rekurencyjnej? Funkcja tworząca F(x) dla ciągu liczb Fibonacciego F0, F1, F2, ... spełnia następujące równanie wynikające z definicji rekurencyjnej: ∞ F(x) = ∑F x k =0 k k ∞ = 1 + 1⋅x + ∑ (F k =2 k −1 ∞ ∞ k =2 k =2 + Fk − 2 )x k = 1 + x + x⋅ ∑ Fk −1 x k −1 + x2⋅ ∑ Fk − 2 x k − 2 = 2 = 1 + x + x⋅(F(x) – 1) + x ⋅F(x) , 1 1 − x − x2 1+ 5 1− 5 W postaci iloczynowej 1 − x − x2 = (1 − a⋅x) (1 − b⋅x) , gdzie a = i b= 2 2 k +1 k +1 ∞ a −b 1 1 a b Zatem F(x) = = xk − =∑ (1 − ax )(1 − bx ) a − b 1 − ax 1 − bx k = 0 a − b czyli F(x) = 1 + x + x⋅(F(x) – 1) + x2⋅F(x) = 1 + (x + x2)⋅F(x) Ostatecznie: 1 1 + 5 Fk = 5 2 k +1 1− 5 − 2 k +1 i stąd F(x) = , dla k = 0, 1, 2, ... Analogiczne podejście z zastosowaniem funkcji tworzącej można stosować dla innych równań rekurencyjnych definiujących ciągi szczególnych liczb, w których występują stałe współczynniki: an = A1⋅an−1 + A2⋅an−2 + ... + Ak⋅an−k dla n ≥ k , gdzie k i A1, A2, ..., Ak są ustalone, oraz dane są warunki początkowe przez określenie wartości a0, a1, a2, ..., ak-1 ZASADA WŁĄCZANIA− −WYŁĄCZANIA |A∪B|=|A|+|B|−|A∩B| A B |A∪B∪C|=|A|+|B|+|C|−|A∩B|−|A∩C|−|B∩C|+|A∩B∩C| B A C Dany jest zbiór X i rodzina podzbiorów zbioru X: A1, A2, ..., An Jak należy wyznaczać | A1 ∪ A2 ∪ ... ∪ An | ? MATEMATYKA DYSKRETNA (4) J.Sikorski Strona 3 / 4 WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA + − | A1 | + | A2 | + ... + | An | ∑| A ∩ A i 1≤i < j ≤ n j ∑| A ∩ A + 1≤i < j < k ≤ n − ... i | j ∩ Ak | ... Twierdzenie (zasada włączania-wyłączania) n n U Ai = ∑| Ai | − i =1 i =1 ∑| A ∩ A 1≤ i < j ≤ n i j |+ ∑| A ∩ A 1≤ i < j < k ≤ n i j ∩ Ak | − ... + (−1)n−1| A1 ∩ ... ∩ An | Dowód (indukcja względem n) Dla n = 1 twierdzenie jest prawdziwe. Załóżmy, że jest prawdziwe dla pewnego n , tzn. n n U Ai = ∑ | Ai | − i =1 i =1 ∑| A ∩ A 1≤ i < j ≤ n i j | + ... + (−1)n−1| A1 ∩ ... ∩ An | n UA ∩ A Dla zbioru n +1 i i =1 n UA ∩A n +1 i i =1 n +1 Stąd n = ∑ | Ai ∩ An +1 | − i =1 n UA = UA ∪ A i i =1 n zachodzi i i =1 n +1 = ∑| A ∩ A 1≤ i < j ≤ n n UA i i =1 i + An +1 − j ∩ An +1 | + ... + (−1)n−1| A1 ∩ ... ∩ An ∩ An+1 | n UA ∩ A i i =1 + (−1) | A1 ∩ ... ∩ An ∩ An+1 | n +1 n +1 = = ∑ | Ai | − i =1 ∑| A ∩ A 1≤ i < j ≤ n +1 i j | + ... ! Przykłady zastosowania zasady włączania-wyłączania Zbadano 50 samochodów wykonując testy na poziom zawartości trzech grup zanieczyszczeń: NOx, HC, CO; 1 samochód nie spełnia żadnej z trzech norm, 3 samochody przekroczyły poziom NOx i HC, 2 samochody przekroczyły poziom NOx i CO, 1 samochód przekroczył poziom HC i CO, 6 samochodów ma zbyt wysoki poziom NOx, 4 samochody maja zbyt wysoki poziom HC a 3 samochody maja zbyt wysoki poziom CO. Ile samochodów spełnia wszystkie testowane normy? A1 – zbiór samochodów o przekroczonym poziomie NOx A2 – zbiór samochodów o przekroczonym poziomie HC A3 – zbiór samochodów o przekroczonym poziomie CO |A1| = 6, |A2| = 4, |A3| = 3 |A1 ∩ A2| = 3, |A1 ∩ A3| = 2, |A2 ∩ A2| = 1, |A1 ∩ A2 ∩ A3| = 1 zbiór samochodów, które nie spełniają co najmniej jednej z norm = A1 ∪ A2 ∪ A3 |A1 ∪ A2 ∪ A3| = 6 + 4 + 3 – 3 – 2 –1 + 1 = 8 | zbiór tych, które spełniają | = 50 – 8 = 42 MATEMATYKA DYSKRETNA (4) J.Sikorski Strona 4 / 4