Algorytmy grafowe

background image

ALGORYTMY

GRAFOWE

background image

PRZESZUKIWANIE W GŁĄB

{ "Odwiedza" każdy wierzchołek grafu G ;
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 DFS-VISIT
(v);
5. kolor (u) := CZARNY;

end;

DFS (G);

begin

1. for każdy u  V(G) do

2. kolor (u) := BIAŁY;

3. for każdy u V(G) do

4. if kolor (u) = BIAŁY
5. then DFS-VISIT
(u);
end
;

background image

PRZESZUKIWANIE WSZERZ

BFS (G,s);

{Jeśli G jest spójny, to odwiedza każdy wierzchołek grafu G,
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. kolor (u) := BIAŁY;

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;

7.

ENQUEUE

(Q,v);

end;
end
;

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

background image

MST-KRUSKAL (G, w);

{

Wyznacza zbiór ET krawędzi minimalnego drzewa spinającego

spójnego 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 ;

background image

MST – PRIM (G, w, r );

{ Wyznacza zbiór krawędzi ET = { {v,

(v)}: v

V(G) – {r} }

minimalnego drzewa spinającego spójnego grafu G }

begin

Q := V(G);
for każdy u  Q do

key(u) := ;

key(r) := 0;
(r) := NIL;

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;

background image

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

7

4

3

3

u

v

u

v

background image

DIJKSTRA (G, w, s);

{ Wyznacza odległość każdego wierzchołka grafu G od wierzchołka s }

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;

background image

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 }

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;

background image

begin
for każda krawędź
(u,v)E(G)

do
begin
f(u,v) := 0;
f(v,u) := 0
end;

while istnieje ścieżka P

st

w sieci residualnej G

f

do

begin
c

f

(P

st

) := min { c

f

(u,v) : (u,v) 

P

st

};

for każda krawędź (u,v)  P

st

do
begin
f(u,v) := f(u,v) + c

f

(P

st

);

f(v,u) :=  f(u,v);

end
end

end

FORD-FULKERSON (G,c,s,t) ;

{

Jeśli c przyjmuje wartości całkowite, to algorytm wyznacza

maksymalny przepływ z s do t w sieci (G,c,s,t ) }

background image

begin
for
każdy wierzchołek u
V(G)

do
begin
h(u) := 0;
e(u) := 0
end;
for każda krawędź (u,v) 

E(G)
do
begin
f(u,v) := 0;
f(v,u) := 0
end;
h(s) := V(G);

for każdy wierzchołek u  Adj

(s) do
begin
f(s,u) := c(s,u);
f(u,s) :=  c(s,u);

e(u) := c(s,u)
end;

while można zastosować
PUSH lub LIFT do

wybierz PUSH lub LIFT i
wykonaj ;

end;

PREFLOW (G,c,s,t);

{Wyznacza maksymalny przepływ z s do t w sieci (G,c,s,t) }

background image

PUSH (u,v) ;

{ Stosujemy gdy:
e(u) > 0
i c

f

(u,v) > 0

i h(u) = h(v) + 1 }

begin
d

f

(u,v) := min { e(u), c

f

(u,v) };
f(u,v) := f(u,v) + d

f

(u,v);

f(v,u) :=  f(u,v);

e(u) := e(u) - d

f

(u,v);

e(v) := e(v) + d

f

(u,v)

end;

LIFT (u) ;

{ Stosujemy gdy:
e(u) > 0
i

(v

V) jeśli (u,v)

E(G

f

) ,

to h(u) <=
h(v) )
}

begin
h(u) := 1 + min { h(v) : (u,v) 

E(G

f

) }

end;

OPERACJE PUSH I LIFT


Document Outline


Wyszukiwarka

Podobne podstrony:
4 algorytmy grafowe z przykladami
Algorytmy grafowe(1)
Algorytmy grafowe(1)
lichtenstein,Struktury danych i złożoność obliczeniowa,Badanie efektywności algorytmów grafowych w z
kozik,projektowanie algorytmów,TEORIA GRAFÓW
Układy Napędowe oraz algorytmy sterowania w bioprotezach
5 Algorytmy
5 Algorytmy wyznaczania dyskretnej transformaty Fouriera (CPS)
Tętniak aorty brzusznej algorytm
Ruciński A Teoria Grafów 1, wyklad6
Algorytmy rastrowe
Algorytmy genetyczne
Teorie algorytmow genetycznych prezentacja
Algorytmy tekstowe
Algorytmy i struktury danych Wykład 1 Reprezentacja informacji w komputerze
ALGORYTM EUKLIDESA

więcej podobnych podstron