Złożoność obliczeniowa algorytmów grafowych

Transkrypt

Złożoność obliczeniowa algorytmów grafowych
Złożoność obliczeniowa klasycznych problemów grafowych
Oznaczenia: G – graf, V – liczba wierzchołków, E – liczba krawędzi
1. Spójność grafu
Graf jest spójny jeżeli istnieje ścieżka łącząca każdą parę jego wierzchołków.
Spójność grafu można zbadać za pomocą algorytmu przeszukiwania w głąb (DFS, ang.
depth-first search), który dla reprezentacji grafu w postaci listy sąsiedztwa ma złożoność
liniową proporcjonalną do sumy wierzchołków i krawędzi O(V+E). W przypadku
reprezentacji grafu w postaci macierzy sąsiedztwa algorytm DFS ma złożoność
kwadratową względem liczby wierzchołków O(V2).
Metoda DFS
Rekurencyjnie przeszukujemy graf. Odwiedzając wierzchołek zaznaczamy, że został już
odwiedzony, a następnie rekurencyjnie odwiedzamy wszystkie sąsiednie wierzchołki, które nie
zostały oznaczone jako odwiedzone.
2. Ścieżka Eulera
Ścieżka Eulera to ścieżka łącząca dwa dane wierzchołki, która przebiega przez każdą
krawędź w grafie dokładnie raz. Jeżeli jest taka potrzeba, to przez wierzchołki można
przechodzić wielokrotnie.
Jeżeli wierzchołek końcowy pokrywa się z początkowym, to mówimy o trasie Eulera.
Problem został sformułowany po raz pierwszy przez Leonarda Eulera w 1736 roku, a jego
szczególny przypadek nie mający rozwiązania, to tzw. problem 7 mostów królewieckich.
Rozwiązanie trasy i ścieżki Eulera warunkują następujące własności.
Graf posiada cykl (trasę) Eulera, jeżeli jest spójny i wszystkie jego wierzchołki mają
parzysty stopień (parzystą ilość krawędzi przylegających do wierzchołka).
Graf posiada ścieżkę Eulera, jeżeli jest spójny i dokładnie dwa jego wierzchołki mają
nieparzysty stopień.
Stopień wierzchołka Vi oznaczamy jako deg(Vi).
Jeżeli istnieje cykl Eulera to możemy go wyznaczyć w czasie liniowym O(E).
3. Ścieżka Hamiltona
Ścieżka Hamiltona to ścieżka w grafie łącząca dwa dane wierzchołki, która przebiega
przez każdy wierzchołek w grafie dokładnie jeden raz.
Jeżeli wierzchołek końcowy pokrywa się z początkowym, to mówimy o trasie (cyklu)
Hamiltona.
Wyznaczenie ścieżki Hamiltona w sposób rekurencyjny wymaga czasu wykładniczego
O(V!) i jest to problem NP-zupełny.
Rozszerzeniem problemu Hamiltona jest problem komiwojażera (TSP, ang. traveling
salesman problem). Polega on na znalezieniu minimalnego cyklu Hamiltona w pełnym
grafie ważonym. Nazwa wzięła się stąd, że wierzchołki interpretujemy jako miasta, a wagi
krawędzi jako odległości między miastami. Jest to także klasyczny problem NP-zupełny.
4. Dopasowanie
Problem polega na wyznaczeniu możliwie największego podzbioru krawędzi grafu,
mających tę własność, że żadne dwie spośród krawędzi nie prowadzą do/od tego samego
wierzchołka.
Rozwiązanie tego problemu wymaga czasu proporcjonalnego do wielomianu zależnego
od ilości wierzchołków i krawędzi O(p(V,E)).
Dopasowanie dwudzielne (graf dwudzielny)
Problem j/w, ale mamy dwa różne typy wierzchołków i wyszukujemy tylko te krawędzie,
które łączą wierzchołek pierwszego typu z wierzchołkiem drugiego typu.
5. Planarność
Czy możemy narysować dany graf, bez wzajemnego przecinania się krzywych
reprezentujących jego krawędzie?
Wyjaśnia to Twierdzenie Kuratowskiego (1930):
Graf jest planarny, jeżeli po zredukowaniu wierzchołków stopnia 2 nie zawiera podgrafu
pełnego o pięciu wierzchołkach (graf 5), ani podgrafu pełnego dwudzielnego o sześciu
wierzchołkach, w którym każdy z trzech wierzchołków w pierwszej grupie jest połączony
z każdym z wierzchołków w drugiej grupie (graf 3,3).
graf 5
graf 3,3
Innymi słowy można to ująć: graf jest planarny wtedy i tylko wtedy, gdy nie zawiera
podgrafu, który można otrzymać z grafów graf 5 i graf 3,3 przez podział krawędzi
wierzchołkami o stopniu 2. Graf homeomorficzny (podobny) to graf, który można
otrzymać z danego grafu wstawiając w krawędziach dodatkowe wierzchołki stopnia 2.
Bezpośrednia implementacja ma złożoność wielomianową O(n6). Tarjan i Hopcroft w
1971 podali algorytm o złożoności O(n log(n)). A w 1974 przedstawili zawiłą wersję o
złożoności liniowej O(n).
”Najładniejszy” graf planarny w 1994 roku
6. Maksymalna klika
Jaki jest rozmiar największego podgrafu pełnego w grafie (kliki)?
(podgraf pełny – podzbiór wierzchołków grafu wraz z krawędziami pomiędzy tymi
wierzchołkami tworzący graf, w którym każdy wierzchołek jest połączony ze wszystkimi
pozostałymi). Jest to problem klasy NP.
7. Kolorowanie grafu
Problem polega na rozstrzygnięciu, czy istnieje taki sposób przypisania jednego z k
kolorów każdemu wierzchołkowi w grafie tak, aby każda para wierzchołków, połączonych
wspólną krawędzią miała różne kolory.
Liczbą chromatyczną grafu nazywamy najmniejszą możliwą liczbę kolorów potrzebnych
do pokolorowania wierzchołków w w/w sposób.
Dwukolorowalność
Problem rozstrzygamy dla k=2, czyli dla dwóch kolorów.
Problem ten jest równoważny problemowi sprawdzania, czy graf jest dwudzielny.
Graf dwudzielny – graf, którego zbiór wierzchołków można podzielić na dwa rozłączne
zbiory tak, że krawędzie nie łączą wierzchołków tego samego zbioru.
Problem ten może być rozwiązywany z zastosowaniem metody przeszukiwania grafu
wszerz (BFS, ang. breadth-first search), która dla reprezentacji grafu w postaci listy
sąsiedztwa ma złożoność O(V+E), a w przypadku reprezentacji grafu w postaci macierzy
sąsiedztwa O(V2).
Metoda BFS
Wykorzystuje się strukturę danych typu kolejka (FIFO). Zdejmując ze stosu wierzchołek
umieszczamy na stosie wszystkie jego sąsiednie nieodwiedzone wierzchołki. Odwiedzone
wierzchołki zaznaczamy.
Trójkolorowalność
Problem sformułowany jak w dwukolorowalności, ale wierzchołkom przypisujemy jeden z
trzech kolorów.
Problem potrafimy rozwiązywać tylko algorytmami siłowymi, czyli ma złożoność
wykładniczą O(3V) i jest NP-zupełny.
Używając programowania dynamicznego, uzyskujemy złożoność obliczeniową
O(2,445V). Znane są także szybsze algorytmy o złożoności O(V2V), O(1,7504V) i
O(1,3289V).
Programowanie dynamiczne
Jest przykładem programowania wstępującego, polegającego na rozwiązywaniu kolejnych
coraz większych realizacji problemu, aż do osiągnięcia realizacji koocowej. Najpierw
rozwiązywane są najmniejsze realizacje problemu, otrzymane wyniki są zapamiętywane, a
potem są wykorzystywane przy rozwiązywaniu coraz to większych realizacji problemu (bez
potrzeby ich ponownego wielokrotnego wyliczania). Algorytmy programowania dynamicznego
na ogół opisuje się w postaci iteracyjnej.
Czterokolorowalność
Twierdzenie o czterech kolorach: Każdy graf planarny jest czterokolorowalny
Po raz pierwszy hipoteza o prawdziwości tego twierdzenia została postawiona w roku
1852. Jednakże dowód przedstawiono dopiero ponad sto lat później w 1976 roku.
Dowód opiera się niestety na sprawdzeniu aż 1936
przypadków szczególnych, a wykonać to można tylko przy
pomocy komputera. Dlatego z dowodem czekano, aż do
czasów komputerów o wystarczających mocach
obliczeniowych.
Nikt dotąd nie udowodnił twierdzenia o czterech barwach
bez komputerowego wspomagania, choć wymyślono
pewne uproszczenia oryginalnego dowodu.
8. Najkrótsza ścieżka
Problem wyznaczania
wierzchołkami.
w
grafie
ważonym
najkrótszej
ścieżki
między
dwoma
Istnieją dwa klasyczne algorytmy:
Dijkstry: Wyznaczana jest najkrótsza ścieżka pomiędzy danym wierzchołkiem, a
wszystkimi wierzchołkami w grafie. Algorytm Dijkstry jest przykładem algorytmu
zachłannego.
Algorytm zachłanny
Algorytm, w którym w celu uzyskania rozwiązania problemu w każdym kroku dokonuje się
wyboru najlepiej rokującego w danym momencie rozwiązania częściowego, tzn. wybieramy
zachłannie.
Najprostsza implementacja – złożoność obliczeniowa O(V2). Gdy graf ma dużo mniej
krawędzi niż graf pełny stosuje się kolejkę priorytetową zrealizowana w postaci kopca
binarnego – złożoność obliczeniowa wynosi wtedy O(E logV). Złożoność można jeszcze
polepszyć do wartości O(V logV+E) (stosuje się wtedy kopiec Fibonacciego).
Algorytm Dijkstry
Algorytm korzysta z węzłów oznaczanych jako nieosiągalne, nieustalone i ustalone. W kolejnych krokach
algorytmu obliczenia odległości wykonuje się tylko dla węzłów nieustalonych i nieosiągalnych. Wagi
krawędzi muszą byd dodatnie.
1. Na początku wszystkie wierzchołki są oznaczone jako nieosiągalne z wierzchołka początkowego.
2. Zaczynamy od oznaczenia wierzchołka początkowego jako ustalonego. Dla wszystkich wierzchołków
połączonych z nim obliczamy ich odległości od tego wierzchołka, a następnie wierzchołek o
minimalnej odległości oznaczamy jako ustalony.
3. W następnym kroku dla wszystkich wierzchołków sąsiadujących z aktualnym wierzchołkiem
ustalonym obliczamy ich odległości od wierzchołka początkowego (liczone poprzez aktualny
wierzchołek ustalony). Jeżeli dla któregoś z wierzchołków odległośd ta jest mniejsza niż
dotychczasowa, to ją uaktualniamy.
4. Spośród wierzchołków nieustalonych wyszukujemy wierzchołek o minimalnej odległości od
wierzchołka początkowego i czynimy go aktualnym wierzchołkiem ustalonym.
5. Powtarzamy kroki 3 i 4 aż do osiągnięcia wierzchołka koocowego i oznaczenia go jako wierzchołek
ustalony (mamy wtedy wyznaczoną najkrótszą drogę do tego wierzchołka) lub po ustawieniu
wszystkich wierzchołków jako ustalonych (mamy wtedy wyznaczoną najkrótszą drogę do wszystkich
wierzchołków w grafie).
krok
0
1
2
3
4
5
6
7
8
A
N
0(*)
0*
0*
0*
0*
0*
0*
0*
B
N
16
15min
15(*)
15*
15*
15*
15*
15*
C
N
7min
7(*)
7*
7*
7*
7*
7*
7*
D
N
21
21
21
20min
20(*)
20*
20*
20*
E
N
N
15
15min
15(*)
15*
15*
15*
15*
F
N
N
N
N
25
24
24min
24(*)
24*
G
N
N
N
27
23
23min
23(*)
23*
23*
H
N
N
N
N
N
N
32
31min
31(*)
Bellmana-Forda: pesymistyczna złożoność obliczeniowa O(VE).
Stosuje się także dwa algorytmy wyznaczające najkrótsze ścieżki pomiędzy wszystkimi
parami wierzchołków:
Floyda-Warshalla: pesymistyczna złożoność obliczeniowa O(V3).
Algorytm Floyda-Warshalla
Algorytm wyznacza minimalne odległości pomiędzy wszystkimi parami wierzchołków w grafie. W tym
algorytmie wagi węzłów mogą byd ujemne, ale nie może jednak występowad cykl o łącznej ujemnej
wadze osiągalny ze źródła.
Działanie algorytmu jest następujące:
1. Po kolei rozpatrujemy kolejne wierzchołki grafu jako elementy centralne c.
2. Dla każdej pary wierzchołków u i v, jeżeli suma etykiet krawędzi u-c i c-v jest mniejsza od wartości
etykiety krawędzi u-v, to w macierzy sąsiedztwa reprezentującej graf zamieniamy tą etykietę na
etykietę będącą sumą etykiet krawędzi u-c i c-v.
Johnsona: pesymistyczna złożoność obliczeniowa O(V2 log(V)+VE).
9. Najdłuższa ścieżka
Problem wyznaczania
wierzchołkami.
w
grafie
ważonym
najdłuższej
ścieżki
między
dwoma
Podobieństwo tego problemu do problemu najkrótszej ścieżki jest tylko pozorne. Problem
ten jest wersją problemu trasy Hamiltona, czyli jest to problem NP-zupełny.
10. Silna spójność
Czy istnieje ścieżka skierowana łącząca każdą parę wierzchołków w grafie skierowanym?
Złożoność obliczeniowa jest liniowa względem sumy wierzchołków i krawędzi O(V+E)
(dwukrotne wykonanie algorytmu spójności dla grafu nieskierowanego). Problem ten
redukuje się do problemu spełnialności formuł logicznych w postaci 2SAT, co oznacza, że
problem 2SAT jest problemem klasy P.
11. Cykl nieparzystej długości
Czy dany graf skierowany posiada cykl o nieparzystej długości?
Problem ten jest równoważny problemowi dwukolorowalności, a więc ma złożoność
wielomianową. Graf niezawierający cykli nieparzystej długości jest dwukolorowalny.
12. Cykl parzystej długości
Czy dany graf skierowany posiada cykl o parzystej długości?
Problem ten jest równoważny problemowi dwudzielności, a więc ma złożoność
wielomianową. W grafie dwudzielnym wszystkie cykle są parzyste.
13. Minimalne drzewo rozpinające
Minimalne drzewo rozpinające definiuje się dla grafu ważonego nieskierowanego jako
zbiór wszystkich wierzchołków grafu oraz podzbiór jego krawędzi spełniające trzy
warunki:
 krawędzie łączą wszystkie wierzchołki grafu
 w grafie nie występują cykle
 suma etykiet krawędzi jest minimalna
Algorytm Kruskala - wyznaczanie minimalnego drzewa rozpinającego
Algorytm polega na łączeniu minimalnych drzew rozpinających. Przeglądamy kolejne krawędzie grafu w
kolejności rosnących wartości etykiet. Jeżeli wierzchołki kolejnej rozważanej krawędzi należą do dwóch
różnych drzew, to krawędź tą dołączamy do minimalnego drzewa rozpinającego, w przeciwnym razie
(wierzchołki znajdują się w obrębie jednego drzewa) – nie dołączamy.
Algorytm Kruskala: złożoność obliczeniowa O(E log (E))
Stosuje się także dwa algorytmy wyznaczające minimalne drzewo rozpinające:
Prima: złożoność obliczeniowa O(E log(V)).
Boruvki: złożoność obliczeniowa O(E log(V) log(E)).
Tab.
Złożoności obliczeniowe klasycznych problemów grafowych
rodzaj grafu
rodzaj problemu
grafy
nieskierowane
spójność
ścieżka Eulera
ścieżka Hamiltona
dopasowanie dwudzielne
dopasowanie maksymalne
planarność
maksymalna klika
2-kolorowalność
3-kolorowalność
najkrótsza ścieżka
najdłuższa ścieżka


grafy skierowane silna spójność
cykl nieparzystej długości
cykl parzystej długości


grafy ważone

minimalne drzewo rozpinające
problem komiwojażera
problemy problemy problemy
P łatwe P trudne NP-zupełne










