matematyka dyskretna

advertisement
MATEMATYKA DYSKRETNA.
- Naprawdę jest tak was wielu?
- Naprawdę !! - wrzasnęli z niesłychaną dumą. - jesteśmy nieprzeliczalni.
Stanisław Lem “Cyberiada”
Wykład 1
- Wi ed z ia ł ? Myślisz, że jest to taka rzecz, o której wie K ró lik ?
- Oho, Kłapouszku, on jest mądry, ten Królik.
- Mądry! – zawołał Kłapouchy z pogardą, ciężko kładąc kopyto na swoich trzech patykach. – Wykształcenie! –
powiedział z goryczą, skacząc na swoich sześciu patykach. – Czym jest Wiedza? – zapytał podrzucając swoje dwanaście
patyków w powietrze. – Rzeczą, którą posiadł Królik. Ha!
- Myślę... –zaczął Prosiaczek nerwowo.
- Nie myśl – rzekł Kłapouchy.
A.A. Milne „Chatka Puchatka”, tłum Irena Tuwim
Propaganda
Matematyka „ciągła”, oparta na pojęciu granicy (funkcji czy ciągu) i czegoś co tak naprawdę nie
istnieje, ale występuje w żargonie, tzn. wielkości „nieskończenie małej” była, jest i będzie
narzędziem i językiem, wywodzących się z czasów rewolucji przemysłowej, nauk ścisłych i
technicznych. W tym kursie zajmujemy się matematyką „dyskretną”, gdzie słowo „dyskretna”
znalazło się zupełnie (dla Polaka) bez sensu. Jest to kalka z angielskiego, gdzie istnieją dwa
podobnie brzmiące słowa, discreet i discrete. Pierwsze oznacza to co u nas, a drugie oznacza
przeciwieństwo filologicznie rozumianej ciągłości. Woda jest „ciągła” (dlatego mówimy water, a
nie „a water”) a krzesła są „dyskretne” (dlatego mówimy „a chair” a nie chair). Matematyka
dyskretna jest więc działem matematyki, który zajmuje się porządnie oddzielonymi od siebie
nawzajem obiektami. Wyrosła z matematyki rekreacyjnej, służącej rozrywce umysłowej (kiedyś nie
było DVD, Facebooka i gier komputerowych) po czym niespodziewanie okazało się, że jest
cennym, a nawet niezbędnym narzędziem teoretycznym dla informatyków. W tym kursie zajmiemy
się najpierw kombinatoryką, czyli nauką o liczeniu elementów skończonych zbiorów, oraz teorią
„grafów” czyli bardzo prostych systemów relacyjnych.
Zliczanie permutacji i wariacji
Dociekliwy słuchacz/czytelnik ryknie gromkim śmiechem : „Jaki problem policzyć elementy zbioru
skończonego? Bierzemy zbiór i liczymy elementy jeden po drugim.”. No i bardzo słusznie, tylko że
nasz zbiór to nie fizycznie istniejący obiekt jak stajnia, gdzie możemy wejść i policzyć konie
pokazując je palcem. Czasem będzie to zbiór liczb, czasem zbiór zbiorów liczb, czasem zbiór
funkcji. Prawie zawsze pytanie, które sobie stawiamy brzmi z grubsza „Na ile sposobów można ...?”
Niemniej tamto naiwne podejście nie jest bez sensu. Jedną z metod przeliczenia elementów zbioru
jest wypisanie („wygenerowanie”) wszystkich i potem ewentualne policzenie palcem. Zresztą
czasem problem polega właśnie na wygenerowaniu wszystkich obiektów pewnego zbioru. Na
przykład aby sprawdzić za pomocą tabelki czy formuła o n zmiennych zdaniowych jest tautologią
n
musimy wygenerować wszystkie 2 możliwych kombinacji zer i jedynek, i niczego nie przegapić.
Jeśli robi się to bez planu to łatwo (przy n dostatecznie dużym) coś zrobić dwa razy a coś innego
przegapić, o czym niejeden student boleśnie się przekonał. Czyli mamy dwa rodzaje problemów :
Wypisz („wygeneruj”) wszystkie elementy pewnego zbioru (funkcji, liczb, relacji), przy czym
oczywiście definicja konkretnego zbioru może być dowolnie skomplikowana. Rozwiązaniem tu ma
być przepis (algorytm), który dla danej rodziny problemów zawsze zwraca poszukiwany zbiór.
Przykładowo: podaj metodę wypisywania wszystkich n-elementowych ciągów zer i jedynek.
Metoda musi gwarantować, że nie przegapimy żadnego z ciągów i żadnego nie wypiszemy więcej
niż raz.
Znajdź liczbę elementów pewnego zbioru (funkcji, liczb, relacji), i t.d. Tu oczekujemy rozwiązania
w postaci liczby, a właściwie funkcji, która argumentowi n reprezentującemu rozmiar danych
naszego problemu przypisuje liczbę. Dla przykładu : ile jest wszystkich n-elementowych ciągów
złożonych z zer i jedynek?
Zacznijmy od spraw najprostszych. Kiedy wykładowca Matematyki Dyskretnej przygotowuje
egzamin chce wiedzieć ilu ma studentów, żeby nie wydrukować za dużo ani za mało egzemplarzy
zadań. Pytam więc Państwa ile jest na roku dziewczyn? Powiedzmy 27. Ilu jest chłopaków? Niech
będzie 32. Z tego przebiegle wnioskuję, że mam przygotować 59 egzemplarzy zadań
egzaminacyjnych. Jest to przykład zastosowania twierdzenia znanego jako
Twierdzenie (Reguła dodawania)
Jeśli A i B są zbiorami skończonymi, C=AB oraz AB= to |C|=|A|+|B|
Dowód.
Indukcja względem n=|B|. Jeśli n=0 lub n=1 to równość jest oczywista. Przypuśćmy, że |B|=n+1,
n1. Wówczas dla dowolnego bB mamy B=(B\{b}){b}. Mamy więc
|AB| = |A((B\{b}){b})| = |(A(B\{b})){b}| = |A(B\{b})|+|{b}| =
= |A|+|B\{b}|+1 (na mocy założenia indukcyjnego)
= |A|+|B| (bo element b był wzięty z B).
Łatwo stąd wywnioskować
Twierdzenie (Uogólniona reguła dodawania)
Jeśli A1,A2, ... An są zbiorami skończonymi, parami rozłącznymi (czyli ijAiAj=) to |A1A
...An| =| A1|+|A2|+ ... +|An|.
Dowód. Pomijamy – prosta indukcja względem n.
Wbrew pozorom nie jest to zupełnie bez sensu i wielokrotnie będziemy się na tę sztuczkę
powoływać. Na razie wykorzystajmy ją do udowodnienia kolejnego, na pozór banalnego faktu.
Twierdzenie (Reguła mnożenia)
Dla dowolnych, skończonych zbiorów A i B, |AB|=|A||B|.
Dowód
Niech A={a1,a2, ... ,an}. Wówczas AB = ({a1}B)({a2}B) ... ({an}B). Zbiory po prawej
stronie są parami rozłączne więc, na mocy uogólnionej reguły dodawania, mamy
|AB| = |{a1}B|+|{a2}B|+ ... +|{an}B| = |B|+|B|+ ... +|B| = n|B| = |A||B|.
Regułę mnożenia można wyrazić też następująco:
Jeśli jakąś czynność można podzielić na dwa etapy, pierwszy może przebiegać na k, a drugi na n
sposobów to cały proces może przebiegać na kn sposobów
Prosta indukcja daje nam uogólnioną regułę mnożenia
Twierdzenie.
Dla dowolnych, skończonych zbiorów A1, A2, ... ,An, |A1A2...An| = |A1||A2| ... |An|. 
Przykład
Kapral o szczególnym poczuciu humoru nakazał swoim pięciu żołnierzom aby przez miesiąc, na
każdej zbiórce stawali w szeregu w innej kolejności. Codziennie odbywają się cztery zbiórki. Czy
rozkaz kaprala jest wykonalny?
Stosujemy regułę mnożenia w następujący sposób: pierwszego (prawoskrzydłowego) żołnierza
można wyznaczyć na 5 sposobów, możemy go wybrać w dowolny sposób. Na drugim miejscu może
stać dowolny z pozostałych czterech i tak dalej. Liczba możliwych różnych ustawień 5 żołnierzy w
szeregu jest więc równa 5*4*3*2*1 = 5! = 120. Odpowiedź brzmi więc „To zależy jaki mamy
miesiąc. Jeśli ma 30 lub mniej dni to tak, jeśli 31 to nie”.
Przykład
Na ile sposobów 5 żołnierzy może stanąć w dwuszeregu?
Odpowiedź brzmi „A jaka to różnica w szeregu, czy w dwuszeregu? 120”
Kapral wynalazł w ten sposób pojęcie permutacji.
Definicja.
Permutacją zbioru n-elementowego nazywamy każde ustawienie elementów tego zbioru w ciąg.
Można też myśleć o permutacjach jako o różnowartościowych funkcjach zbioru na siebie. Często,
dla uproszczenia, zamiast mówić o dowolnym zbiorze n elementowym mówimy o zbiorze [n] =
{1,2, ... ,n}. Wówczas łatwo widać, że permutacje jako uporządkowania i permutacje jako funkcje to
jedno i to samo, bo wypisanie tych liczb w pewnej (być może różnej od naturalnej) kolejności a1,a2,
... an to to samo co określenie funkcji f(i)=ai. I na odwrót.
Przykład
Na ile sposobów można sformować szereg długości 6 mając 8 żołnierzy?
Stosujemy regułę mnożenia jak poprzednio. Na pierwszym miejscu jeden z 8 żołnierzy, czyli 8
możliwości, na drugim 7, i tak dalej, na szóstym musimy wybrać jednego z pozostałych 3 żołnierzy.
Mamy więc 8*7*6*5*4*3 = 20160 możliwości.
Przykład
Na ile sposobów można 6 ławek pomalować 4 kolorami (każdą innym kolorem)?
Tu postępujemy podobnie, pierwszą ławkę na pierwszy kolor, drugą – na drugi, trzecią na trzeci,
czwartą na czwarty, a co z piątą? Ano zabrakło kolorów. Odpowiedź 0.
Wynaleźliśmy teraz pojęcie wariacji, czyli różnowartościowego ciągu elementów z zadanego
zbioru.
Definicja.
k-elementową wariacją (k-wariacją) zbioru n-elementowego nazywamy każdy różnowartościowy
ciąg długości k utworzony z elementów tego zbioru.
O wariacjach możemy myśleć jako o różnowartościowych funkcjach z [k] w [n]. Permutacja jest
więc szczególnym przypadkiem k-wariacji, mianowicie dla k=n.
Z reguły mnożenia wynika natychmiast
Twierdzenie. (Wzór na liczbę k-wariacji w zbiorze n-elementowym)
Liczba k-wariacji w zbiorze [n] jest równa n(n-1)(n-2) ... (n-k+1).
W szczególności, liczba permutacji zbioru n-elementowego jest równa n!.
Liczbę k-wariacji zbioru [n] można też zapisać jako
n!
.
( n  k )!
Przykład.
Grafem nazywamy parę G = (V,E), gdzie V jest niepustym zbiorem skończonym a EP2(V). V
nazywamy wówczas zbiorem wierzchołków grafu G a E zbiorem krawędzi. Dla dowolnych dwóch
wierzchołków x i y grafu G = (V,E) x-y drogą prostą długości k nazywamy każdy
różnowartościowy ciąg wierzchołków (v0,v1, ... ,vk) taki, że x=v0, y=vk i vivi+1E dla i=0,1,...,k-1.
Ile jest dróg prostych długości k z x1 do xn w grafie pełnym o zbiorze wierzchołków {x1,x2, ... ,xn}
(G=(V,E) nazywamy grafem pełnym gdy E=P2(V))?
Ponieważ nasz graf jest pełny więc x1-xn dróg prostych długości k jest oczywiście tyle ile (k-1)
(n  2)!
wariacji zbioru n-2 elementowego {x2,x3, ... ,xn-1}, czyli (n-2)(n-3)...(n-k) =
( n  k  1)!
Przykład
Na ile sposobów można 10 ławek pomalować 3 kolorami (każdą jednym kolorem)?
Pierwszą ławkę malujemy dowolnym z trzech kolorów. Drugą też. I trzecią. I tak dalej. Nasz proces
rozłożyliśmy więc na 10 etapów, w każdym etapie mamy 3 możliwości. Reguła mnożenia mówi, że
mamy 310 różnych sposobów pomalowania naszych ławek. A gdybyśmy malowali 3 ławki 10
kolorami? No to oczywiście 103=1000 możliwości.
Przykład
Na ile sposobów można rozłożyć k skarpetek do n szufladek.
Podobnie; pierwszą skarpetkę wkładamy do dowolnej z n szufladek, drugą też, i t.d. Odpowiedzią
k
jest oczywiście n .
No dobrze, to o czym właściwie była mowa w ostatnich przykładach? Każdej ławce przyporządkuj,
byle jak, ale tylko jeden kolor. Każdej skarpetce dokładnie jedną szufladkę. No to jesteśmy w domu
– chodzi o liczbę funkcji (wszystkich, nie tylko różnowartościowych jak przy wariacjach) ze zbioru
10-elementowego w zbiór 3 elementowy, a ogólnie o liczbę wszystkich funkcji ze zbioru n w kelementowy. Jest to najprostszy przypadek problemu rozmieszczenia n obiektów w k pojemnikach.
Niektórzy uważają, że warto takim obiektom nadać specjalną „kombinatoryczną” nazwę i nazywają
je wariacjami z powtórzeniami.
Twierdzenie (Liczba funkcji ze zbioru n-elementowego w k-elementowy)
Liczba k-elementowych wariacji z powtórzeniami ze zbioru n-elementowego, czyli liczba funkcji z
[k]
k
[k] w [n], czyli |[n] | = n .
Przykład
Na ile sposobów można przejść z punktu (0,0,0) do punktu (3,6,5) wykonując wyłącznie kroki
długości jeden w dodatnim kierunku każdej z osi współrzędnych.
Niech x oznaczają wykonanie pojedynczego kroku w dodatnim kierunku odpowiedniej osi X,
podobnie y i z. XYZ(3,6,5) niech oznacza poszukiwaną liczbę. Oczywiście aby dojść do punktu
(3,6,5) musimy wykonać 14 kroków, z tego 3 iksy, 6 igreków i 5 zetów. Przykładowa taka ścieżka
wygląda tak (z,x,z,y,z,y,y,z,y,x,z,x,y,y).
XYZ(3,6,5) jest więc liczbą różnych ścieżek czyli ciągów długości 14 złożonych z symboli trzech
typów, a dokładniej 3 symboli pierwszego typu, 6 drugiego i 5 trzeciego. Wybierzmy jedną z tych
ścieżek. Można to zrobić na XYZ(3,6,5) sposobów. Występujące w niej 3 iksy zastąpmy przez x1,
x2, x3 - można to zrobić na 3! sposobów. Podobnie igreki możemy „rozróżnić” na 6!, a zety na 5!
sposobów. W ten sposób wybranej ścieżce przypisaliśmy pewien podzbiór zbioru wszystkich
permutacji zbioru S = { x1, x2, x3, y1, y2, ..., y6, z1, z2, ... ,z5}, złożony z dokładnie 3!6!5! permutacji.
Zauważmy, że zbiory permutacji przypisane różnym ścieżkom są rozłączne, oraz że każda
permutacja zbioru S jest przypisana jakiejś ścieżce. Zdefiniowaliśmy więc podział zbioru
wszystkich permutacji zbioru S na parami rozłączne podzbiory, każdy o liczności 3!6!5!
Z uogólnionej reguły dodawania otrzymujemy, że wszystkich permutacji zbioru 14-elementowego
14!
jest XYZ(3,6,5)(3!)(6!)(5!). Z drugiej strony wiemy, że jest ich 14!, czyli XYZ(3,6,5) =
.
3!6!5!
Przykład
Mamy ki egzemplarzy cyfry i, i=1,2,3,4. Ile można z nich ułożyć różnych liczb.
Taką konstrukcję, czyli ciąg n-elementowy złożony z ni kopii symbolu ai, i=1,2, ... ,k, gdzie
ni = n nazywamy permutacją z powtórzeniami. Rozwiązanie ostatniego przykładu można bez
żadnej trudności uogólnić:
Twierdzenie (Liczba permutacji zbioru n-elementowego z powtórzeniami)
Ciągów n-elementowych złożonych z ni kopii symbolu ai, i=1,2, ... ,k, ni = n, jest
n!
.
n1! n2 !...nk !
Przykładowe zadania
 Ile trzeba rozegrać spotkań, żeby każdy z n zawodników zagrał z każdym?
 Na ile sposobów można n klientów ustawić w kolejki do k kas?
 Na ile sposobów można 30 naboi kal. 7,62 załadować do trzech magazynków do
Kałasznikowa? Przypominam, że pojemność jednego magazynka wynosi 30 szt., naboje są
identyczne magazynki różne.
 A co jeśli naboje są rozróżnialne a magazynki nie?
 Co jeśli i naboje, i magazynki są rozróżnialne?
 Co jeśli i naboje, i magazynki są nierozróżnialne?
Uwaga o rozróżnialności
O co chodzi z tą rozróżnialnością (lub nierozróżnialnością)? Przedmioty materialne zawsze są
rozróżnialne! Otóż chodzi o to, że niektóre pary wyników naszego działania umawiamy się
„utożsamiać”, czyli traktować jako równoważne. W przykładzie z identycznymi magazynkami i
nabojami rozkłady naboi (10,15,5), (10,5,15), (5,10,15), (5,15,10), (15,5,10) oraz (15,10,5)
traktujemy jako równoważne i liczymy jako jeden rozkład bo nie interesuje nas który nabój pójdzie
do którego magazynka. Oczywiście w tle tego rozważania czai się pojęcie relacji równoważności i
jej klas abstrakcji. Naszym zadaniem jest policzenie klas abstrakcji pewnej relacji równoważności.
Problemem jest oczywiście uzmysłowienie sobie na jakim zbiorze jest to relacja, jaka to relacja, czy
klasy abstrakcji są równoliczne, jeśli tak to jak liczne itd.
Zliczanie podzbiorów i kombinacji
Przyjrzyjmy się teraz rodzinie podzbiorów zbioru [n].
Twierdzenie. (Liczba podzbiorów zbioru n-elementowego)
n
[n]
n
n
Wszystkich podzbiorów zbioru n-elementowego jest 2 . Inaczej |2 | = 2 , lub |P([n])| = 2 .
Dowód. Indukcja względem n. Wzór jest oczywiście prawdziwy dla n=0 i dla n=1. Załóżmy, że
wzór jest prawdziwy dla pewnego n1 i rozważmy zbiór [n+1]. Tych podzbiorów zbioru [n+1],
n
które nie zawierają liczby 1 jest oczywiście 2 (bo jest on n-elementowy). Podzbiorów
zawierających 1 jest tyle samo - bo możemy je wszystkie otrzymać dołączając jedynkę do każdego
zbioru z pierwszej rodziny. Ponieważ rodzina podzbiorów nie zawierających jedynki jest oczywiście
rozłączna z rodziną podzbiorów zawierających jedynkę, możemy stosować zasadę dodawania, czyli
n
n
n
n+1
poszukiwaną liczbą jest 2 +2 = 2*2 = 2 .
Definicja.
Dla każdego podzbioru A zbioru X funkcją charakterystyczną A nazywamy funkcję A
(x  X )  A ( x)  wartość_logiczna( x  A )
Udowodnimy, że wszystkich podzbiorów dowolnego zbioru X jest tyle samo co wszystkich funkcji
z X w {0,1}.
Twierdzenie.
Zbiór P(X) jest równoliczny ze zbiorem {0,1}X.
Dowód.
Skonstruujemy bijekcję :{0,1}X  P(X), mianowicie (f) = {xX : f(x)=1}.  jest
różnowartościowa bo (f) = (g) oznacza, że {xX : f(x)=1} = {xX : g(x)=1}, czyli f(x)=1 wtedy
i tylko wtedy, gdy g(x)=1 a ponieważ jedynymi wartościami f i g są 0 i 1, to oznacza, że f=g.  jest
„na” bo dla każdego AX, A=(  A ).
Twierdzenie. (Liczba podzbiorów zbioru n-elementowego revisited)
n
[n]
n
n
Wszystkich podzbiorów zbioru n-elementowego jest 2 . Inaczej |2 | = 2 , lub |P([n])| = 2 .
Dowód. Wynika to natychmiast z poprzedniego twierdzenia i twierdzenia o liczbie funkcji.
Download