ALGORYTMY GRAFOWE

24
ALGORYTMY GRAFOWE

description

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 - PowerPoint PPT Presentation

Transcript of ALGORYTMY GRAFOWE

Page 1: ALGORYTMY GRAFOWE

ALGORYTMYGRAFOWE

Page 2: ALGORYTMY GRAFOWE

REPREZENTACJE GRAFÓW

• 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

G = ( V, E ) V = {1,2,...,n} E = { e1, ..., em }

Page 3: ALGORYTMY GRAFOWE

1 2 3 4 51 0 1 1 1 12 1 0 1 0 03 1 1 0 0 0 4 1 0 0 0 15 1 0 0 1 0

Page 4: ALGORYTMY GRAFOWE

• 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

Page 5: ALGORYTMY GRAFOWE

1 2 3 4 5 61 1 1 0 1 1 02 0 1 1 0 0 03 0 0 1 1 0 04 0 0 0 0 1 15 1 0 0 0 0 1

1

2

345

6

Page 6: ALGORYTMY GRAFOWE

O(m) pamięci

• 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) )

Page 7: ALGORYTMY GRAFOWE

1

2

3

4

2 5

1

4

3

1

1

1

3 /1

2

3

4

5

/

2 /

5 /

4 /

Page 8: ALGORYTMY GRAFOWE

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;

Page 9: ALGORYTMY GRAFOWE

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;

Page 10: ALGORYTMY GRAFOWE

PRZESZUKIWANIE WSZERZBFS (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 uV(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;end;

DEQUEUE (Q); kolor (u) := CZARNY; end end;

Page 11: ALGORYTMY GRAFOWE

PRZESZUKIWANIE WSZERZBFS (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 uV(G)–{s} do 2. begin kolor (u) := BIAŁY; (u) := -1; end; 3. kolor (s) := SZARY;

4. Q := {s};

while Q <> do begin1. u:= head (Q);2. for każdy v Adj (u) do3. begin4. if kolor (v) = BIAŁY5. then begin

6. kolor (v) = SZARY; (v) := u;

7. ENQUEUE (Q,v); end;end;

8. DEQUEUE (Q); 9. kolor (u) := CZARNY; end end;

Page 12: ALGORYTMY GRAFOWE

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

Page 13: ALGORYTMY GRAFOWE

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 endend;

Page 14: ALGORYTMY GRAFOWE

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 ETend ;

Page 15: ALGORYTMY GRAFOWE

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;

Page 16: ALGORYTMY GRAFOWE

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;

Page 17: ALGORYTMY GRAFOWE

NAJKRÓTSZE DROGI W GRAFIE ZORIENTOWANYM

Page 18: ALGORYTMY GRAFOWE

ss

se

sc

sa

sg

f

sd

sb

f

-4

3

5

2

6

-3

3

-6

20

8

7

Page 19: ALGORYTMY GRAFOWE

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;

4 9

74

3

3

u v

u v

Page 20: ALGORYTMY GRAFOWE

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

Page 21: ALGORYTMY GRAFOWE

begin

for każdy v V(G) do begin d(v) := ; (v) := NIL; end;

d(s) := 0;

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);

for każda krawędź {u,v} E(G) do if d(v) > d(u) + w(u,v) then return FALSE;

return TRUE

end;

Page 22: ALGORYTMY GRAFOWE

0

7

6

5

-2

7-3

-42

8

9

e

a

c d

b

Kolejność krawędzi :(a,b), (a,c), (a,d), (b,a), (c,b), (c,d), (d,b), (d,e), (e,a), (e,c)

Page 23: ALGORYTMY GRAFOWE

s

s

s

f

23

-6

7

a

b c

d0

Kolejność krawędzi :(a,b), (b,c), (c,b), (c,d)

Page 24: ALGORYTMY GRAFOWE

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;