Algorytmy i Struktury Danych, 12. ćwiczenia
2017-12-22
Spis treści
1 Algorytm Floyda-Warshalla 1
2 Cykl Eulera 1
3 Silne spójne składowe 2
4 Rozpoznawanie grafów dwudzielnych 2
5 6 kolorowanie grafów planarnych 3
6 Rozpoznawanie grafów zewnętrznie planarnych 3
7 3 kolorowanie grafów zewnętrznie planarnych 4
1 Algorytm Floyda-Warshalla
Algorytm oblicza najkrótsze ścieżki pomiędzy każdą parą wierzchołków. Algo- rytm działa poprawnie, jeśli w grafie nie istnieje cykl u ujemnej wadze.
1: for i, j ∈ V do
2: dist[i, j] = d[i, j]
3: end for
4: for i ∈ V do
5: for v1∈ V do
6: for v2∈ V do
7: dist[v1, v2] = min(d[v1, v2], d[v1, i] + d[i, v2])
8: end for
9: end for
10: end for
2 Cykl Eulera
Cykl Eulera w grafie skierowanym G istnieje wtedy i tylko wtedy gdy:
• dla każdego wierzchołka v ∈ V (G) mamy indeg(v) = outdeg(v).
• nieskierowana wersja grafu G (tzn. taka w której ignorujemy zwrot kra- wędzi), jest spójna,
1
• C = ∅
• tak długo jak G nie jest pusty, oblicz dowolny cykl i dołącz go do C,
3 Silne spójne składowe
Wierzchołki x, y należą do tej samej silnej spójnej składowej, jeśli istnieją ścieżki z x do y oraz z y do x.
SCC(G)
• uruchom algorytm DFS, oblicz czasy f [v] dla każdego wierzchołka,
• wyznacz graf GT (transpozycja grafu G)
• przeglądaj alg. DFS, wierzchołki GT w kolejności malejących czasów f [v],
• zwróć każde drzewo DFS jako osobną silną spójną składową.
Lemat 1 Silne spójne składowe są identyczne w grafach G i GT.
Lemat 2 Niech C i C0 będą różnymi silnie spójnymi składowymi grafu skiero- wanego G = (V, E) i niech u, v ∈ C, natomiast u0, v0 ∈ C0. Załóżmy, że istnieje ścieżka u → u0 w G. Wówczas w G nie może istnieć ścieżka z v0→ v.
Def. d(U ) = minu∈Ud[u], f (U ) = maxu∈Uf [u].
Lemat 3 Niech C i C0będą różnymi silnie spójnymi składowymi w skierowanym grafie G = (V, E). Załóżmy, że istnieje krawędź (u, v) ∈ E, taka, że u ∈ C i v ∈ C0. Wówczas f (C) > f (C0).
Lemat 4 Niech C i C0będą różnymi silnie spójnymi składowymi w skierowanym grafie G = (V, E). Załóżmy, że istnieje krawedź (u, v) ∈ ET, taka, że u ∈ C i v ∈ C0. Wówczas f (C) < f (C0).
Twierdzenie 1 Algorytm SCC poprawieni oblicza silnie spójne składowe w skie- rowanym grafie G.
4 Rozpoznawanie grafów dwudzielnych
Algorithm 1: Bipartite(v, color) C[v] = color
for x ∈ adj(v) do
if C[x] = nil then Bipartite(x, 1 − color)
else if C[x] = color then błąd graf nie jest dwudzielny
2
5 6 kolorowanie grafów planarnych
n − m + f = 2
(n — liczba wierzchołków, m — liczba krawędzi, f — liczba ściań) m ≤ 3v − 6
1 2
Xdeg(vi) ≤ 3n − 6
Xdeg(vi) ≤ 6n − 12
czyli w grafie planarnym istnieje wierzchołek o stopniu co najwyżej 5.
Algorytm 6-kolorowania: tak długo jak graf nie jest pusty, znajdź wierzcho- łek v o stopniu ≤ 5. Usuń go z grafu, pokoloruj rekurencyjnie resztę, nadaj nowy kolor v (zawsze jest co najmniej jeden wolny).
6 Rozpoznawanie grafów zewnętrznie planarnych
Graf jest zewnętrznie planarny jeśli:
• jest planarny,
• można go tak narysować, żeby wszystkie jego wierzchołki leżały na jednej ścianie.
Opis algorytmu można znaleźć w:
• Manfred Wiegers: Recognizing Outerplanar Graphs in Linear Time. WG 1986: pp. 165-176.
Lemat 5 Jeśli graf G jest zewnętrznie planarny to zawiera wierzchołek v, taki, że deg(v) ≤ 2.
3
Algorithm 2: Outerplanar(V, E) if |V | ≤ 3 then
zaznacz wszystkie krawędzie jako zewnętrzne, return true;
else if ∃vdeg(v) = 1 then Niech w sąsiad wierzchołka v
Zaznacz krawędź (v, w) jako zewnętrzną. return Outerplanar(V − {v}, E − {(v, w)})
else if ∃vdeg(v) = 2 then
Niech w1, w2 sąsiedzi wierzchołka v
if not Outerplanar(V − {v}, E − {(v, w1), (v, w2)} + {(w1, w2)}) then return false;
if (w1, w2) krawędź wewnętrzna then return false;
Zaznacz krawędzie (v, w1), (v, w2) jako zewnętrzne Zaznacz krawędzie (w1, w2) jako wewnętrzną return true;
else
return false;
7 3 kolorowanie grafów zewnętrznie planarnych
Algorytm 3-kolorowania: tak długo jak graf nie jest pusty, znajdź wierzchołek v o stopniu ≤ 2. Usuń go z grafu, pokoloruj rekurencyjnie resztę, nadaj nowy kolor v (zawsze jest co najmniej jeden wolny).
4