Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Algorytmy grafowe Reprezentacja w pamięci
Przeszukiwanie grafów wszerz i w głąb Sortowanie topologiczne Silnie spójne składowe Minimalne drzewa rozpinające Najkrótsze ścieżki z jednym źródłem
2
Grafy. Definicje. Graf skierowany G jest parą (V, E), gdzie V jest skończonym zbiorem wierzchołków, E jest relacją binarną w V, nazywaną zbiorem krawędzi. W grafie nieskierowanym G = (V, E) zbiór krawędzi E to zbiór nieuporządkowanych par wierzchołków. Graf skierowany Graf nieskierowany
3
Reprezentacja w pamięci grafów nieskierowanych
1 2 3 4 5 6 4 2 3 5 6 1 a) Listy sąsiedztwa grafu b) Macierz sąsiedztwa grafu
4
Reprezentacja w pamięci grafów skierowanych
1 2 3 4 5 6 2 3 4 5 6 1 a) Listy sąsiedztwa grafu b) Macierz sąsiedztwa grafu
5
Przeszukiwanie wszerz
BFS(G, s) 1 for każdy wierzchołek uV[G]-{s} do u := head[Q] 2 do color[u] := BIAŁY for każdy vAdj[u] 3 d[u] := do if color[v] = BIAŁY 4 [u] := NIL then color[v] := SZARY 5 color[s] := SZARY d[v] := d[u] + 1 6 d[s] := [v] := u 7 [s] := NIL ENQUEUE(Q, v) 8 Q := {s} DEQUEUE(Q) 9 while Q color[u] := CZARNY
6
Przykład przeszukiwania wszerz
1 4 2 3 5 6 1 4 2 3 5 6 1 4 2 3 5 6 Q Q Q 1 5 3 4 4 6 1 2 2 2 2 1 4 2 3 5 6 1 4 2 3 5 6 1 4 2 3 5 6 Q Q Q 2 5 3 4 6 6 1 1 2 2 2 2
7
Przeszukiwanie w głąb DFS(G) DFS-Visit(u)
1 for każdy wierzchołek uV[G] color[u] := SZARY 2 do color[u] := BIAŁY d[u] := time := time + 1 3 [u] := NIL for każdy vAdj[u] 4 time := do if color[v] = BIAŁY 5 for każdy wierzchołek uV[G] then [v] := u 6 do if color[u] = BIAŁY DFS-Visit(v) 7 then DFS-Visit(u) color[u] := CZARNY 8 f[u] := time := time + 1
8
Przykład przeszukiwania w głąb
1 4 2 3 5 6 1/ 2/ 1 4 2 3 5 6 1/ 2/ 3/6 4/5 1 2 3 5 6 1/10 3/6 4/5 2/7 8/9 4 1 4 2 3 5 6 1/ 2/ 3/ 4/ 1 4 2 3 5 6 1/ 3/6 4/5 2/7 8/ 1 4 2 3 5 6 1/10 3/6 4/5 2/7 8/9 11/12
9
Sortowanie topologiczne
Sortowanie topologiczne acyklicznego grafu skierowanego G = (V, E) polega na uporządkowaniu wszystkich jego wierzchołków w taki sposób, że jeśli graf G zawiera krawędź (u, v), to w tym porządku wierzchołek u występuje przed wierzchołkiem v. Topological-Sort (G) 1 wykonaj DFS(G) w celu obliczenia czasów przetworzenia f[v] dla wszystkich wierzchołków v. 2 wstaw każdy wierzchołek v na początek listy, kiedy tylko zostanie przetworzony. 3 return lista wierzchołków
10
Przykład sortowania topologicznego
1 4 2 3 5 6 1/10 3/6 4/5 2/7 8/9 11/12 11/12 1/10 4 1 5 8/9 2 2/7 3/6 4/5 3 6
11
Silnie spójne składowe
Silnie spójną składową skierowanego grafu G = (V, E) jest maksymalny zbiór wierzchołków U V taki, że dla każdej pary wierzchołków u i v z U wierzchołki u i v są osiągalne jeden z drugiego. Strongly-Connected-Components (G) 1 wykonaj DFS(G) w celu obliczenia czasów przetworzenia f[u] dla wszystkich wierzchołków u. 2 oblicz GT 3 wykonaj DFS(GT), ale w głównej pętli procedury DFS rozważaj wierzchołki w kolejności malejących wartości f[u] (obliczonych w wierszu 1) 4 wypisz wierzchołki z każdego drzewa w lesie przeszukiwania w głąb z kroku 3 jako oddzielną silnie spójną składową
12
Silnie spójne składowe, przykład
g b d f 13/14 2/7 11/16 3/4 12/15 8/9 5/6 c e h 1/10 a g b d f c e h abe
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.