Matematyka Dyskretna Andrzej Szepietowski 25 marca 2004 roku Rozdział 1 Podstawowe pojęcia, oznaczenia 1.1 Sumy Mając dany skończony ciąg a1, a2,... ak, sumę jego elementów zapisujemy jako k ai. i=1 Niezbyt formalnie możemy to zapisać k ai = a1 + a2 + + ak. i=1 Jako przykład zastosujmy symbol sumy do zapisu wzoru na sumę ciągu arytmetycznego). k (k + 1)k i = 1 + 2 + + k = (1.1) 2 i=1 oraz wzoru na sumę ciągu geometrycznego). k xk+1 - 1 xi = 1 + x + x2 + + xk = , (1.2) x - 1 i=0 (wzór (1.2) jest słuszny dla każdego x = 1)
Będziemy też używać zapisu typu ai = a1 + a2 + a3 + a4 + a5 + a6. 1d"id"6 W tym przypadku zbiór indeksów określony jest za pomocą warunku pod znakiem sumy. Warunek określający indeksy, po których należy sumować może być bardziej skompliko- wany, na przykład ai = a2 + a4 + a6. 1d"id"6 i parzyste 3 4 Rozdział 1. Podstawowe pojęcia, oznaczenia Stosować będziemy także zapis ai i"I oznaczający sumę tych elementów ai, których indeksy należą do skończonego zbioru indeksów I. Na przykład, jeżeli I = {1, 3, 5, 7}, to ai = a1 + a3 + a5 + a7. i"I Możemy też sumować ciągi, których elementy zależą od dwóch indeksów, aij = aija12 + a13 + a22 + a23 + a32 + a33. 1d"id"3 1d"id"3 2d"jd"3 2d"jd"3 Za pomocą podwójnej sumy możemy, na przykład, przedstawić uogólnione prawo roz- dzielności mnożenia względem dodawania: ł ł ł ł ł ł aiłł bjłł = aibj (1.3) 1d"id"m 1d"id"m 1d"jd"n 1d"jd"n a także wzór na podnoszenie sumy do kwadratu: ł ł2 ł aiłł = a2 + 2aiaj (1.4) i 1d"id"m 1d"id"m 1d"i1.2 Iloczyny Aby zapisać iloczyn elementów ciągu a1, a2,..., ak, stosujemy zapis k ai. i=1 Znów niezbyt formalnie możemy to zapisać jako k ai = a1 a2 ak. i=1 1.3 Zbiory " oznacza zbiór pusty, który nie zawiera żadnych elementów. N oznacza zbiór liczb naturalnych N = {0, 1, 2, 3, . . .}. Z oznacza zbiór liczb całkowitych. 1.3. Zbiory 5 Q oznacza zbiór liczb wymiernych. R oznacza zbiór liczb rzeczywistych. a " A oznacza, że elment a należy do zbioru A, a " A, że elment a nie należy do / zbioru A. Najprostszy sposób zdefiniowania zbioru polega na wypisaniu jego elementów w nawiasach klamrowych. Na przykład zbiór {1, 2, 3} zawiera elementy 1,2,3. Inny spo- sób definiowania zbioru polega na podaniu własności, którą spełniają elementy zbioru. Na przykład {x | x " N, 3 < x < 7} oznacza zbiór liczb naturalnych większych od 3 i mniejszych od 7. |A| oznacza moc zbioru A, czyli liczbę jego elementów. |{3, 6, 9}| = 3, |"| = 0. A *" B oznacza sumę zbiorów, czyli zbiór zawierający elementy, które należą do A lub do B: A *" B = {x : x " A lub x " B}. A zatem suma A *" B zawiera wszystkie elementy zbioru A i wszystkie elementy zbioru B. A )" B oznacza iloczyn lub przekrój zbiorów, czyli zbiór zawierający elementy, które należą do obu zbiorów naraz. A )" B = {x : x " A i x " B}. A - B oznacza różnicę zbiorów, czyli zbiór zawierający elementy, które należą do A i nie należą do B. A - B = {x : x " A i x " B}. / Przykład 1.1 Dla A = {1, 2, 4} i B = {1, 4, 6} mamy: A *" B = {1, 2, 4, 6}, A )" B = {1, 4}, A - B = {2}. A ą" B oznacza, że zbior A zawiera się w zbiorze B, to znaczy wszystkie elementy zbioru A należą do zbioru B. {2, 1} ą" {1, 2, 3} Dwa zbiory są równe jeżeli zawierają te same elementy, lub inaczej A = B wtedy i tylko wtedy gdy A ą" B i B ą" A. {1, 4, 2, 3} = {4, 1, 3, 2}. Jak widać kolejność elementów w zapisie zbioru nie ma znaczenia. I tak na przykład {1, 2} = {2, 1}. Taki zbiór dwuelementowy nazywamy parą nieuporządkowaną. W poniższym lemacie zebrano podstawowe własności operacji sumy i iloczynu zbio- rów. Lemat 1.2 " A *" B = B *" A (przemienność sumy). " A )" B = B )" A (przemienność iloczynu). 6 Rozdział 1. Podstawowe pojęcia, oznaczenia " A *" (B *" C) = (A *" B) *" C (łączność sumy). " (A )" B) )" C = A )" (B )" C) (łączność iloczynu). " (A *" B) )" C = A )" C *" B )" C (rozdzielność sumy względem iloczynu). " (A )" B) *" C = (A *" C) )" (B *" C) (rozdzielność iloczynu względem sumy). " A *" " = A, A )" " = ", A *" A = A, A )" A = A, Dowód: Udowodnimy tylko rozdzielność sumy względem iloczynu. W tym celu pokaże- my dwa zawierania: (A *" B) )" C " A )" C *" B )" C oraz A )" C *" B )" C " (A *" B) )" C. Aby udowodnić zawieranie (A *" B) )" C " A )" C *" B )" C, weżmy dowolny element x " (A *" B) )" C, wtedy x " A *" B oraz x " C, a to oznacza, że x nalezy do C i do jednego ze zbiorów A lub B (lub do obu), czyli należy do A )" C lub do B )" C, a więc x " A )" C *" B )" C. Pokazaliśmy więc, że dowolny element z (A *" B) )" C należy do A )" C *" B )" C. Aby udowodnić zawieranie A )" C *" B )" C " (A *" B) )" C. weżmy dowolny element x " A )" C *" B )" C, wtedy x " A )" C lub x " B )" C, a to oznacza, że x nalezy do C i do jednego ze zbiorów A lub B (lub do obu), czyli należy do A *" B oraz do C, a więc x " (A *" B) )" C. Pokazaliśmy więc, że dowolny element z A )" C *" B )" C należy do (A *" B) )" C. 1.4 Różnica symetryczna zbiorów A " B oznacza różnicę symetryczną zbiorów, która zawiera elementy należące tylko do jednego z dwóch zbiorów: A " B = (A - B) *" (B - A). Przykład 1.3 {1, 2, 4} " {1, 4, 6} = {2, 6}. W poniższym lemacie zebrano podstawowe własności różnicy symetrycznej zbiorów. Lemat 1.4 " A " B = B " A (przemienność). " (A " B) " C = A " (B " C) (łączność). " (A " B) )" C = A )" C " B )" C (rozdzielność względem iloczynu). " A " " = A, A " A = ". " Jeżeli A " B = ", to A = B. Dowód: Udowodnimy, tylko dwie tożsamości, dowód pozostałych pozostawiamy czytelnikowi jako ćwiczenie. 1.5. Iloczyn kartezjański 7 Aby pokazać, że różnica symetryczna jest łączna wystarczy zauważyć, że zbiór A " (B"C) lub (A"B)"C zawiera te elementy, które należą do nieparzystej liczby zbiorów, czyli te, które należą tylko do A, B lub C, plus te, które należą do przekroju A )" B )" C. Udowodnimy teraz ostatnią implikację. Jeżeli A " B = ", to A = A " " = A " (A " B) = (A " A) " B = " " B = B. Twierdzenie 1.5 Różnica symetryczna n zbiorów: A1 " A2 " . . . " An zawiera elementy, które należą do nieparzystej liczby spośród zbiorów A1, A2, . . . , An. Dowód przez indukcję ze względu na n. Twierdzenie jest oczywiste dla n = 1 lub n = 2. Załóżmy teraz, że jest ono prawdziwe dla n i rozpatrzmy: A1 " . . . " An " An+1 = (A1 " . . . " An) " An+1. Zbiór ten zawiera te elementy, które należą do (A1 " . . . " An) i nie należą do An+1, oraz te, które nie należą do (A1 " . . . " An) i należą do An+1. W pierwszym przypad- ku są to elementy, które nie należą do An+1 i na mocy założenia indukcyjnego należą do jakiejś nieparzystej liczby zbiorów spośród A1, . . . , An. W drugim przypadku są to elementy, które należą do An+1, a także do pewnej parzystej liczby zbiorów spośród A1, . . . , An. Razem mamy wszystkie elementy należące do nieparzystej liczby zbiorów spośród A1, . . . , An+1. 1.5 Iloczyn kartezjański Para uporządkowana jest to dwuelementowy ciąg (x, y). Mamy (x, y) = (u, v) wtedy i tylko wtedy gdy x = u oraz y = v. Dopuszczalne jest także x = y. A B oznacza iloczyn kartezjański zbiorów A i B. Jest to zbiór wszystkich uporząd- kowanych par (a, b), w których a " A i b " B. Inaczej A B = {(a, b) | a " A, b " B}. Przykład 1.6 Dla A = {1, 3, 5} i B = {3, 4} mamy A B = {(1, 3), (1, 4), (3, 3), (3, 4), (5, 3), (5, 4)}. Można łatwo wykazać, że |A B| = |A| |B|. 8 Rozdział 1. Podstawowe pojęcia, oznaczenia 1.6 Rodzina zbiorów Czasami będziemy mieli do czynienia ze zbiorem, którego elementami są zbiory. Przez P(A) lub 2A będziemy oznaczać zbiór wszystkich podzbiorów zbioru A. Przykład 1.7 Dla A = {a, b} P(A) = {", {a}, {b}, {a, b}}. Zbiór zbiorów nazywamy czasami rodziną zbiorów. Na przykład A = {A1, A2, A3, A4} jest rodziną zawierającą cztery zbiory A1, A2, A3 i A4, są to elementy zbioru A. Możemy też zapisać A = {Ai | 1 d" i d" 4}. Możemy sumować zbiory z rodziny. Suma k Ai i=1 zawiera te elementy, które należą do któregoś ze zbiorów A1, A2, ... ,Ak, czyli k Ai = {x | "i 1d"id"k x " Ai}. i=1 Inaczej możemy to zapisać: k Ai = A1 *" A2 *" . . . *" Ak. i=1 Będziemy też używać zapisu Ai i"I na oznaczenie sumy wszystkich zbiorów Ai, których indeksy należą do zbioru I. Zacho- dzi wtedy Ai = {x | "i"I x " Ai}. i"I Zbiór indeksów sumowania może być określony za pomocą warunku. Ai = A2 *" A3 *" A4 *" A5. 1Dla sumy zbiorów zachodzi prawo rozdzielności sumy względem przekroju: Lemat 1.8 C )" Ai = (C )" Ai) i"I i"I 1.6. Rodzina zbiorów 9 Dowód: Wezmy dowolny element x " C )" Ai. Wtedy x należy do C i do któregoś i"I ze zbiorów Ai, czyli dla jakiegoś i " I, x należy do C )"Ai, a to znaczy, że x " (C )" i"I Ai). Wezmy z kolei dowolny element x " (C )" Ai). Wtedy x należy do C )" Ai i"I dla jakiegoś i " I, czyli x nalezy do C i do sumy Ai, czyli należy do przekroju i"I C )" Ai. i"I Możemy też brać przekroje zbiorów z rodziny. Przekrój k Ai i=1 zawiera te elementy, które należą do wszystkich zbiorów A1, A2, ... ,Ak, czyli k Ai = {x | "i 1d"id"k x " Ai}. i=1 Inaczej możemy to zapisać: k Ai = A1 )" A2 )" . . . )" Ak. i=1 Będziemy też używać zapisu Ai i"I na oznaczenie przekroju wszystkich zbiorów Ai, których indeksy należą do zbioru I. Zachodzi wtedy Ai = {x | "i"I x " Ai}. i"I Zbiór indeksów przekroju może być określony za pomocą warunku: Ai = A2 )" A3 )" A4 )" A5. 1Przykład 1.9 Wezmy rodzinę złożoną z trzech zbiorów A1 = {4, 6, 8}, A2 = {4, 5, 6}, A3 = {4, 5, 8, 9}. 3 3 Ai = {4, 5, 6, 8, 9}, Ai = {4}. i=1 i=1 Przykład 1.10 Niech I = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} będzie zbiorem indeksów. Dla każ- dego i " I określamy zbór Ai = {x " N | 1 d" x d" i}. Mamy: Ai = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, Ai = {1}, i"I i"I Ai = {1, 2, 3, 4, 5, 6}, Ai = {1, 2}. 110 Rozdział 1. Podstawowe pojęcia, oznaczenia 1.7 Grafy (nieskierowane) Definicja 1.11 Graf (nieskierowany) G = (V, E) jest to para składająca się ze skończo- nego zbioru wierzchołków V oraz ze zbioru krawędzi E, gdzie krawędzie to pary wierz- chołków. E ą" {{u, v} | u, v " V, u = v}.
O krawędzi e = {u, v} mówimy, że łączy wierzchołki u i v, a o wierzchołkach u i v, że są końcami krawędzi e. Wierzchołki połączone krawędzią nazywamy sąsiednimi. Stopień wierzchołka v, oznaczany przez d(v), jest to liczba krawędzi wychodzących z v. Graf przedstawiamy na rysunku jako zbiór punktów (lub kółek) połączonych odcin- kami (lub łukami). Rysunek 1.1: Przykład grafu a c b d g e f Przykład 1.12 Rysunek 1.1 przedstawia graf G = (V, E) ze zbiorem wierzchołków V = {a, b, c, d, e, f, g} i zbiorem krawędzi E = {{a, b}, {a, d}, {a, e}, {a, g}, {b, c}, {c, g}, {c, f}, {d, f}, {e, f}, {f, g}}. Sto- pień wierzchołków a i f wynosi 4, wierzchołki c i g są stopnia 3, wierzchołki b, d i e stopnia 2. Graf H = (VH , EH) nazywamy podgrafem grafu G = (VG, EG), jeżeli VH ą" VG oraz EH ą" EG. Przykład 1.13 Graf przedstawiony na rysunku 1.3 jest podgrafem grafu z rysunku 1.1. Graf pełny o n wierzchołkach, oznaczany przez Kn, jest to graf z n wierzchołkami, w którym każde dwa wierzchołki połączone są krawędzią. Droga lub ścieżka w grafie G = (VG, EG) jest to ciąg wierzchołków v0, v1, . . . , vk, taki, że dla każdego i, 1 d" i d" k, wierzchołki vi-1, vi są połączone krawędzią, czyli {vi-1, vi} " EG. O drodze v0, v1, . . . , vk mówimy, że łączy wierzchołki v0 i vk. Mówi- my także, że wierzchołek vk jest osiągalny z wierzchołka v0. Droga jest zamknięta jeżeli 1.7. Grafy (nieskierowane) 11 Rysunek 1.2: Graf pełny K6. a b c d e f v0 = vk. Droga jest prosta, jeżeli wszystkie występujące w niej wierzchołki są różne. Drogę v0, v1, . . . , vk nazywamy cyklem jeżeli v0 = vk, k e" 3 oraz wszystkie wierzchołki v1, . . . , vk są różne. Przykład 1.14 W grafie z rysunku 1.1 ciąg e, a, d, a, b, c, g jest drogą, a ciąg a, e, f, d, a jest cyklem. Ciąg a, e, f, d, a, b, c, g, a jest drogą zamkniętą, ale nie jest cyklem. Graf G jest spójny, jeżeli dla każdych dwóch wierzchołków u, v " VG istnieje ścieżka łącząca u i v. Lemat 1.15 Jeżeli istnieje droga łącząca wierzchołki u i v, u = v, to istnieje też droga
prosta łącząca u i v. Dowód: Niech u = v0, v1, . . . , vk = v, będzie najkrótszą drogę łączącą u i v. Droga ta jest prosta. Przypuśćmy bowiem, że vi = vj, dla jakiegoś i < j; mielibyśmy wtedy krótszą drogę u = v0, . . . , vi, vj+1, . . . , vk = v, łączącą u i v, wbrew założeniu. Dowolne dwa wierzchołki w cyklu mogą być połączone dwoma drogami prostymi. Na przykład w cyklu a, b, c, g, a na rysunku 1.1, wierzchołki a i c łączy droga a, b, c oraz droga a, g, c. Tak, więc, jeżeli w grafie są cykle, to istnieją pary wierzchołkow, które są połączone dwoma drogami prostymi. Ale i na odwrót. Lemat 1.16 Jeżeli w grafie istnieją dwa wierzchołki u i v, u = v które można połączyć
dwoma różnymi drogami prostymi, to w grafie istnieje cykl. Dowód: Niech u = v0, v1, . . . , vk = v oraz u = w0, w1, . . . , wl = v, będą dwoma rożnymi prostymi drogami łączącymi u i v. Możemy założyć, że v1 = w1 (w przeciw-
nym przypadku możemy usunąć wspólny początek obu dróg). Niech vi będzie pierw- szym wierzchołkiem po v0, który występuje w drodze w0, w1, . . . , wm, i niech vi = wj. 12 Rozdział 1. Podstawowe pojęcia, oznaczenia Wierzchołki v1, . . . , vi-1 nie występują w drodze w0, w1, . . . , wm i droga v0, . . . , vi = wj, wj-1, . . . , w1, w0 = v0 tworzy cykl (w drodze tej występują conajmniej trzy różne wierzchołki v0, v1 oraz w1). Z tego lematu wynika, że graf jest acykliczny (nie ma cykli) wtedy i tylko wtedy, gdy każde dwa wierzchołki grafu można połączyć co najwyżej jedną drogą prostą. 1.8 Drzewa Definicja 1.17 Spójny i acykliczny (bez cykli) graf to drzewo. Rysunek 1.3: Przykład drzewa a c b d g e f Z rozważań z poprzedniego podrozdziału wynika: Lemat 1.18 Graf jest drzewem wtedy i tylko wtedy, gdy każde dwa jego wierzchołki moż- na połączyć dokładnie jedną prostą drogą. 1.9 Drzewa ukorzenione Definicja 1.19 Drzewo ukorzenione to drzewo z wyróżnionym jednym wierzchołkiem. Wyróżniony wierzchołek nazywamy korzeniem drzewa. Każdy wierzchołek v różny od korzenia jest z nim połączony dokładnie jedną drogą prostą. Sąsiad leżący na drodze do korzenia nazywamy ojcem wierzchołka v. Pozastali sąsiedzi są synami wierzchołka v. Korzeń drzewa nie ma ojca, wszyscy jego sąsiedzi są jego synami. Wierzchołek, który nie posiada syna nazywamy liściem. Przykład 1.20 Jeżeli w drzewie z rysunku 1.3 wyróżnimy wierzchołek d jako korzeń, to ojcem wierzchołka a jest wierzchołek d, synami wierzchołka a są wierzchołki e, g i b. Wierzchołki f, e, g oraz c są liściami. 1.10. Grafy skierowane 13 Rysunek 1.4: Drzewo ukorzenione d f a g e b c Zwykle drzewo ukorzenione rysujemy tak jak na rysunku 1.4. Korzeń jest na górze, poniżej leżą jego synowie i ogólnie każdy wierzchołek leży poniżej swojego ojca i powyżej swoich synów. 1.10 Grafy skierowane Definicja 1.21 Graf skierowany (zorientowany) to dowolna para G = (V, E), ze skoń- czonym zbiorem wierzchołków V i zbiorem krawędzi E ą" V V . Rysunek 1.5: Graf skierowany a c b e d W grafie skierowanym krawędz e = (u, v) jest skierowana od wierzchołka u do wierz- chołka v. Wierzchołek u nazywamy początkiem krawędzi, a wierzchołek v końcem. Na rysunkach krawędzie skierowane będziemy przedstawiać jako strzałki. Droga w grafie skierowanym jest to ciąg wierzchołków v0, v1, . . . , vk, taki, że dla każdego i, 1 d" i d" k, 14 Rozdział 1. Podstawowe pojęcia, oznaczenia wierzchołki vi-1, vi są połączone krawędzią, czyli (vi-1, vi) " E. Krawędz typu (u, u), w której początek i koniec pokrywają się, nazywamy pętlą. 1.11 Słowa Słowa są to ciągi liter lub symboli z jakiegoś skończonego zbioru Ł. Zbiór Ł nazywamy wtedy alfabetem. Zbiór wszystkich słów nad alfabetem Ł oznaczamy przez Ł". Wśród słów wyróżniamy słowo puste , które nie zawiera żadnych liter. Przykład 1.22 Na przykład, jeżeli Ł = {a, b}, to Ł" zawiera słowo puste , dwa słowa jednoliterowe a i b, cztery słowa dwuliterowe aa, ab, ba i bb, osiem słów trzyliterowych aaa, aab, aba i abb, baa, bab, bba i bbb, i tak dalej. Długość słowa w " Ł jest to liczba jego liter, będziemy ją oznaczać przez |w|. Dłu- gość słowa pustego || = 0. Zbiór wszystkich słów długości n nad alfabetem Ł oznacza- my przez Łn. Dla słów możemy określić operację konkatenacji, lub składania słów. Konkatenacja (lub złożenie) dwóch słów u, v " Ł, oznaczana przez uv, jest to sklejenie słów u i v. Do słowa u dopisujemy na końcu słowo v. Dla dowolnego słowa v " Ł" zachodzi v = v = v. Przykład 1.23 Konkatenacja słów u = aaba i v = abba to sówo uv = aabaabba. Słowo u jest prefiksem lub przedrostkiem słowa v, jeżeli istnieje takie słowo w, że v = uw. Podobnie, słowo u jest sufiksem lub przyrostkiem słowa v, jeżeli istnieje takie słowo w, że v = wu. Przykład 1.24 Na przykład aba jest prefiksem słowa abaaab, a słowo ab jest sufiksem słowa abaaab. Słowo puste jest prefixem i sufiksem dowolnego słowa v. Każde słowo v jest swoim własnym prefiksem i sufiksem. Zwykle alfabet jest zbiorem uporządkowanym, lub mówiąc inaczej mamy pewną ko- lejność liter w alfabecie. Na przykład w zbiorze Ł = {a, b} litera a stoi przed b. Możemy wtedy uporządkować zbiór słów nad alfabetem Ł. Jeden porządek nazywa się porządkiem leksykograficznym. Jest to porządek słów w słownikach. Aby porównać dwa słowa u, v " Ł, szukamy pierwszej pozycji, na której te dwa słowa się różnią. Słowo, które ma na tej pozycji wcześniejszą literę, jest wcześniejsze w porządku leksykograficznym. Jeżeli takiej pozycji nie ma, to albo u = v, albo jedno ze słów jest prefiksem drugiego, wtedy wcześniejszy w porządku leksykograficznym jest prefiks. Przykład 1.25 W porządku leksykograficznym słowo ab jest wcześniejsze od słowa ababa, a to jest wcześniejsze od abb. 1.12. Zaokrąglenia 15 Porządek leksykograficzny jest wygodny, jeżeli zbiór słów jest skończony. Zauważmy, że w zbiorze wszystkich słów {a, b}" nieskończenie wiele słów (wszystkie słowa złożone tylko z litery a) poprzedza słowo b. Dlatego czasami stosuje się inny porządek, tak zwany porządek kanoniczny. Słowo u poprzedza słowo v w porządku kanonicznym, jeżeli: " albo |u| < |v|, " albo |u| = |v| i u poprzedza v w porządku leksykograficznym. Przykład 1.26 Początkowe słowa zbioru {a, b}" uporządkowane według porządku kano- nicznego to: , a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, aaaa, . . . 1.12 Zaokrąglenia Wprowadzmy dwa oznaczenia na zaokrąglenie liczby rzeczywistej. Dla dowolnej liczby rzeczywistej x x oznacza zaokrąglenie x w górę do najbliższej liczby całkowitej. x oznacza zaokrąglenie x w dół do najbliższej liczby całkowitej. Zaokrąglenie x nazywamy sufitem z x, a zaokrąglenie x nazywamy podłogą z x. Przykład 1.27 4 = 4, 4.3 = 5, -4 = -4, -4.3 = -4. 4 = 4, 4.3 = 4, -4 = -4, -4.3 = -5. 1.13 Przedrostki W przypadku bardzo dużych lub bardzo małych wartości używa się czasami jednostek miar będących wielokrotnościami lub podwielokrotnościami podstawowych jednostek. Takie jednostki wyraża się przez dodanie do nazwy jednostki odpowiedniego przedrostka, a do oznaczenia tej jednostki dodaje się oznaczenie przedrostka. W następującej tabeli zebrano te przedrostki. 16 Rozdział 1. Podstawowe pojęcia, oznaczenia Przedrostek Oznaczenie Wielokrotność exa E 1018 peta P 1015 tera T 1012 giga G 109 mega M 106 kilo k 103 hekto h 102 deka da 10 Przedrostek Oznaczenie Podwielokrotność decy d 10-1 centy c 10-2 mili m 10-3 mikro 10-6 nano n 10-9 piko p 10-12 femto f 10-15 atto a 10-18 Przykładami tak utworzonych jednostek są: centymetr (cm), milimetr (mm), hehtopa- skal, hektolitr, kilogram (kg), kilowat (kW). Do mierzenia prędkości (zegara) procesora używa się megahertzów. Jeden megahertz (MHz) to jednostka częstości równa miliono- wi impulsów na sekundę. Kilobajtów, megabajtów i gigabajtów używa się do mierzenia liczby komórek pamięci. Często przyjmuje się, że kilobajt ma 1024 bajtów, megabajt 1024 1024 bajtów, a gigabajt 1024 1024 1024 bajtów. 1.14 Notacja asymptotyczna W analizie jakiegoś algorytmu (programu) ważne jest oszacowanie jego czasu działania. Jako przykład wezmy algorytm sortowania bąbelkowego, który ustawia elementy ciągu wejściowego w porządku niemalejącym. Algorytm sortowania bąbelkowego. Dane wejściowe: ciąg a1, a2, ... ,an. Dane wyjściowe: elementy ciągu w porządku niemalejącym. n - 1 razy wykonuj (1) wskaż na pierwszy element, (2) n - 1 razy wykonuj: (2a) porównaj wskazany element z elementem następnym, (2b) jeżeli porównane elementy są w niewłaściwej kolejności, to zamień je miejscami, (2c) wskaż na następny element. W poniższej tabeli zilustrowano zastosowanie algorytmu dla ciągu (3, 4, 1, 2). 1.14. Notacja asymptotyczna 17 Ć 3 4 1 2 Ć 3 4 1 2 Ć 3 1 4 2 Ć 3 1 2 4 Ć 1 3 2 4 Ć 1 2 3 4 Ć 1 2 3 4 Ć 1 2 3 4 Ć 1 2 3 4 Kolejne wiersze przedstawiają ciąg po kolejnych porównaniach. Element aktualnie wska- zany jest zaznaczony daszkiem. Poprawność powyższego algorytmu wynika z faktu, że po pierwszym wykonaniu ze- wnętrznej pętli (instrukcje (1) i (2)) największy element ciągu znajdzie się na końcu, po drugim wykonaniu pętli drugi największy element ciągu znajdzie się na przedostatniej pozycji, i tak dalej. Po każdym kolejnym wykonaniu pętli kolejny największy element znajdzie swoją właściwą pozycję. Czas działania algorytmu zależy od n liczby ele- mentów w ciągu. Pętla zewnętrzna (instrukcje (1) i (2)) jest wykowywana n - 1 razy. W każdej iteracji pętli zewnętrznej pętla wewnętrzna (instrukcje (2a), (2b) i (2c)) rów- nież jest wykonywana n - 1 razy. W każdym kolejnym wykonaniu pętli wewnętrznej algorytm wykonuje kilka kroków. Tak więc, aby posortować ciąg długości n algorytm w sumie wykonuje c(n - 1)2 kroków, gdzie c jest pewną stałą. Czas pracy powyższego algorytmu został oszacowany z dokładnością do stałej. Jest to powszechna praktyka i będziemy tak postępować w tej książce. Do szacowania czasu pracy algorytmu (jego złożoności czasowej) i do porównywania algorytmów pod wzglę- dem czasu działania będziemy używać notacji asymptotycznej. Niech f i g będą dwiema funkcjami określonymi na zbiorze liczb naturalnych o wartościach w zbiorze dodatnich liczb rzeczywistych f, g : N {x|x " R, x > 0}. Wtedy: " g(n) = O(f(n)), jeżeli istnieje dodatnia stała c > 0 taka, że g(n) d" c f(n) dla prawie wszystkich n " N, to znaczy istnieje n0, takie, że g(n) d" c f(n) dla każdego n e" n0. W takim przypadku mówimy, że funkcja g jest O duże od f. g(n) " g(n) = o(f(n)), jeżeli limn" f (n) = 0. W takim przypadku mówimy, że funk- cja g jest o małe od f. " g(n) = &!(f(n)), jeżeli istnieje dodatnia stała c > 0 taka, że g(n) e" c f(n) dla prawie wszystkich n " N. W takim przypadku mówimy, że funkcja g jest Omega duże od f. " g(n) = Ś(f(n)), jeżeli istnieją dwie dodatnie stałe c1, c2 > 0 takie, że c1 f(n) d" g(n) d" c2 f(n) dla prawie wszystkich n " N. W takim przypadku mówimy, że funkcja g jest Theta duże od f. 18 Rozdział 1. Podstawowe pojęcia, oznaczenia Jeżeli g(n) = O(f(n)), to mówimy, że funkcja f ogranicza z góry funkcję g(n) (z dokładnością do stałej), albo, że rząd funkcji g jest nie większy od rzędu funkcji f. Przykład 1.28 " Czas działania algorytmu sortowania bąbelkowego jest O(n2). " n = O(3n - 2). " 3n - 2 = O(n). " n3 + n2 - n = O(n3). " n3 = O(2n). " n2 log n = O(n3). Będziemy dopuszczać notację asymptotyczną także wobec funkcji, które są dodatnie dla prawie wszystkich liczb naturalnych. Na przykład n2 - 3n = O(n2). Jeżeli g(n) = o(f(n)), to mówimy, że g jest niższego rzędu niż f. Przykład 1.29 " n2 = o(n3). " n = o(n log n). " n3 = o(2n). Jeżeli g(n) = Ś(f(n)), to g i f są tego samego rzędu, czyli g(n) = O(f(n)) oraz f(n) = O(g(n)). Przykład 1.30 " n2 = Ś(n2 + n). " n = Ś(n + log n). Następujący lemat jest bardzo użyteczny przy szacowaniu asymptotycznym. Jego do- wód zostawiamy jako ćwiczenie. g(n) Lemat 1.31 Jeżeli granica lim istnieje i jest właściwa (nie jest równa "), to g(n) = f (n) O(f(n)). Wniosek 1.32 Jeżeli g(n) = o(f(n)), to g(n) = O(f(n)). Następujący przykład pokazuje, że oszacowanie asymptotyczne może być czasem zawod- ne. Przykład 1.33 Wezmy dwie funkcje f(n) = 300n oraz g(n) = n log2 n. Mamy f(n) = o(g(n)), ale f(n) e" g(n) dla wszystkich n d" 2300, czyli dla wszystkich liczb mniejszych od liczby atomów w naszej galaktyce (porównaj podrozdział duże liczby w rozdziale o arytmetyce). 1.15. Wielomiany 19 Z drugiej jednak strony oszacowanie asymptotyczne wystarczy do naszych celów i jest łatwiejsze do uzyskania. Przykład 1.34 Rozważmy trzy algorytmy: pierwszy działający w czasie f1(n) = c1n, drugi w czasie f2(n) = c2n3 i trzeci w czasie f3(n) = c32n. Funkcje te określają czas działania na pewnym konkretnym komputerze. Niech n1, n2 i n3 oznazczają długości wejść, dla których algorytmy dają odpowiedz w ciągu jednej sekundy, to znaczy f1(n1) = f2(n2) = f3(n3) = 1s. Przypuśćmy teraz, że mamy 1000 razy szybszy komputer i pytamy jakie wejścia teraz mogą być policzone przez te algorytmy w ciągu jednej sekundy. Dla pierwszego algorytmu działającego w czasie liniowym możemy teraz obliczać 1000 razy dłuższe dane wejściowe, ponieważ f1(1000n1) = 1000f1(n1). Dla drugie- go algorytmu działającego w czasie sześciennym możemy teraz obliczać 10 razy dłuższe dane wejściowe, ponieważ f2(10n2) = 1000f2(n2). Dla trzeciego algorytmu działają- cego w czasie wykładniczym możemy teraz obliczać tylko dane wejściowe o 10 dłuższe, ponieważ f3(n3 + 10) = 1024f3(n3). 1.15 Wielomiany Wielomian jest to funkcja postaci P (x) = an xn + + a0, gdzie x jest zmienną rzeczywistą, a a0, a1, ... ,an są stałymi rzeczywistymi, nazywanymi współczynnikami wielomianu. Stopniem wielomianu P (x) jest największe takie k, że ak = 0, stopień oznaczamy, przez st(W (x)). Zwykle pisząc P (x) = an xn + + a0
będziemy zakładać, że an = 0, czyli że stopień st(P (x)) = n. Używając symbolu sumy
wielomian możemy przedstawić w następujący sposób: n P (x) = aixi. i=0 Wielomian, którego wszystkie współczynniki są równe zeru nazywamy wielomianem ze- n n rowym. Dwa wielomiany P (x) = aixi oraz Q(x) = bixi są równe jeżeli i=0 i=0 mają takie same wspólczynniki, to znaczy jeżeli ai = bi dla każdego i. Wielomiany można dodawać, odejmować lub mnożyć. Suma, różnica i iloczyn wie- lomianów P (x) i Q(x) określone są następująco: n " P (x) + Q(x) = (ai + bi)xi, i=0 n " P (x) - Q(x) = (ai - bi)xi, i=0 2n i " P (x) Q(x) = cixi, gdzie ci = ak bi-k oraz ak = 0 i bk = 0 i=0 k=0 dla wszystkich k > n. 20 Rozdział 1. Podstawowe pojęcia, oznaczenia Wzór na iloczyn wielomianów wygląda skomplikowanie, ale jest on równoważny szkol- nemu sposobowi mnożenia wielomianów, gdzie wyrazy (jednomiany) obu wielomianów wymnaża się każdy z każdym a następnie grupuje wyrazy według wykładników. Wielo- mian P (x) można pomnożyć przez stałą a n a P (x) = a aixi. i=0 Przykład 1.35 Niech P (x) = x2 + 2x + 1 oraz Q(x) = 2x2 + x. Wtedy P (x) + Q(x) = 3x2 + 3x + 1 P (x) Q(x) = 2x4 + 5x3 + 4x2 + x 3 P (x) = 3x2 + 6x + 3 1.15.1 Dzielenie wielomianów Wielomiany można też dzielić. Mamy Twierdzenie 1.36 Dla dowolnych dwóch wielomianów W (x) i V (x) istnieją dwa wielo- miany Q(x) i R(x) takie że (a) W (x) = V (x) Q(x) + R(x) (b) st(R(x)) < st(V (x)) Wielomian Q(x) nazywamy ilorazem a R(x) resztą z dzielenia W (x) przez V (x). Iloraz i reszta są wyznaczone jednoznacznie, to znaczy istnieje tylko jedna para Q(x), R(x) spełniająca warunki (a) i (b). Dowód: Najpierw przedstawimy Algorytm dzielenia wielomianów Dane wejściowe: Dwa wielomiany W (x) = anxn+ +a0 oraz V (x) = bmxm+ +b0. Zakładamy przy tym, że an = 0 i bm = 0, czyli że W (x) jest stopnia n, a V (x) jest
stopnia m. Dane wyjściowe: iloraz Q(x) oraz reszta R(x) Podstaw Q(x) := 0 oraz R(x) := W (x); dopóki st(R(x)) = k e" m wykonuj: Niech ckxk będzie składnikiem R(x) z najwyższym wykładnikiem. Podziel ckxk przez bmxm. ck Podstaw Q(x) := Q(x) + xk-m bm ck Podstaw R(x) := R(x) - xk-m V (x) bm Jeżeli st(R(x)) < m, to koniec, para Q(x), R(x) spełnia warunki (a) i (b). 1.15. Wielomiany 21 Aby udowodnić, że przedstawiony algorytm poprawnie oblicza iloraz i resztę, poka- żemy, przez indukcję, że warunek (a) jest spełniony po każdym kolejnym wykonaniu pętli dopóki. Na początku welomiany Q(x) = 0 oraz R(x) = W (x) spełniają warunek (a). Oznaczmy wartości wielomianów Q(x) i R(x) przed i -tym wykonaniem pętli dopóki przez Q1(x) i R1(x), a wartości po i -tym wykonanu pętli przez Q2(x) i R2(x). Zakła- damy przy tym, że W (x) = V (x) Q1(x) + R1(x), że stopień st(R1(x)) e" m, oraz że ckxk jest składnikiem R1(x) z najwieększym wykładnikiem. W trakcie i-tego wykonania pętli nastąpią podstawienia ck Q2(x) := Q1(x) + xk-m bm oraz ck R2(x) := R1(x) - xk-m V (x). bm Mamy teraz ck R1(x) := xk-m V (x) + R2(x) bm oraz ck W (x) = Q1(x)V (x)+R1(x) = (Q1(x)+ xk-m)V (x)+R2(x) = Q2(x)V (x)+R2(x), bm czyli Q(x) oraz R(x) spełniają warunek (a) po i tym wykonaniu pętli. Zauważmy, że stopień wielomianu R2(x) jest mniejszy od stopnia wielomianu R1(x), ck ponieważ w wielomianie R2(x) = R1(x) - xk-m V (x). współczynnik przy xk jest bm równy 0 i stopień st(R2(x)) < k. Tak więc pętla (3) nie może się wykonywać więcej niż n - m razy. Po wyjściu z pętli stopień st(R(x) < st(V (x)), czyli spełniony jest warunek (b). Pokazaliśmy więc, że wielomian W (x) można przedstawić w postaci W (x) = Q(x) V (x) + R(x) tak, żeby st(R(x)) < st(V (x)). Teraz pokażemy, że iloraz Q(x) i reszta R(x) są wyznaczone jednoznacznie. Przypuśćmy bowiem, że W (x) = Q1(x)V (x) + R1(x) oraz W (x) = Q2(x)V (x) + R2(x) i że st(R1(x)), st(R2(x)) < st(V (x)). Po odjęciu tych równości stronami otrzymamy 0 = (Q1(x) - Q2(x))V (x) + (R1(x) - R2(x)). Jeżeli wielomiany Q1(x) = Q2(x), to wielomian (Q1(x) - Q2(x))V (x) ma stopień
większy lub równy od st(V (x)), a wielomian R1(x) - R2(x) ma stopień mniejszy od st(V (x)), więc ich suma nie może być wielomianem zerowym. Doszliśmy więc do sprzecz- ności, czyli Q1(x) = Q2(x), z tego zaś wynika, że R1(x) = R2(x). Przykład 1.37 Podzielmy wielomian W (x) = 8x3 + 6x2 + 3x + 2 przez wielomian V (x) = 2x - 1 według opisanego wyżej algorytmu. 22 Rozdział 1. Podstawowe pojęcia, oznaczenia Najpierw podstawiamy Q(x) := 0 oraz R(x) := 8x3 + 6x2 + 3x + 2. Ponieważ st(R(x)) = 3 > 1 = st(V (x)) przechodzimy do pętli dopóki Dzielimy składnik 8x3 przez 2x otrzymując 4x2 i podstawiamy R(x) := R(x) - 4x2V (x) = 8x3 + 6x2 + 3x + 2 - 4x2(2x - 1) = 10x2 + 3x + 2. oraz Q(x) := Q(x) + 4x2 = 4x2. Zauważmy, że spełniony jest warunek W (x) = Q(x) V (x) + R(x). Ponieważ st(R(x)) jest większy od 1 wykonujemy ponownie instrukcje pętli. Dzielimy składnik 10x2 przez 2x otrzymując 5x i podstawiamy R(x) := R(x) - 5xV (x) = 10x2 + 3x + 2 - 5x(2x - 1) = 8x + 2. oraz Q(x) := Q(x) + 5x = 4x2 + 5x. (warunek W (x) = Q(x) V (x) + R(x) jest spełniony). Stopień st(R(x)) jest równy 1, więc wykonujemy ponownie instrukcje pętli. Dzielimy składnik 8x przez 2x otrzymując 4 i podstawiamy R(x) := R(x) - 4V (x) = 8x + 2 - 4(2x - 1) = 6. oraz Q(x) := Q(x) + 4 = 4x2 + 5x + 4. Warunek W (x) = Q(x) V (x) + R(x) jest spełniony i teraz stopień st(R(x)) = 0 < 1 więc algorytm kończy pracę. Wielomian Q(x) = 4x2 + 5x + 2 jest ilorazem a wielomian R(x) = 6 resztą. 1.15.2 Schemat Horna Aby obliczyć wartość wielomianu P (x) w jakimś konkretnym punkcie x0 moglibyśmy n bezpośrednio skorzystać ze wzoru P (x0) = aixi . W ten sposób potrzebujemy, w i=0 0 najgorszym przypadku, około n2 mnożeń. Istnieje jednak sposób wymagający tylko n mnożeń. Należy obliczać wartość wielomianu według schematu P (x0) = ((. . . (an x0 + an-1) x0 + an-2) x0 + a1) x0 + a0. Jest to tak zwany schemat Horna. Dokładniej możemy go przedstawić następująco: Algorytm obliczania wartości wielomianu, schemat Horna Dane wejściowe: współczynniki a0, a1, ... ,an wielomianu P (x) = an xn + + a0 oraz argument x0. Dane wyjściowe: wartość wielomianu y0 = P (x0) = anxn + + a1x0 + a0. 0 y0 := an; dla kolejnych i od 1 do n wykonuj y0 := y0 x0 + an-i 1.16. Zadania 23 1.15.3 Pierwiastki wielomianu Pierwiastkiem wielomianu W (x) jest każda liczba rzeczywista a, która podstawiona do wielomianu da wartość W (a) = 0. Zachodzi Twierdzenie 1.38 (Bzout) Liczba a jest pierwiastkiem wielomianu W (x) wtedy i tylko wtedy, gdy W (x) dzieli się przez x-a, czyli, gdy istnieje wielomian Q(x) taki, że W (x) = Q(x)(x - a). Dowód: Jeżeli W (x) = Q(x)(x - a), to W (a) = Q(a)(a - a) = 0. Niech teraz W (a) = 0. Podzielmy W (x) przez x - a, otrzymamy W (x) = Q(x)(x - a) + R(x) przy czym stopień R(x) jest mniejszy od 1, czyli jest stałą R(x) = r. Wstawiając teraz a do obu stron otrzymamy 0 = Q(a)(a - a) + r, czyli r = 0 i W (x) = Q(x)(x - a). Wniosek 1.39 Jeżeli wielomian nie jest tożsamościowo równy zero, to liczba jego pier- wiastków nie jest większa od jego stopnia. Dowód: Niech a1,...,ak będą różnymi pierwiastkami wielomianu W (x). Z twierdzenia Bzout mamy W (x) = Q1(x)(x - a1). Po podstawieniu a2 mamy 0 = W (a2) = Q1(a2)(a2 - a1), czyli a2, jest pierwiastkiem wielomianu Q1(x). Korzystając znowu z twierdzenia Bzout otrzymamy W (x) = Q2(x)(x - a2)(x - a1), i tak dalej. W końcu otrzymamy, że W (x) jest postaci W (x) = Q(x)(x - ak) (x - a2)(x - a1), czyli stopień W (x) musi być większy od k. 1.16 Zadania 4 3 4 3 2 1. Oblicz: a) i2i, b) k3, c) (n2 -1), d) ij2, e) i=1 k=1 n=1 i=1 j=1 2 4 (k - n), k=1 n=1 5 4 4 2. Oblicz: a) (i + 1), b) (2k + 1), c) (n2 - 1). i=1 k=1 n=1 3. Niech A = {1, 2, 3, 4, 5}, B = {1, 3, 5, 7} i C = {4, 5, 6, 7, 8}. Oblicz A *" B *" C, A )" B )" C, A - B, A )" (B - C), A " B, A " B " C. 4. Niech I = {1, 2, 3, 4, 5} będzie zbiorem indeksów. Dla każdego i " I określamy zbór Bi = {x " N | i d" x d" 2i}. Oblicz Bi, Bi, B1 " B3 " B5 oraz i"I i"I B1 " B2 " B3 " B4 " B5. 5. Niech I = {1, 2, 3, 4, 5}. Dla każdego i " I mamy Ai = {3i - 3, 3i, 3i + 3}. Oblicz Ai, Ai, oraz A1 " A2 " B3 " B4 " A5. i"I i"I 24 Rozdział 1. Podstawowe pojęcia, oznaczenia 6. Niech I = {1, 2, 3, 4, 5} będzie zbiorem indeksów. Dla każdego i " I określamy zbór Ci = {x " N | 1 d" x d" 30 oraz i dzieli x}. Oblicz Ci oraz Ci. i"I i"I 7. Niech A = {1, 2, 3, 4}, B = {1, 2, 3}. Wypisz elementy A B, B A oraz {(a, b) " A B | a < b}. 8. Niech X = {a, b, c}. Wypisz elementy X2, X3 oraz {(x, y) " X2 | x = y}.
9. Wypisz wszystkie podzbiory: a) zbioru pustego ", b) zbioru {a}, c) zbioru {a, b, c, d}. 10. Udowodnij, że A " B wtedy i tylko wtedy gdy A )" B = A. 11. Narysuj wszystkie grafy ze zbiorem wierzchołków V = {a, b, c}. Które z nich są spójne? 12. Narysuj wszystkie drzewa ze zbiorem wierzchołków V = {a, b, c}. 13. Narysuj wszystkie grafy skierowane ze zbiorem wierzchołków V = {a, b}. 14. Narysuj graf G = (V, E), ze zbiorem wierzchołków V = {a, b, c, d, e} i zbiorem krawędzi E = {{a, b}, {a, c}, {b, c}, {a, d}, {d, e}}. Czy graf G jest spójny? Czy posiada cykle? 15. Narysuj graf skierowany G = (V, E), ze zbiorem wierzchołków V = {a, b, c, d} i zbiorem krawędzi E = {(a, b), (b, c), (c, b), (c, d), (d, d)}. 16. Wypisz 10 pierwszych słów zbioru {a, b, c}" według porządku leksykograficznego i kanonicznego. 17. Wypisz wszystkie prefiksy i sufiksy słowa aaba. 18. Uporządkuj następujący zbiór słów według porządku leksykograficznego i kano- nicznego: słowik, wróbel, kos, jaskółka, kogut, dzięcioł, gil, kukułka, szczygieł, sowa, kruk, czubatka, drozd, sikora i dzierlatka, kaczka, gąska, jemiołuszka, dudek, trznadel, pośmieciuszka, wilga, zięba, bocian, szpak. [Fragment wiersza Ptasie ra- dio Juliana Tuwima] 19. Udowodnij wzory (1.1), (1.2), (1.3), (1.4). 20. Udowodnij lemat 1.31, 21. Udowodnij zależności z przykładów 1.28, 1.29, 1.30. 22. Niech x, y będą dowolnymi liczbami rzeczywistymi, a k dowolną liczbą całkowitą. Udowodnij następujące zależności: x + y e" x + y . x + k = x + k. x + y d" x + y . x + k = x + k. 1.16. Zadania 25 23. Podaj przykład liczb rzeczywistych x i y, dla których zachodzi a) x + y > x + y , b) x + y < x + y . 24. Podaj przykład liczby rzeczywistej x i liczby całkowitej k, dla których zachodzi k x < k x . 25. Za pomocą algorytmu sortowania bąbelkowego posortuj ciągi: a) 1,3,5,4,2; b) 8,1,6,3,4,5,2,7. 26. Dane są dwa wielomiany U(x) = 4x3 +3x+2 oraz V (x) = 2x4 +x2 +3x. Oblicz ich sumę oraz iloczyn. Oblicz według schematu Horna wartości U(1) oraz V (1). 27. Podziel wielomian U(x) = 4x4 + 3x2 + x - 2 przez V (x) = x2 + x.