Teoria grafów (autor: Mikołaj Łabęcki)
Transkrypt
Teoria grafów (autor: Mikołaj Łabęcki)
Opracowanie: Mikołaj Łabędzki II D Teoria grafów Teoria grafów to dział matematyki zajmujący się badaniem własności grafów. Rozwijanie algorytmów wyznaczających pewne właściwości grafów jest jednym z bardziej znaczących pól działania informatyki. Algorytmy te stosuje się do rozwiązywania wielu zadań praktycznych, często w dziedzinach na pozór nie związanych z grafami. Graf jest definiowany jako zbiór punktów (zwanych wierzchołkami lub węzłami) połączonych krawędziami (które czasem nazywa się też łukami). Bardziej formalnie, graf prosty to zbiór wierzchołków N i zbiór E nieuporządkowanych par różnych elementów zbioru N zwany zbiorem krawędzi. Przykład grafu o sześciu wierzchołkach oraz siedmiu krawędziach: W tym przypadku N = {1, 2, 3, 4, 5, 6} a E = {(1,2), (1,5), (2,3), (2,5), (3,4), (4,5), (4,6)}. 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ę. 1 Opracowanie: Mikołaj Łabędzki II D 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. Grafy proste to grafy nie skierowane bez wielokrotnych krawędzi, pętli, wag, etykiet. Pojęcia Sąsiad: Dwa wierzchołki są sąsiadami, jeśli istnieje krawędź pomiędzy nimi. W powyższym grafie wierzchołki 1 i 2 sąsiadują ze sobą, ale na przykład 2 i 4 już nie. Stopień wierzchołka: Stopień wierzchołka to liczba jego sąsiadów. W powyższym grafie wierzchołki 1 i 3 mają stopień 2, wierzchołki 2, 4 i 5 mają stopień 3, zaś wierzchołek 6 ma stopień 1. Suma stopni wszystkich wierzchołków jest równa podwojonej liczbie krawędzi grafu. Ścieżka: Ciąg wierzchołków, w którym każdy wierzchołek jest sąsiadem zarówno poprzedniego, jak i następnego. Ścieżkę uważa się za prostą, jeśli żaden z wierzchołków ścieżki nie powtarza się. W powyższym grafie {1, 2, 5, 1, 2, 3} jest ścieżką, a {5, 2, 1} jest ścieżką prostą. Jeśli od każdego wierzchołka grafu istnieje ścieżka do dowolnego innego, to graf jest spójny. Cykl: Jest to ścieżka, która zaczyna się i kończy w tym samym wierzchołku. W powyższym grafie {1, 5, 2, 1} jest jedynym cyklem długości 3. Drzewo: Jest to graf spójny bez cykli. Równoważnie: drzewo o n wierzchołkach to graf spójny o dokładnie n - 1 krawędziach. Drzewa są używane jako struktury danych w informatyce. Graf pełny: Taki graf, w którym każdy wierzchołek jest sąsiadem każdego innego. Powyższy graf nie jest pełny. Graf pełny o n wierzchołkach oznacza się przez Kn. Posiada on n * (n-1) / 2 krawędzi - tyle, ile par różnych wierzchołków. Klika: Podzbiór wierzchołków danego grafu, z których każdy jest sąsiadem każdego innego (czyli podgraf pełny). Graf ważony: Graf ważony to graf, w którym każdej krawędzi przypisana jest pewna waga. Wag używa się na przykład w algorytmie znajdowania optymalnej drogi. Graf planarny: Graf, który można narysować na płaszczyźnie w taki sposób, że żadne dwie krawędzie się nie przecinają. Powyższy graf jest planarny. Graf pełny Kn nie jest planarny dla n > 4. Graf eulerowski: Graf, który można narysować nie odrywając ołówka od papieru, przechodząc przy tym przez każdą krawędź dokładnie raz. Graf jest eulerowski wtedy i tylko wtedy gdy posiada dokładnie zero lub dwa wierzchołki o nieparzystej liczbie sąsiadów oraz musi być spójny. Graf hamiltonowski: Graf, który ma cykl przechodzący przez każdy wierzchołek dokładnie raz. Założeniem jest spójność grafu. 2 Opracowanie: Mikołaj Łabędzki II D Drzewo rozpinające Drzewem rozpinającym grafu G nazywamy drzewo, które zawiera wszystkie wierzchołki grafu G, zaś zbiór krawędzi drzewa jest podzbiorem zbioru krawędzi grafu. Konstrukcja drzewa rozpinającego polega na usuwaniu z grafu tych krawędzi które należą do cykli. Najmniejszą liczbą krawędzi jaką trzeba usunąć z grafu, aby graf stał się acykliczny (stał się drzewem) nazywa się rzędem acykliczności grafu lub liczbą cyklometryczną. Minimalne drzewo rozpinające Dany jest graf ważony G(V, E, w), gdzie V - zbiór wierzchołków, E - zbiór krawędzi, w - funkcja przypisująca krawędzi Ei wagę (liczbę rzeczywistą lub całkowitą). Minimalnym drzewem rozpinającym nazywamy drzewo rozpinające, dla którego suma wag jest najmniejsza z możliwych. Dla niektórych grafów może wskazać wiele drzew rozpinających spełniających tę własność. Istnieją dwa bardzo szybkie alogrytmy o złożoności O(n) znajdujące dla zadanego grafu minimalne drzewo rozpinające. Są to: • • algorytm Prima algorytm Kruskala Istnieje jeszcze jeden algorytm do wyznaczenia minimalnego drzewa rozpinającego, który jest w praktyce połączenieniem algorytmu Prima i Kruskala, jest to: • algorytm Sollina Algorytm Kruskala Algorytm Kruskala wyznacza minimalne drzewo rozpinające. Jest to algorymt zachłanny, który wybiera krawędzie o najmniejszych wagach. Algorytm: 1) niech krawędzie będą uporządkowane następująco: C(e1) (funkcja wagowa) 2) dla każdego 1 i C(e2) ... C(en); gdzie C: E -> R n: jeśli ei nie tworzy cyklu w rozwiązaniu to dołącz do rozwiązania krawędź. 3 Opracowanie: Mikołaj Łabędzki II D Problem komiwojażera Problem komiwojażera jest ściśle związany z cyklem Hamiltona w grafie, tzn. takim cyklem, który zawiera każdy z wierzchołków danego grafu dokładnie 1 raz. Problem komiwojażera przedstawia się następująco: komiwojażer musi odwiedzić n miast w taki sposób, by wrócił do miasta, z którego wyruszył pokonując jak najmniejszą drogę, musi wyznaczyć więc sobie taką trasę między miastami, aby całkowity koszt jego podróży był najmniejszy. Problem ten można przestawić za pomocą grafu pełnego, tzn. grafu o stuprocentowym nasyceniu krawędziowym, co oznacza, że każda para wierzchołków jest połączona krawędzią. Miasta, które musi odwiedzić komiwojażer są wierzchołkami, a drogi łączące te miasta to krawędzie z wagami, symbolizującymi koszt podróży daną drogą. Należy wyznaczyć więc cykl Hamiltona o najmniejszej sumie wag krawędzi należących do tego cyklu. Klasyczny sposób rozwiązania tego problemu polegający na sprawdzaniu długości każdego cyklu Hamiltona wymaga sprawdzenia wszystkich permutacji wierzchołków, co w konsekwencji prowadzi do złożoności wykładniczej (n!), praktyczne zastosowanie takiego algorytmu już dla kilkunastu miast jest więc niemożliwe. Jeśli n to liczba miast, to liczba cykli Hamiltona w tym grafie pełnym wynosi (n − 1)! ). 2 Nawet przy zastosowaniu powracania, gdy w każdym kroku aktualny koszt porównywany jest z najkrótszym wyznaczonym do tej pory cyklem, nie zmniejszy tej złożoności, choć może skrócić czas wykonania algorytmu w średnim przypadku, gdy najkrótsza trasa zostanie wyznaczona w pierwszych krokach. Jednak złożoność nadal będzie wykładnicza. Alternatywą dla przeglądu wyczerpującego jest zastosowanie strategii zachłannej w algorytmie aproksymacyjnym, dającym wprawdzie rozwiązanie przybliżone, lecz w czasie O(n2). Dzieje się tak przy założeniu, że funkcja kosztu podróży spełnia warunek trójkąta, to znaczy, że koszt podróży z miasta u do miasta v jest na pewno mniejszy niż suma kosztów podróży z miasta u do w i z w do v, czyli: c(u,v) < c(u,w) + c(v,w). W przypadku problemu komiwojażera nierówność ta jest spełniona, gdyż koszt podróży z miasta u do v jest po porostu odległością euklidesową między tymi miastami. Można wykazać, że odległość przybliżona jest co najwyżej dwa razy większa od odległości optymalnej. Aproksymacyjny algorytm wyznaczania najkrótszego cyklu Hamiltona w grafie polega na zastosowaniu algorytmu wyznaczającego minimalne drzewo rozpinające (metodą Kruskala lub Prima). Po zbudowaniu minimalnego drzewa rozpinającego należy przejść je metodą preorder (tzn. odwiedzać ojców przed synami) i zapisywać wierzchołki na liście tylko, gdy są odwiedzane po raz pierwszy. Przechodząc drzewo należy równocześnie sumować koszt przebycia krawędzi między dwoma kolejnymi wierzchołkami a na końcu dodać jeszcze koszt przebycia krawędzi między pierwszym i ostatnim wierzchołkiem na liście, ponieważ, zgodnie z założeniami problemu, komiwojażer musi powrócić do miasta, z którego wyruszył. 4