ALGORYTMY GRAFOWE REPREZENTACJE GRAFW G V E V

  • Slides: 24
Download presentation
ALGORYTMY GRAFOWE

ALGORYTMY GRAFOWE

REPREZENTACJE GRAFÓW G = ( V, E ) V = {1, 2, . .

REPREZENTACJE GRAFÓW G = ( V, E ) V = {1, 2, . . . , n} E = { e 1, . . . , em } • Macierz sąsiedztwa : A[1. . n , 1. . n] 1 (true) jeśli {i, j} E A[i, j] = 0 (false) jeśli {i, j} E O(n 2) pamięci

1 2 3 4 5 1 0 1 1 2 1 0 0 3

1 2 3 4 5 1 0 1 1 2 1 0 0 3 1 1 0 0 0 4 1 0 0 0 1 5 1 0 0 1 0

 • Macierz incydencji : B[1. . n , 1. . m] B[i, j]

• Macierz incydencji : B[1. . n , 1. . m] B[i, j] = 1 (true) jeśli i ej 0 (false) jeśli i ej O(nm) pamięci

2 1 5 4 3 6 1 2 3 4 5 1 1 0

2 1 5 4 3 6 1 2 3 4 5 1 1 0 0 0 1 2 1 1 0 0 0 3 0 1 1 0 0 4 1 0 0 5 1 0 0 1 0 6 0 0 0 1 1

 • Listy sąsiedztwa L [1. . n], {Adj(i), i=1, . . . ,

• Listy sąsiedztwa L [1. . n], {Adj(i), i=1, . . . , n } L[i] = wskaźnik na początek listy sąsiadów wierzchołka i ( Adj(i) ) O(m) pamięci

1 1 2 3 2 2 1 3 / 1 2 / 1 5

1 1 2 3 2 2 1 3 / 1 2 / 1 5 / 1 4 / 3 4 5 3 4 4 5 /

PRZESZUKIWANIE W GŁĄB { "Odwiedza" każdy wierzchołek grafu ; Wierzchołki “odwiedzone” mają kolor czarny

PRZESZUKIWANIE W GŁĄB { "Odwiedza" każdy wierzchołek grafu ; Wierzchołki “odwiedzone” mają kolor czarny } DFS-VISIT (u); {"Odwiedza" wierzchołki składowej spójności zawierającej wierzchołek u } begin kolor (u) : = SZARY; for każdy v Adj (u) do if kolor (v) = BIAŁY then DFS-VISIT (v); kolor (u) : = CZARNY; end; DFS (G); begin for każdy u V(G) do kolor (u) : = BIAŁY; for każdy u V(G) do if kolor (u) = BIAŁY then DFS-VISIT (u); end;

PRZESZUKIWANIE W GŁĄB { "Odwiedza" każdy wierzchołek grafu ; Wierzchołki “odwiedzone” mają kolor czarny

PRZESZUKIWANIE W GŁĄB { "Odwiedza" każdy wierzchołek grafu ; Wierzchołki “odwiedzone” mają kolor czarny } DFS-VISIT (u); {"Odwiedza" wierzchołki składowej spójności zawierającej wierzchołek u } begin 1. kolor (u) : = SZARY; 2. for każdy v Adj (u) do 3. if kolor (v) = BIAŁY 4. then begin (v) : = u; DFS-VISIT (v); end; 5. kolor (u) : = CZARNY; end; DFS (G); begin 1. for każdy u V(G) do begin 2. kolor (u) : = BIAŁY; (u) : = -1; end; 3. for każdy u V(G) do 4. if kolor (u) = BIAŁY 5. then DFS-VISIT (u); end;

PRZESZUKIWANIE WSZERZ BFS (G, s); {Jeśli G jest spójny, to odwiedza każdy wierzchołek grafu,

PRZESZUKIWANIE WSZERZ BFS (G, s); {Jeśli G jest spójny, to odwiedza każdy wierzchołek grafu, jeśli niespójny, to odwiedza każdy wierzchołek składowej spójności zawierającej wierzchołek s. Wierzchołki “odwiedzone” mają kolor czarny } begin for każdy u V(G)–{s} do kolor (u) : = BIAŁY; kolor (s) : = SZARY; Q : = {s}; while Q <> do begin u: = head (Q); for każdy v Adj (u) do begin if kolor (v) = BIAŁY then begin kolor (v) = SZARY; ENQUEUE (Q, v); end; DEQUEUE (Q); kolor (u) : = CZARNY; end;

PRZESZUKIWANIE WSZERZ BFS (G, s); {Jeśli G jest spójny, to odwiedza każdy wierzchołek grafu,

PRZESZUKIWANIE WSZERZ BFS (G, s); {Jeśli G jest spójny, to odwiedza każdy wierzchołek grafu, jeśli niespójny, to odwiedza każdy wierzchołek składowej spójności zawierającej wierzchołek s. Wierzchołki “odwiedzone” mają kolor czarny } begin 1. for każdy u V(G)–{s} do 2. begin kolor (u) : = BIAŁY; (u) : = -1; end; 3. kolor (s) : = SZARY; 4. Q : = {s}; while Q <> do begin 1. u: = head (Q); 2. for każdy v Adj (u) do 3. begin 4. if kolor (v) = BIAŁY 5. then begin 6. kolor (v) = SZARY; (v) : = u; 7. ENQUEUE (Q, v); end; 8. DEQUEUE (Q); 9. kolor (u) : = CZARNY; end;

ZASTOSOWANIE METOD Wybrane zastosowania : ( inne w dalszej części wykładu ) • Testowanie

ZASTOSOWANIE METOD Wybrane zastosowania : ( inne w dalszej części wykładu ) • Testowanie czy dany graf jest spójny • Wyznaczanie składowych spójności • Znajdowanie drogi

MST – PRIM (G, w, r ); {Wyznacza zbiór krawędzi ET = { {v,

MST – PRIM (G, w, r ); {Wyznacza zbiór krawędzi ET = { {v, (v)}: v V(G) – {r} } minimalnego drzewa spinającego grafu G} begin for każdy u V(G) do key(u) : = ; key(r) : = 0; (r) : = -1; { utwórz kolejkę priorytetową Q } Q : = V(G); while Q <> do begin u : = EXTRACT-MIN (Q); for każdy v Adj(u) do if v Q and w(u, v) < key(v) then begin (v) : = u; key(v) : = w(u, v) end end;

MST-KRUSKAL (G, w); {Wyznacza zbiór ET krawędzi minimalnego drzewa spinającego grafu G} begin ET

MST-KRUSKAL (G, w); {Wyznacza zbiór ET krawędzi minimalnego drzewa spinającego grafu G} begin ET : = ; for każdy v V(G) do MAKE – SET (v); posortuj krawędzie z E(G) niemalejąco względem wag w ; for każda krawędź {u, v} E(G) (w kolejności niemalejących wag) do if FIND-SET (u) <> FIND-SET (v) then begin ET : = ET {{u, v}}; UNION (u, v) end ; return ET end ;

CONNECTED_COMPONENT(G); { Wyznacza rodzinę zbiorów rozłącznych; każdy zbiór zawiera wierzchołki jednej składowej spójności grafu

CONNECTED_COMPONENT(G); { Wyznacza rodzinę zbiorów rozłącznych; każdy zbiór zawiera wierzchołki jednej składowej spójności grafu G} begin for każdy wierzchołek v V(G) do MAKE-SET(v); for każda krawędź {u, v} E(G) do if FIND-SET(u) <> FIND-SET(v) then UNION (u, v); end;

SAME-COMPONENT(S, u, v); { Testuje czy wierzchołki u i v należą do tej samej

SAME-COMPONENT(S, u, v); { Testuje czy wierzchołki u i v należą do tej samej składowej spójności grafu } begin if FIND-SET(u) = FIND-SET(v) then return TRUE else return FALSE; end;

NAJKRÓTSZE DROGI W GRAFIE ZORIENTOWANYM

NAJKRÓTSZE DROGI W GRAFIE ZORIENTOWANYM

-4 as bs 20 3 ss 5 cs 6 -3 ds 2 -6 gs

-4 as bs 20 3 ss 5 cs 6 -3 ds 2 -6 gs 7 3 es 8 f

RELAX (u, v, w); { Może zmniejszyć wartość d(v) i zmienić (v) } u

RELAX (u, v, w); { Może zmniejszyć wartość d(v) i zmienić (v) } u begin if d(v) > d(u) + w(u, v) then begin d(v) : = d(u) + w(u, v); (v) : = u end; 4 u 4 v 3 9 3 v 7

DIJKSTRA (G, w, s); {Wyznacza odległość każdego wierzchołka grafu G od wierzchołka s ;

DIJKSTRA (G, w, s); {Wyznacza odległość każdego wierzchołka grafu G od wierzchołka s ; w : E(G) R 0 } begin for każdy v V(G) do begin d(v) : = ; (v) : = NIL; end; d(s) : = 0; S : = ; Q : = V(G); while Q <> do begin u : = EXTRACT-MIN (Q); S : = S {u}; for każdy v Adj(u) do RELAX (u, v, w); end;

BELLMAN – FORD (G, w, s); { Testuje czy graf ma cykle ujemnej długości

BELLMAN – FORD (G, w, s); { Testuje czy graf ma cykle ujemnej długości ; jeśli nie ma, to znajduje odległość każdego wierzchołka grafu G od wierzchołka s ; w : E(G) R } begin for każdy v V(G) do begin d(v) : = ; (v) : = NIL; end; d(s) : = 0; for i : = 1 to |V(G)| - 1 do for każda krawędź {u, v} E(G) do RELAX (u, v, w); for każda krawędź {u, v} E(G) do if d(v) > d(u) + w(u, v) then return FALSE; return TRUE end;

a b 5 -2 6 e -3 8 0 2 7 -4 7 c

a b 5 -2 6 e -3 8 0 2 7 -4 7 c 9 d Kolejność krawędzi : (a, b), (a, c), (a, d), (b, a), (c, b), (c, d), (d, b), (d, e), (e, a), (e, c)

a s 0 s d 2 s b Kolejność krawędzi : (a, b), (b,

a s 0 s d 2 s b Kolejność krawędzi : (a, b), (b, c), (c, b), (c, d) 7 3 -6 f c

FLOYD-WARSHALL (W); {Wyznacza macierz D(n) odległości miedzy każdą parą wierzchołków grafu reprezentowanego przez macierz

FLOYD-WARSHALL (W); {Wyznacza macierz D(n) odległości miedzy każdą parą wierzchołków grafu reprezentowanego przez macierz wag W } begin D(0) : = W; for k: =1 to n do for i : = 1 to n do for j : = 1 to n do Dij(k) : = min { Dij(k-1) , Dik(k-1) + Dkj(k-1) }; return D(n) end;