ALGORYTMY GRAFOWE
-
Upload
martin-perez -
Category
Documents
-
view
51 -
download
0
description
Transcript of ALGORYTMY GRAFOWE
![Page 1: ALGORYTMY GRAFOWE](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/1.jpg)
ALGORYTMYGRAFOWE
![Page 2: ALGORYTMY GRAFOWE](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/2.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/3.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/4.jpg)
• 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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/5.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/6.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/7.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/8.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/9.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/10.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/11.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/12.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/13.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/14.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/15.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/16.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/17.jpg)
NAJKRÓTSZE DROGI W GRAFIE ZORIENTOWANYM
![Page 18: ALGORYTMY GRAFOWE](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/18.jpg)
ss
se
sc
sa
sg
f
sd
sb
f
-4
3
5
2
6
-3
3
-6
20
8
7
![Page 19: ALGORYTMY GRAFOWE](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/19.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/20.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/21.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/22.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/23.jpg)
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](https://reader035.fdocument.pub/reader035/viewer/2022062308/5681336f550346895d9a8307/html5/thumbnails/24.jpg)
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;