W osiemnastym wieku mieszkańcy Królewca lubili spacerować po mostach na rzece Pregole, których mieli w mieście siedem. Plan mostów pokazuje rysunek.

Podobne dokumenty
Wstęp do informatyki dr Adrian Horzyk, paw. H Wykład TEORIA GRAFÓW

Grafy dla każdego. dr Krzysztof Bryś. Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska.

Matematyka dyskretna

Suma dwóch grafów. Zespolenie dwóch grafów

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

Matematyczne Podstawy Informatyki

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

KURS MATEMATYKA DYSKRETNA

Algorytm chińskiego listonosza Katarzyna Ignaszewska SPI51. Temat: Problem chińskiego listonosza, czyli jak obejść miasto najmniejszym nakładem sił.

TEORIA GRAFÓW I SIECI

Opracowanie prof. J. Domsta 1

Graf. Definicja marca / 1

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Teoria grafów II. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Elementy teorii grafów Elementy teorii grafów

a) 7 b) 19 c) 21 d) 34

Kolorowanie wierzchołków

Wykłady z Matematyki Dyskretnej

Wyznaczanie optymalnej trasy problem komiwojażera

Matematyczne Podstawy Informatyki

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Podstawowe własności grafów. Wykład 3. Własności grafów

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

SKOJARZENIA i ZBIORY WEWN. STABILNE WIERZCH. Skojarzeniem w grafie G nazywamy dowolny podzbiór krawędzi parami niezależnych.

Matematyczne Podstawy Informatyki

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Wykład 4. Droga i cykl Eulera i Hamiltona

Droga i cykl Eulera Przykłady zastosowania drogi i cyku Eulera Droga i cykl Hamiltona. Wykład 4. Droga i cykl Eulera i Hamiltona

Wprowadzenie Podstawy Fundamentalne twierdzenie Kolorowanie. Grafy planarne. Przemysław Gordinowicz. Instytut Matematyki, Politechnika Łódzka

6. Wstępne pojęcia teorii grafów

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

Kombinowanie o nieskończoności. 2. Wyspy, mosty, mapy i kredki materiały do ćwiczeń

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Twierdzenie Halla o małżeństwach

Przykładowe zadania z teorii liczb

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

1 Automaty niedeterministyczne

6d. Grafy dwudzielne i kolorowania

E ' E G nazywamy krawędziowym zbiorem

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Algorytmiczna teoria grafów

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Matematyka Dyskretna - zadania

MODELE SIECIOWE 1. Drzewo rozpinające 2. Najkrótsza droga 3. Zagadnienie maksymalnego przepływu źródłem ujściem

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

Matematyka dyskretna - 7.Drzewa

Złożoność obliczeniowa klasycznych problemów grafowych

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

TEORIA GRAFÓW I SIECI

Lista 4. Kamil Matuszewski 22 marca 2016

6a. Grafy eulerowskie i hamiltonowskie

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Bukiety matematyczne dla szkoły podstawowej

G. Wybrane elementy teorii grafów

W. Guzicki Zadanie 41 z Informatora Maturalnego poziom podstawowy 1

Karta pracy M+ do multipodręcznika dla klasy 8 szkoły podstawowej

Teoria grafów dla małolatów

KURS MATEMATYKA DYSKRETNA

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

MATEMATYKA DYSKRETNA - KOLOKWIUM 2

Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

Grafy co o ich rysowaniu wiedzą przedszkolaki i co z tego wynika dla matematyków

Zadania z ćwiczeń #18 (pon. 7 maja) Matematyka Dyskretna

LOGIKA I TEORIA ZBIORÓW

Materiały dla finalistów

TEORETYCZNE PODSTAWY INFORMATYKI

Kolorowanie wierzchołków grafu

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Matematyka dyskretna - 5.Grafy.

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Egzaminy i inne zadania. Semestr II.

Matematyka od zaraz zatrudnię

Temat 9. Zabłocone miasto Minimalne drzewa rozpinające

Algorytmy i Struktury Danych.

Algorytmika Problemów Trudnych

Digraf. 13 maja 2017

0 + 0 = 0, = 1, = 1, = 0.

Schemat sprawdzianu. 25 maja 2010

MATEMATYKA DLA CIEKAWSKICH. Dowodzenie twierdzeń przy pomocy kartki. Część I

MATEMATYKA DLA CIEKAWSKICH

Zagadnienie najkrótszej drogi w sieci

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

TEORIA GRAFÓW I SIECI

Graf to nie tylko tytuł szlachecki

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Algorytmy genetyczne

7. Teoria drzew - spinanie i przeszukiwanie

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Transkrypt:

Mosty królewieckie W osiemnastym wieku mieszkańcy Królewca lubili spacerować po mostach na rzece Pregole których mieli w mieście siedem. Plan mostów pokazuje rysunek. Ale takie zwykłe spacerowanie po jakimś czasie im się znudziło i zaczęli zastanawiać się czy jest taka trasa spacerowa która przechodzi przez każdy most dokładnie raz żadnego nie omija i pozwala wrócić do punktu wyjścia. Nie potrafili sami rozwiązać tego problemu więc napisali do znanego już wtedy matematyka Leonharda Eulera. Euler pokazał że nie istnieje rozwiązanie tego zadania. (Jeśli wejdzie się po raz trzeci na wyspę nie ma jak z niej wyjść.) Można tę sytuację przedstawić jako graf o wielokrotnych krawędziach: Trzeba w tym grafie znaleźć cykl Eulera czyli cykl przechodzący przez wszystkie wierzchołki i wszystkie krawędzie tego grafu ale przez każdą krawędź tylko raz. W opublikowanej w 1736 roku pracy Euler sformułował pierwsze twierdzenie teorii grafów które dziś zapisujemy następująco: W grafie można znaleźć cykl Eulera wtedy i tylko wtedy gdy graf jest spójny i każdy jego wierzchołek ma parzysty stopień. Znając to twierdzenie zawsze można stwierdzić czy łamigłówka typu "narysuj figurę nie odrywając ołówka od kartki" ma rozwiązanie. 1

Fleury podał algorytm który pozwala znaleźć cykl Eulera w każdym grafie w którym on istnieje. Zadanie 1 Spróbuj samodzielnie znaleźć cykl Eulera w poniższym grafie. Początek formularza Dół formularza Teoria grafów Graf to zbiór wierzchołków który na rysunku zwykle reprezentujemy kropkami na przykład: oraz krawędzi łączących wierzchołki co na rysunku można przedstawić następująco: 2

Czasem dopuszcza się wielokrotne krawędzie i pętle (czyli krawędzie o początku i końcu w tym samym wierzchołku): Niekiedy wygodnie jest rozważać grafy o krawędziach skierowanych (grafy skierowane): Wiele zastosowań mają grafy ważone w których każdej krawędzi przyporządkowano liczbę - wagę może ona oznaczać na przykład odległość między wierzchołkami: W grafach etykietowanych każdy wierzchołek ma swoją nazwę - etykietę: Tak więc grafy o których uczy się w szkole podstawowej to grafy skierowane ważone o zaetykietowanych wierzchołkach: 3

Należy pamiętać że rysunek grafu to tylko jedna z wielu jego reprezentacji graficznych. Każdy graf można narysować na wiele sposobów. Oto kilka reprezentacji graficznych tego samego grafu: Problem kojarzenia małżeństw Dlaczego kojarzenia małżeństw? Załóżmy że mamy k kawalerów i p panien oraz dla każdej z panien podany jest zbiór kawalerów których zna. Czy jest możliwe wydanie za mąż każdej z kobiet za kawalera którego zna? Sformułowanie przy pomocy grafów. Zbudujmy graf którego zbiór wierzchołków składa się z dwóch rozłącznych podzbiorów: zbioru kawalerów K i zbioru panien P. Wierzchołek x ze zbioru K łączymy krawędzią z wierzchołkiem y z P jeśli panna y zna kawalera x. W otrzymanym grafie nie istnieją krawędzie między żadnymi dwoma wierzchołkami ze zbioru P ani żadnymi dwoma ze zbioru K. Jest to więc graf dwudzielny. Poszukiwany jest w tym grafie zbiór krawędzi M taki że: 1. żadna para krawędzi należących do M nie ma wspólnego wierzchołka (małżenstwa są rozłączne - nie dopuszczamy bigamii!!!) 2. każdy wierzchołek ze zbioru P jest końcem pewnej krawędzi ze zbioru M(każda panna wychodzi za mąż). Zbiór krawędzi spełniający takie warunki nazywamy skojarzeniem doskonałym. 4

Kiedy rozwiązanie problemu kojarzenia małżeństw istnieje? P. Hall sformułował i udowodnił w 1935 roku twierdzenie które podaje warunek konieczny i dostateczny na to by problem kojarzenia małżeństw miał rozwiązanie. Twierdzenia Halla Problem kojarzenia małżenstw ma rozwiązanie wtedy gdy każde m panien zna łącznie co najmniej m kawalerów dla m=12...p. Przykład. Oto przykładowy graf dla zbioru P złożonego z trzech panien i zbioru K złożonego z trzech kawalerów. Każda z panien zna dokładnie dwóch kawalerów. Skojarzenie doskonałe istnieje i może wyglądać następująco: Ania powinna wyjść za Tomka Kasia za Arka a Zosia za Jasia. Popatrzmy teraz na następujący graf. 5

W tym grafie skojarzenie doskonałe nie istnieje. Ania i Kasia znają tylko Tomka. Nie uda się więc znaleźć równocześnie męża dla obydwu panien. Zastosowania. Problem ten posiada bardziej poważne zastosowania. Przy użyciu tej samej metody możemy rozwiązać problem polegający na przydzieleniu pracownikom zajęć zgodnie z ich kwalifikacjami. W tym przypadku przez P należy rozumieć zbiór pracowników K zbiór zadań do wykonania. Dwa wierzchołki x i y łączymy krawędzią jeśli praca y jest zgodna z kwalifikacjami pracownika x (to znaczy może on ją wykonywać). Problem znajdowania najkrótszej drogi Wyobraźmy sobie pewną mapę. Na mapie zaznaczone są drogi między poszczególnymi miastami oraz długości tych dróg. Wybierając z tej mapy dowolne dwa miasta A i B chcemy zaplanować najkrótszą trasę z miasta A do miasta B. Jak rozwiązać ten problem używając grafów? Stwórzmy graf którego wierzchołki odpowiadają miastom znajdującym sie na danej mapie. Wierzchołki łączymy krawędzią jeśli istnieje bezpośrednia (nie przebiegająca przez żadne inne miasto zaznaczone na tej mapie) droga łącząca odpowiadające im miasta. Krawędziom nadajemy wagi równe długości danej drogi. Oczywiście długość drogi możemy zastąpić przez czas trwania podróży lub jej koszt. Znalezienie najkrótszej drogi z miasta A do miasta B oznacza znalezienie pomiędzy odpowiadającymi im wierzchołkami drogi o możliwie najmniejszej sumie wag krawędzi. Kiedy rozwiązanie tego problemu istnieje? Jesteśmy w stanie znaleźć najkrótszą drogę jeśli droga między danymi miastami (wierzchołkami w grafie) w ogóle istnieje. Aby można było znaleźć najkrótsze drogi między dowolną parą miast utworzony dla danej mapy graf musi być spójny. Algorytm rozwiązujący ten problem. Najbardziej znanym algorytmem rozwiązującym ten problem jest algorytm Dijkstry. Opis algorytmu Dijkstry Algorytm Dijks znajduje najkrótszą drogę z wierzchołka s (zwanego źródłem) do wierzchołka t (zwanego ujściem) w grafie w którym wszystkim krawędziom nadano nieujemne wagi. Polega na przypisaniu wierzchołkom pewnych wartości liczbowych. Taką liczbę nazwijmy cechą wierzchołka. Cechę wierzchołka v nazwiemy stałą (gdy jest równa długości najkrótszej drogi z s do v) albo w przeciwnym przypadku tymczasową. Na początku wszystkie wierzchołki oprócz s otrzymują tymczasowe cechy. źródło s otrzymuje cechę stałą równą 0. Następnie wszystkie wierzchołki połączone krawędzią z wierzchołkiem s otrzymują cechy tymczasowe równe 6

odległości od s. Potem wybierany jest spośród nich wierzchołek o najmniejszej cesze tymczasowej. Oznaczmy go v. Cechę tego wierzchołka zamieniamy na stałą oraz przeglądamy wszystkie wierzchołki połączone z v. Jeśli droga z s do któregoś z nich przechodząca przez v ma mniejszą długość od tymczasowej cechy tego wierzchołka to zmniejszamy tą cechę. Ponownie znajdujemy wierzchołek o najmniejszej cesze tymczasowej i zamieniamy cechę tego wierzchołka na stałą. Kontynuujemy to postępowanie aż do momentu zamiany cechy wierzchołka t na stałą (czyli obliczenia długości najkrótszej drogi z s do t). Zastosowania. Algorytmy znajdujące najkrótszą drogę w grafie są wykorzystywane do wyznaczania najlepszej trasy pomiędzy dwoma miastami na 'komputerowych' mapach. Mapy takie przydatne są w pracy np. firm transportowych. Problem chińskiego listonosza Dlaczego listonosza? W swojej pracy listonosz wyrusza z poczty dostarcza przesyłki adresatom by na koncu powrócić na pocztę. Aby wykonać swoją pracę musi przejść po każdej ulicy w swoim rejonie co najmniej raz. Oczywiście chciałby aby droga którą przebędzie była możliwie najkrótsza. Dlaczego chińskiego? Problem ten został sformułowany po raz pierwszy w języku teorii grafów przez chinskiego matematyka Mei Ku Kwana w 1962 roku. Sformułowanie problemu. Rozważmy graf którego krawędzie odpowiadają ulicom w rejonie obsługiowanym przez listonosza. Wierzchołki to po prostu skrzyżowania ulic. Krawędziom nadajemy wagi które oznaczają odległości między dwoma skrzyżowaniami. Znalezienie możliwie najkrótszej drogi którą musi przejść listonosz sprowadza sie do znalezienia w tym grafie drogio minimalnej sumie wag krawędzi która przechodzi przez każdą krawędź co najmniej raz. Jeśli graf posiada cykl Eulera. Jeśli dany graf posiada cykl Eulera to istnieje taka droga która zaczyna i konczy sie w tym samym punkcie i wymaga przejścia po każdej ulicy dokładnie raz. Zauważmy że ponieważ każdy cykl Eulera przechodzi raz przez każdą krawędź to suma wag krawędzi (długość drogi którą musi przejść listonosz) jest zawsze taka sama (nie zależy od wierzchołka w którym cykl ten zaczyna się i konczy). Rozwiązaniem jest więc dowolny cykl Eulera w tym grafie. Jeśli graf nie posiada cyklu Eulera. W takim przypadku listonosz będzie zmuszony przejść niektórymi ulicami 7

wielokrotnie. Rozwiązanie jest więc cyklem w którym suma długości krawędzi wybranych więcej niż raz jest możliwie najmniejsza. Przykład Na rysunku pokazany est układ ulic niedaleko Politechniki Warszawskiej. Załóżmy że fragmenty tych pięciu ulic tworzą rejon listonosza. Obok nazw ulic umieszczone są odległości w metrach. Prostokąt oznaczony literą P oznacza miejsce w którym umieściliśmy pocztę na której pracuje 'nasz' listonosz. (Na marginesie: nazwy i układ ulic są prawdziwe jednak podane odległości oraz umiejscowienie poczty nie odpowiadają rzeczywistości. Pocztę umieściliśmy w miejscu gdzie w rzeczywistości znajduje się Gmach Główny Oto jak wygląda graf odpowiadający danemu układowi ulic. Zauważmy że graf ten nie ma cyklu Eulera ponieważ posiada dwa wierzchołki z których wychodzi nieparzysta liczba krawędzi. Na rysunku zaznaczono również rozwiązanie czyli optymalną trasę listonosza. Zwróćmy uwagę że listonosz musi przejść dwukrotnie tylko ulicę Noakowskiego zaś pozostałe ulice dokładnie raz. Powyższa droga jest najkrótszą z możliwych ponieważ odcinek po którym przechodzi dwukrotnie liczy tylko 500 metrów i nie istnieje trasa spełniająca zadane warunki o krótszym odcinku który listonosz musi pokonać więcej niż raz. 8

Czym różni się problem mostów królewieckich od problemu chińskiego listonosza? Rozwiązanie problemu chińskiego listonosza istnieje zawsze o ile graf jest spójny. Natomiast problem mostów królewieckich a mówiąc ogólniej problem znalezienia cyklu Eulera w grafie nie zawsze ma rozwiązanie. Jeśli jednak graf posiada cykl Eulera to rozwiązanie jednego z tych problemów jest również rozwiązaniem dla drugiego. Algorytm Fleury'ego Jest to algorytm znajdujący cykl Eulera w grafie. Jak już wiemy jeśli graf posiada taki cykl to jest on rozwiązaniem rozważanego problemu. Po wprowadzeniu pewnych modyfikacji może posłużyć również do rozwiązywania problemu chinskiego listonosza w przypadku grafów które nie mają cyklu Eulera. Opis Algorytmu Fleury'ego Startujemy z dowolnego wierzchołka. Każda kolejna krawędź po której przechodzimy wybierana jest spośród krawędzi wychodzących z wierzchołka w którym aktualnie się znajdujemy. Wybieramy oczywiście krawędź po której jeszcze nie przeszliśmy. O ile jest to możliwe usunięcie wybranej krawędzi nie powinno rozciąć grafu na dwa 'kawałki'. Jeśli uda nam się postępując w ten sposób dojść do wierzchołka z którego wyruszyliśmy i przejść przez wszystkie krawędzie to otrzymana droga jest cyklem Eulera. Problem komiwojażera Dlaczego komiwojażera? Komiwojażer ma do odwiedzenia pewna liczbę miast. Chciałby dotrzeć do każdego z nich i wrócić do miasta z którego wyruszył. Dane są również odległości mie=ędzy miastami. Jak powinien zaplanować trasę podróży aby w sumie przebył możliwie najkrótsza drogę? Przez 'odległość' miedzy miastami możemy rozumieć odległość w kilometrach czas trwania podróży miedzy tymi miastami albo koszt takiej podróży (na przykład cenę biletu lotniczego). W tym ostatnim przypadku poszukiwanie optymalnej trasy polega na zminimalizowaniu całkowitych kosztów podróży. Tak wiec możemy poszukiwać trasy najkrótszej albo najszybszej albo najtańszej. Zakładamy przy tym że odległość miedzy dowolnymi dwoma miastami jest nie większą niż długość jakiejkolwiek drogi łączącej te miasta która wiedzie przez inne miasta. Założenie to tylko z pozoru wydaje się być zawsze spełnione. Rozważmy następujący przykład. Załóżmy że interesuje nas czas trwania podróży koleją. Najszybsze połączenie z Katowic do Białegostoku wiedzie przez Warszawę. Czas trwania tej podróży traktujemy w tym przypadku jako 'odległość' z Katowic do Białegostoku. Sformułowanie problemu. Zbudujmy graf ważony którego wierzchołki są miastami. Każda parę miast połączmy krawędziami. Każdej krawędzi nadajemy wagę równa 'odległości' miedzy miastami odpowiadającymi wierzchołkom które są końcami tej krawędzi. Otrzymujemy w ten 9

sposób graf pełny który ma tyle wierzchołków ile miast musi odwiedzić komiwojażer (wliczając w to miasto z którego wyrusza). Odwiedzenie wszystkich miast odpowiada cyklowi który przechodzi przez każdy wierzchołek danego grafu dokładnie raz. Cykl taki nazywamy cyklem Hamiltona. Poszukujemy wiec w grafie pełnym cyklu Hamiltona o minimalnej sumie wag krawędzi. Przykład Na rysunku pokazano graf ważony o wierzchołkach odpowiadających pięciu miastom polskim. Wagami krawędzi są odległości podane w kilometrach. Poszukujemy rozwiązania następującego problemu: Komiwojażer wyrusza z Warszawy i chce odwiedzić wszystkie pozostałe cztery miasta a następnie wrócić do Warszawy. Jak powinien zaplanować podróż aby przebył możliwie najmniejsza liczbę kilometrów? Już przy pięciu miastach wszystkich możliwych tras podróży komiwojażera jest. Można zauważyć że przy większej liczbie miast rozważanie wszystkich możliwości nie jest najlepszym pomysłem. Dlaczego rozwiązanie tego problemu zawsze istnieje? Dowolny graf pełny posiada co najmniej jeden cykl Hamiltona. Ponieważ graf ma skończona liczbe wierzchołków to w zbiorze cykli Hamiltona istnieje taki (niekoniecznie jedyny) który posiada minimalna sumę wag krawędzi. Algorytmy rozwiązujące problem komiwojażera. Istnieje wiele algorytmów rozwiązujących ten problem. Wszystkie maja jedna podstawowa wadę. Wymagają rozważenia bardzo dużej liczby przypadków i czas ich działania może być bardzo długi. Niewielki przyrost liczby miast powoduje 'duży' wzrost ilości przypadków do rozważenia i tym samym czasu działania algorytmu. Jeden z możliwych algorytmów polega na obliczeniu całkowitej długości wszystkich istniejących w danym grafie cykli Hamiltona. Jest to jednak bardzo skomplikowane 10

już dla liczby miast niewiele większej od pieciu. Na przykład dla 20 miast liczba cykli Hamiltona w grafie pełnym o 20 wierzchołkach wynosi czyli około. Algorytmy przybliżone Czas rozwiązywania problemu komiwojażera można zmniejszyć stosując jeden ze znanych algorytmów przybliżonych które nie wymagają rozważania aż tak dużej liczby przypadków. Jednak algorytmy takie nie zawsze znajdują optymalne rozwiązanie. Stworzona przez nie trasa może być znacznie 'dłuższa' od najkrótszej. Stosowanie algorytmów przybliżonych wynika z konieczności wyboru pomiędzy szybkością znajdowania a 'jakością' znalezionego rozwiazan. Z reguły zakłada się że wynik działania takiego algorytmu nie może być gorszy od optymalnego o więcej niż pewna ustalona z góry wartość. Jak wyglądałby algorytm przybliżony dla problemu gotowania ziemniaków? Załóżmy że nie możemy czekać aż pół godziny do czasu gdy proces gotowania ziemniaków się zakończy. Co wtedy robimy? Stosujemy algorytm przybliżony!!! Możemy przecież 'niedokładnie' obrać ziemniaki lub wyjąć z wody 'lekko' niedogotowane. Wynik działania takiego algorytmu nie będzie może najsmaczniejszy ale zaoszczędzimy na czasie który będziemy mogli wykorzystać na przykład na poczytanie o teorii grafów. Oczywiście z góry zakładamy dopuszczalna jakość. Musimy określić co to znaczy 'lekko' niedogotowane. Nie możemy przecież jeść ziemniaków surowych! Znajdowanie cyklu Hamiltona w dowolnym grafie. W grafie pełnym cykl Hamiltona zawsze istnieje. W dowolnym grafie może jednak nie istnieć. Problem polegający na znalezieniu cyklu Hamiltona jest podobnie jak problem komiwojażera 'trudny' ze względu na długi czas działania znanych algorytmów. Do znalezienia takiego cyklu może wystarczyć 'trochę szcześcia'. Gorzej jest kiedy cykl Hamiltona w badanym grafie nie istnieje. W takim przypadku możemy nawet być zmuszeni do sprawdzenia wszystkich możliwych permutacji zbioru wierzchołków aby uzyskać pewność że cykl taki nie istnieje. Problem niezawodności sieci Wyobraźmy sobie że chcemy zaprojektować sieć komunikacyjną (np. telekomunikacyjną drogową komputerową). Składa się ona z pewnej liczby punktów węzłowych (np. terminali komputerowych) i bezpośrednich połączeń (linii) między niektórymi z nich. Jak przedstawić sieć komunikacyjną przy pomocy grafu? Sieć taką możemy przedstawić za pomocą grafu którego wierzchołki odpowiadają punktom węzłowym a krawędź miedzy dwoma wierzchołkami oznacza bezpośrednie połączenie linią danych dwóch punktów węzłowych. Oto przykładowa sieć składająca się z 6 punktów węzłowych oznaczonych literami ABCDEF i pewnych krawędzi między nimi 11

Wiemy że nic nie jest doskonałe i sieć narażona jest na awarie. Spójność wierzchołkowa takiego grafu jest równa minimalnej liczbie awarii w punktach węzłowych sieci które spowodują awarię całej sieci (to znaczy między niektórymi węzłami zostanie zerwane połączenie). Natomiast spójność krawędziowa oznacza minimalną liczbę awarii łączy między węzłami które spowodują awarię sieci. Przez niezawodność sieci możemy rozumieć maksymalną liczbę awarii których wystąpienie nie spowoduje awarii całej sieci. Im większa spójność grafu tym większa niezawodność sieci Jak skonstruować sieć by jej niezawodność byla możliwie największa? Oczywiście im więcej linii (krawędzi) tym niezawodność większa. Z drugiej jednak strony zbudowanie każdego połączenia kosztuje. Możemy założyć że szukamy możliwie najtańszej sieci o z góry założonej niezawodności bądź szukamy sieci o ustalonym koszcie i możliwie największej niezawodności. Jedno z możliwych sformułowań tego problemu wygląda następująco: Sformułowanie problemu. Załóżmy że dana jest liczba punktów węzłowych oraz żądana niezawodność sieci k (liczba 'dopuszczalnych' awarii). Zbudowanie każdego bezpośredniego połączenia obarczone jest pewnym kosztem jednostkowym (jest to pewne uproszczenie - w rzeczywistości koszty budowy połączeń są różne). Chcemy zaprojektować sieć o żądanej niezawodności której koszt budowy będzie możliwie najmniejszy. Poszukujemy więc grafu o n wierzchołkach i możliwie najmniejszej liczbie krawędzi którego spójność wierzchołkowa lub spójność krawędziowa wynosi k. Znajdowanie liczby chromatycznej grafu Sformułowanie problemu. Dane: graf G Szukane: liczba chromatyczna grafu G 12

Przykładowe zastosowanie Przy pomocy algorytmów znajdujących optymalne pokolorowanie wierzchołków grafu można rozwiązać następujący problem dotyczący składowania substancji chemicznych: Zakłady chemiczne wykorzystują przy produkcji n surowców chemicznych. Wiadomo że niektóre substancje nie mogą być przechowywane razem gdyż zetknięcie ich ze sobą spowodowałoby 'zniszczenie magazynu' ewentualnie katastrofę ekologiczną. Jaka jest minimalna liczba magazynów potrzebna do przechowywania wszystkich surowców chemicznych używanych w tej fabryce? Jak to zrobić używając grafu? Tworzymy graf którego n wierzchołków odpowiada poszczególnym surowcom chemicznym. Dwa wierzchołki łączymy krawędzią jeśli nie mogą być przechowywane razem. Minimalna liczba magazynów potrzebnych do składowania tych surowców jest równa liczbie chromatycznej tego grafu. Dlaczego tak jest? Rozważmy dowolne pokolorowanie wierzchołków tego grafu w którym każde dwa wierzchołki połączone krawędzią sa pokolorowane innym kolorem. Surowce odpowiadające wierzchołkom pokolorowanym tym samym kolorem mogą być składowane w jednym magazynie! Znajdowanie indeksu chromatycznego grafu Sformułowanie problemu. Dane: graf G Szukane: indeks chromatyczny grafu G Przykładowe zastosowanie. Rozważmy następujący problem. Dany jest zbiór m nauczycieli oraz zbiór n klas. Podane są także liczby godzin zajęć jakie musi odbyć w ciągu tygodnia dany nauczyciel z każdą z klas. Szukana jest minimalna liczba godzin w tygodniu w czasie których mogą odbyć się wszystkie zajęcia. Wiadomo że w danym momencie czasu nauczyciel może uczyć tylko jedną klasę i każda klasa może być uczona przez tylko jednego nauczyciela. Jak rozwiązać problem układania planu zajęć przy pomocy grafów? Stwórzmy graf dwudzielny którego zbiór wierzchołków można podzielić na dwa rozłączne zbiory odpowiadające nauczycielom oraz klasom. W grafie tym dopuszczamy istnienie wielu krawędzi między każdą parą wierzchołków. Wierzchołek odpowiadający nauczycielowi łączymy tyloma krawędziami z wierzchołkiem odpowiadającym klasie ile godzin zajęć musi on odbyć z tą klasą w ciągu tygodnia. Zauważmy że jeśli pokolorujemy krawędzie tego grafu tak aby każde dwie mające wspólny koniec były różnych kolorów to krawędzie pokolorowane tym samym kolorem odpowiadają zajęciom które mogą odbywać się równocześnie. 13

Poszukujemy więc minimalnej liczby kolorów potrzebnych do pokolorowania w ten sposób wszystkich krawędzi. Innymi słowy poszukiwany jest indeks chromatyczny tego grafu. Problem ten można oczywiście skomplikować dodając założenia dotyczące sal w których zajęcia mogą się odbywać bądź narzucając pewne terminy w których dane zajęcia muszą sie odbyć. Przykład Przypuśćmy że mamy 5 nauczycieli: profesorów Mroza Nowaka Pawlaka Cicho i Lisa oraz 4 klasy maturalne. Na poniższym rysunku pokazany jest graf stworzony na podstawie informacji o tym ile godzin zajęć w tygodniu z daną klasą ma poprowadzić każdy z nauczycieli. Dla przykładu: profesor Mróz ma 2 godziny z IVa i 1 godzinę z IVb a profesor Nowak po 1 godzinie z IVa i IVc. Indeks chromatyczny tego grafu wynosi 4. Czyli w ciągu 4 godzin uda się przeprowadzić wszystkie zajęcia. Widać że mniejsza liczba godzin nie wystarczy ponieważ profesor Lis musi przeprowadzić 4 godziny zajęć. Również klasy IVa IVc oraz IVd mają zaplanowane po 4 godziny. A oto jak wygląda pokolorowanie krawędzi tego grafu na 4 kolory w którym żadne dwie krawędzie o wspólnym wierzchołku nie mają tego samego koloru. Jeżeli przyjmiemy że każdy kolor oznacza pewien 45 minutowy okres czasu (np. 8.15-9.00) to w prosty sposób tak pokolorowany graf można przekształcić w poniższą tabelę. 14

---- ---- ---- ---- prof. Mróz IVa IVb IVa prof. Nowak IVc IVa prof. Pawlak IVd IVa IVc prof. Cicho IVc IVd IVb prof. Lis IVb IVd IVc IVd W wierszach odpowiadających poszczególnym nauczycielom wypisane są klasy które powinien uczyć o danej godzinie (przy czym u góry każdej kolumny zamiast godziny jest kolor). Profesor Mróz ma najpierw godzinę z IVa potem godzinę z IVb znowu 1 lekcję z IVa i na koniec godzinę wolną. Kolejność terminów (kolorów) możemy ustawić w dowolny sposób. Czyli profesor Mróz może mieć wpierw 2 godziny z IVa a potem 1 lekcję z IVb. Wymaga to tylko zamiany miejscami 2-ej i 3-ej kolumny w tabeli. Stopień wierzchołka w grafie to liczba krawędzi dochodzących do tego wierzchołka. Graf regularny albo r-regularny to graf w którym każdy wierzchołek ma ten sam stopień równy r. Zad 2 Który z poniższych grafów jest 4-regularny? 15

Drogą w grafie G nazywamy taki ciąg jego wierzchołków v 1 v 2...v k że każde dwa kolejne wierzchołki w tym ciągu są połączone krawędzią (czyli można przejść z jednego końca drogi na drugi chodząc tylko po krawędziach). Zaznacz na rysunku dwa wierzchołki a komputer pokaże ci jedną z dróg między nimi (o ile istnieje). Cykl w grafie G to droga w tym grafie która kończy się w tym samym wierzchołku w którym się zaczęła. Zad 3 Czy w poniższym grafie istnieje cykl zawierający wszystkie jego wierzchołki? A może istnieje cykl zawierający wszystkie wierzchołki oprócz jednego? 16

Taką drogę w grafie nazywamy cyklem Hamiltona.??? Rozwiązanie zagadki sir Hamiltona sprowadza się do znalezienia cyklu Hamiltona w poniższym grafie. Sprawdź czy potrafisz. Na rysunku podano przykładowy cykl Hamiltona w tym grafie. 17

Graf spójny to graf w którym każde dwa wierzchołki są połączone drogą. Inaczej mówiąc graf śkłada się z jednego kawałka. Jeśli graf nie jest spójny to jego spójne kawałki między którymi nie ma połączenia nazywamy składowymi grafu.??? Czy poniższy graf jest spójny? Jeśli nie to znajdź jego składowe. Graf nie jest spójny. Na rysunku pokazano dwie składowe grafu. Graf G jest izomorficzny z grafem H jeśli istnieje takie różnowartościowe i na przyporządkowanie (bijekcja) wierzchołków grafu H wierzchołkom grafu G że jeśli jakieś dwa wierzchołki są połączone krawędzią w jednym z grafów to odpowiadające im wierzchołki w drugim grafie również łączy krawędź. Izomorfizm grafów zachowuje właściwie wszystkie interesujące własności na przykład: liczbę wierzchołków liczbę krawędzi stopnie wierzchołków spójność planarność. Dlatego grafy izomorficzne zwykle utożsamia się. 18

??? Który z grafów B lub C jest izomorficzny z grafem A? A: B: C: Graf B jest izomorficzny z grafem A. Na rysunku podano bijekcję między wierzchołkami obu grafów. Graf C nie jest izomorficzny z grafem A gdyż usunięcie dwóch zaznaczonych wierzchołków spowoduje że graf przestanie być spójny. W grafie A takie wierzchołki nie istnieją. 19

A: B: C: Podgraf grafu G to graf którego wierzchołki stanowią podzbiór zbioru wierzchołków grafu G a krawędzie podzbiór zbioru krawędzi G.??? Znajdź w grafie A podgraf izomorficzny z grafem B. A: B: Na rysunku zaznaczono poszukiwany podgraf. 20

A: B: Graf nazywamy dwudzielnym jeśli zbiór jego wierzchołków można podzielić na takie dwa rozłączne podzbiory X i Y że każda krawędź grafu ma jeden koniec w X a drugi w Y. Innymi słowy są to wszystkie grafy których wierzchołki można pokolorować na dwa kolory tak aby końce każdej krawędzi miały różne kolory.??? Który z tych grafów jest dwudzielny? A: B: 21

Graf A nie jest dwudzielny bo zawiera cykl o nieparzystej liczbie wierzchołków. Zauważmy że wierzchołków leżących na takim cyklu nie da się pokolorować na dwa kolory tak aby końce każdej krawędzi miały różne kolory. Graf B jest dwudzielny. Podzbiory na które dzielimy zbiór wierzchołków grafu zaznaczono na rysunku innym kształtem. B: Graf nazywamy płaskim lub planarnym jeśli można go narysować na płaszczyźnie w ten sposób że krawędzie nigdzie nie będą się przecinać. Graf którego nie można narysować tak aby krawędzie nie przecinały się nazywamy nieplanarnym.??? Czy poniższy graf jest planarny? Tak. Na rysunku pokazano inny - bez przecinania się krawędzi - sposób narysowania tego grafu. Ponumerowano wierzchołki obu grafów aby lepiej uwidocznić izomorfizm między nimi. 22

Grubością grafu nazywamy najmniejszą liczbę planarnych podgrafów na które można podzielić dany graf. Grubość grafu G oznaczamy t(g). Każdy graf planarny ma grubość równą 1.??? Znajdź grubość poniższego grafu. Można się przekonać że graf nie jest planarny więc jego grubość jest większa niż 1. Na rysunku pokazano podział grafu na dwa grafy planarne więc t(g) = 2. 23

Spójnością grafu lub spójnością wierzchołkową grafu nazywamy taką liczbę że usunięcie z grafu pewnych wierzchołków spowoduje że graf przestanie być spójny lub zredukuje go do jednego wierzchołka ale usunięcie dowolnych wierzchołków zawsze pozostawi graf spójny. (Wierzchołki usuwamy wraz z dochodzącymi do nich krawędziami.) Spójność grafu oznaczamy.??? Czy istnieje graf 3-regularny o spójności 1? Takich grafów istnieje nieskończenie wiele. Na rysunku pokazano przykład grafu o tych własnościach. Spójnością krawędziową grafu nazywamy taką liczbę że usunięcie z grafu pewnych krawędzi spowoduje że graf przestanie być spójny ale usunięcie dowolnych krawędzi zawsze pozostawi graf spójny. (Krawędzie usuwamy bez wierzchołków do których dochodzą.) Spójność krawędziową grafu oznaczamy. Można pokazać że zachodzi zależność:.??? Czy istnieje graf o i? 24

Istnieje taki graf. Na rysunku pokazano przykład grafu o tych własnościach. Liczbą chromatyczną grafu nazywamy najmniejszą liczbę kolorów którymi można pokolorować wierzchołki grafu w taki sposób aby każde dwa wierzchołki połączone krawędzią miały różne kolory. Liczbę chromatyczną grafu oznaczamy.??? Znajdź liczbę chromatyczną poniższego grafu. =3. Na rysunku pokazano przykład pokolorowania wierzchołków grafu na 3 kolory. 25

Indeksem chromatycznym grafu nazywamy najmniejszą liczbę kolorów którymi można pokolorować krawędzie grafu w taki sposób aby każde dwie krawędzie o wspólnym końcu miały różne kolory. Indeks chromatyczny grafu oznaczamy. W 1964 roku Vizing udowodnił że:.??? Znajdź indeks chromatyczny poniższego grafu. =4. Na rysunku pokazano przykład pokolorowania krawędzi grafu na 4 kolory. Przykłady grafów o ciekawych własnościach Grafy puste 26

Grafy pełne Grafy pełne dwudzielne Koła Drzewa i lasy Grafy platońskie Graf Petersena Graf Grötzscha Grafy puste składają się jedynie z wierzchołków nie zawierają źadnych krawędzi. Graf pusty o wierzchołkach oznaczamy. Grafy puste mają następujące własności: Cykl Hamiltona: nie posiadają. Cykl Eulera: nie posiadają. Są planarne. 27

Spróbuj zastanowić się dlaczego tak jest. Grafy pełne to grafy w których każde dwa wierzchołki są połączone krawędzią. Graf pełny o wierzchołkach oznaczamy. Grafy pełne o Mają wierzchołkach mają następujące własności: krawędzi. dla n nieparz. n>1 dla n parzystych Cykl Hamiltona: posiadają. Cykl Eulera: posiadają jeśli jest nieparzyste. 28

Są planarne tylko dla. Spróbuj zastanowić się dlaczego tak jest. Grafy pełne dwudzielne to grafy dwudzielne które zawierają wszystkie możliwe krawędzie przy zadanym podziale zbioru wierzchołków. Graf pełny dwudzielny którego wierzchołki podzielone są na zbiór elementowy i elementowy oznaczamy. Grafy pełne dwudzielne o Mają krawędzi. mają następujące własności: Cykl Hamiltona: posiadają jeśli. Cykl Eulera: posiadają jeśli i są parzyste. Są planarne tylko dla dla. Spróbuj zastanowić się dlaczego tak jest. 29

W 1930 roku polski matematyk Kazimierz Kuratowski udowodnił że najmniejsze grafy nieplanarne to i oraz że grafy nieplanarne to tylko te które w pewien sposób zawierają któryś z tych dwóch grafów. Litera "K" w oznaczeniu grafów pełnych pochodzi właśnie od jego nazwiska a grafy i często nazywa się grafami Kuratowskiego Koła to grafy powstałe przez dodanie do cyklu jeszcze jednego wierzchołka i połączenie tego wierzchołka ze wszystkimi wierzchołkami cyklu. Koło o wierzchołkach oznaczamy. Koła o wierzchołkach mają następujące własności: Istnieją dla. Mają krawędzi. dla n parzystych dla n nieparz. Cykl Hamiltona: posiadają. Cykl Eulera: nie posiadają. Są planarne. Spróbuj zastanowić się dlaczego tak jest. 30

Drzewa to grafy spójne nie zawierające żadnego cyklu. Istnieje wiele różnych (nieizomorficznych) drzew o tej samej liczbie wierzchołków. Oto przykłady drzew o wierzchołkach. Drzewa o wierzchołkach mają następujące własności: Mają krawędzi. Cykl Hamiltona: nie posiadają. Cykl Eulera: nie posiadają. Są planarne. Spróbuj zastanowić się dlaczego tak jest. Graf którego każda składowa jest drzewem nazywamy lasem. Oto przykład lasu: 31

Grafy platońskie to grafy utworzone z krawędzi i wierzchołków wielościanów foremnych. czworościan: sześcian: ośmiościan: 32

dwunastościan: dwudziestościan: O wielościanach foremnych wspomina też wykład z Algebry. A miniprogram pozwala na bliższe zaznajomienie się z nimi. Wszystkie grafy platońskie są regularne i planarne. Łatwo można się przekonać że grafy platońskie spełniają formułę Eulera którą możemy zapisać: gdzie oznacza liczbę wierzchołków grafu liczbę krawędzi a liczbę obszarów grafu. Przez obszary rozumiemy obszary spójne na które dzielą płaszczyznę krawędzie grafu narysowanego na tej płaszczyżnie. (Dla bryły będą to po prostu jej ściany). Należy pamiętać przy tym żeby policzyć też "obszar nieskończony" czyli "zewnętrze" grafu. Formułę Eulera spełniają wszystkie grafy planarne narysowane w ten sposób że ich krawędzie nie przecinają się. 33

Graf Petersena: Graf Petersena jest 3-regularny. Cykl Hamiltona: nie posiada. Cykl Eulera: nie posiada. Nie jest planarny. Spróbuj zastanowić się dlaczego tak jest. Graf Grötzscha: Graf Grötzscha ma następujące własności: 34

Cykl Hamiltona: posiada. Cykl Eulera: nie posiada. Nie jest planarny. Spróbuj zastanowić się dlaczego tak jest. Pliki i proste pętle Zadanie 1 Dany jest plik wejściowy DANE.TXT. W pierwszym wierszu pliku znajduj ą si ę 2 liczby: n i m oddzielone spacjami. W każdym z kolejnych n wierszy znajduje si ę m liczb (typu Integer) oddzielonych spacjami. Mozna założy ć że liczby m i n nie przekraczaj ą 100. Napisz program który wczyta z pliku wejściowego liczby do tablicy dwuwymiarowej T : array [1..1001..100] of Integer. Następnie program powinien dla każdej kolumny tablicy (o numerze od 1 do m) obliczyc sume wczytanych do niej liczb. Obliczone sumy należy następnie wypisać do pliku WYNIK.TXT (tzn. wplik wynikowy powinien zawierac m liczb oddzielonych spacjami) Zadanie 2 Tak jak powyżej ale z użyciem tablicy 1-wymiarowej T : array[1..100] od Integer zamiast 2- wymiarowej Zadanie 3 S ą dwa pliki zawierające ciągi liczb oddzielone spacjami: DANE1.TXT i DANE2.TXT. W każdym pliku liczby s ą uporządkowane tzn każda kolejna liczba jest nie mniejsza od poprzedniej. Napisz program który do pliku WYNIK.TXT wypisze wszystkie liczby z obu plików wejściowych ale te ż uporządkowane. Zadanie 4 Napisz program który wczyta z pliku wejściowego dwie liczby. Liczby s ą w kolejnych wierszach. Liczby mog ą by ć bardzo długie ale możesz założy ć że każda z nich ma nie więcej ni ż 1000 cyfr (każd ą taką liczb ę można reprezentowa ć w pamięci komputera jako tablic ę cyfr L : array[1..1000] of 0..9. Twój program powinien wypisa ć do pliku WYNIK.TXT (a) sum ę danych liczb i (b) iloczyn danych liczb. Listy 35

Zadanie 5 Napisz program który utworzy list ę jednokierunkow ą zawierając ą liczby (liczby które maj ą być wstawione można wczyta ć z pliku wejściowego albo n. wylosowa ć). Następnie napisz funkcj ę function Zawiera (glowa : PElListy; liczba : Integer) : Boolean która zwróci True gdy lista podana przez wskaźnik do jej pierwszego elementu zawiera element przechowujący liczb ę podan ą w parametrze liczba. W przeciwnym przypadku funkcja zwróci False. Przetestuj działanie funkcji na utworzonej wcześniej liście. Zadanie 6 (ciekawe) Napisz procedur ę która sprawdzi czy dane dwie listy maj ą wspólny element (NIE chodzi o to czy przechowuj ą t ą sam ą liczb ę!) Zadanie 7 (ciekawsze) Napisz procedur ę która znajdzie piwerszy taki wspólny element opisany w poprzednim zadaniu. Zadanie 8 n osob gra w wyliczanke. Co k-ta osoba odpada. Kto zostanie na koncu? Napisz funkcje która dla danych n i k zwróci numer osoby która zostanie na koncu (osoby sa ponumerowane od 1 do n zaczynamy wyliczac od osoby nr 1 tzn gdy n > k to jako pierwsza odpada osoba k). Funkcja powinna utworzy ć jednokierunkowa liste cykliczna dlugosci n i usuwac odpowiednie jej elementy. Drzewa Zadanie 9 Dane (np. w pliku) n liczb uporzadkowanych. Zbudowac drzewo BST zawierajace te liczby. Glebokosc drzewa powinna byc mniejsza ni ż log n + 1 (tzn. drzewo powinno byc optymalne). Zadanie 10 Typ PWierzcholek jest wskaznikiem do wierzchołka drzewa binarnego zdefiniowanego jako TWierzcholek = record Liczba : Integer; Lewy Prawy : ^TWierzcholek; end; Natomiast PElListy jest wskaznikiem do elementu listy jednokierunkowej zdefiniowanego jako TElListy = record Liczba : Integer; Nast : ^TElListy; end; Napisz funkcje function Liscie (d : PWierzcholek) : PElListy która dla drzewa danego jako wskaznik d do korzenia utworzy i zwróci liste zawierajaca liczby przechowywane w kolejnych lisciach (od lewej do prawej). Na przyklad dla drzewa: 7 / \ 9 4 / \ \ 2 1 5 należy zwróci ć list ę zawierajaca kolejno 2 1 i 5. 36

37