1 / 24

ALGORYTMY GRAFOWE

ALGORYTMY GRAFOWE. REPREZENTACJE GRAFÓW. G = ( V, E ) V = {1,2,...,n} E = { e 1 , ..., e m }. 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 1 1 2 1 0 1 0 0

Download Presentation

ALGORYTMY GRAFOWE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ALGORYTMYGRAFOWE

  2. REPREZENTACJE GRAFÓW G = ( V, E ) V = {1,2,...,n} E = { e1, ..., 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(n2) pamięci

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

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

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

  6. 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

  7. 1 2 3 4 / 1 2 3 4 5 2 / 1 3 3 / 1 2 / 4 1 5 / 5 1 4

  8. 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 thenDFS-VISIT (u); end;

  9. 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. thenbegin (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. thenDFS-VISIT (u); end;

  10. 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 } • 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; • end; • DEQUEUE (Q); • kolor (u) := CZARNY; • end • end; begin for każdy uV(G)–{s} do kolor (u) := BIAŁY; kolor (s) := SZARY; Q := {s};

  11. 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 } • 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; • end; • 8. DEQUEUE (Q); • 9. kolor (u) := CZARNY; • end end; 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};

  12. 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

  13. 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 end;

  14. 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 ;

  15. 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;

  16. 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;

  17. NAJKRÓTSZE DROGI W GRAFIE ZORIENTOWANYM

  18. -4 s s a b 20 3 6 s 5 8 s g c s s d s -3 2 7 3 s e f f -6

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

  20. DIJKSTRA (G, w, s); {Wyznacza odległość każdego wierzchołka grafu G od wierzchołkas ; w : E(G)  R 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 end; begin forkażdy v  V(G) do begin d(v) := ; (v) := NIL; end; d(s) := 0;

  21. 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} for i := 1 to |V(G)| - 1 do for każda krawędź {u,v}  E(G) do RELAX (u, v, w); forkażda krawędź {u,v}  E(G) do if d(v) > d(u) + w(u,v) thenreturn FALSE; return TRUE end; begin forkażdy v  V(G) do begin d(v) := ; (v) := NIL; end; d(s) := 0;

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

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

  24. 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;

More Related