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