Sunteți pe pagina 1din 25

Algoritmi și structuri de date – curs 10-11

- Informatică Economică, an II –

Prelucrari pe grafuri II

Cristian Bologa
Cuprins
Arbori minimali de acoperire
Algoritmi de cale minimă
Definirea arborilor de acoperire
Arbori de acoperire minimi
Metoda generică de cautare
Taietura unui graf
O tăietură (S, V-S) a unui graf neorientat G=(V,E) este o partitie a lui V
Un arc taie tăietura S dacă unul din capete este in S si celălalt in V-S
O tăietură S respectă o multime A de arce dacă nici un arc din A nu taie tăietura S
Un arc este un arc usor care taie o tăietură dacă costul w a arcului este minimum
dintre costurile tuturor arcelor care taie tăietura
Taietura unui graf
Dacă G=(V,E) este un graf neorientat conectat si o functie reală w definită pe E. Fie A
un subset a lui E care este inclus intr-un arbore minimal de acoperire, fie (S,V-S) o
tăietură oarecare care respectă pe A si fie (u,v) un arc usor care taie tăietura (S,V-S).
Atunci (u,v) este un arc safe pentru A

Dacă G=(V,E) este un graf neorientat conectat cu o functie reală w definită pe E. Fie
A un subset a lui E care este inclus intr-un arbore minimal de acoperire si fie o
componentă conexă (un arbore) in pădurea . Dacă (u,v) este un arc usor care
conectează C cu alte componente din , atunci (u,v) este un arc safe pentru A
Algoritmul lui Kruskal
Algoritmul găseste arcul safe (u,v) dintre toate arcele care conectează 2 arbori in
pădurea de arbori – arc cu costul cel mai mic

MST-KRUSKAL(G, w)
1. A =
2. For fiecare
3. MAKE-SET(v)
4. Sortează arcele din E in ordine crescătoare a costului w
5. Pentru fiecare arc (u,v) luat in ordine crescătoare a costului
6. If FIND-SET(u) FIND-SET(v)
7.
8. UNION(u,v)
9. Return A
Algoritmul lui Kruskal
Algoritmul lui Kruskal
Algoritmul lui Prim
La fiecare pas se adaugă lui A un arc usor care conectează pe A cu un nod izolat

MST-PRIM(G, w, r)
1. For fiecare
2. u.key =
3. u.π = Nil
4. r.key = 0
5. Q = V
6. While Q !=
7. u = EXTRACT-MIN(Q)
8. For fiecare
9. If and w(u,v) <v.key
10 v.π = u
11. v.key = w(u,v)
Algoritmi de cale minima
Dacă se dă harta unei tări, să se găsească drumul cel mai scurt intre 2 orase

Definirea problemei
Se dă un graf G=(V,E) si o functie de cost w. costul w(p) a unei căi este suma
tuturor costurilor de pe calea p: .
Calea cu costul minim de la u la v este:
Variante ale problemei
Să se găsească calea cea mai scurtă către o anume destinatie t de la fiecare nod v
din graf. Problema poate fi pusă si invers: calea cea mai scurtă de la o sursa s la
fiecare nod v din graf
Să se găsească calea cea mai scurtă dintre 2 noduri u si v
Să se gasească calea cea mai scurtă dintre toate perechile de noduri (u,v)
Algoritmi de cale minima
Structura optimă a unei cai minime
Reprezentarea căii minime
Fie un graf G=(V,E). Pentru fiecare nod v vom memora predecesorul acestuia, care
poate fi un alt nod sau Nil

Algoritmii de determinare a căii minime seteaza predecesorii astfel încât dacă se


merge de la un nod v inapoi, se găseste calea minimă de la sursa s la v

Temă: să se scrie o procedura PRINT-PATH(G, s, v) care tipărește calea minimă de la


s la v
Arborele cu cai minime
Notăm cu toate nodurile din V care au predecesor diferit de Nil – includem
sursa s in
Notăm cu arcele induse de relatia predecesor pe nodurile din

Atunci graful ) este arborele cu cai minime: arborele cu rădăcina in sursa s care
contine căile minime de la s la toate nodurile din graful G
Relaxarea
Algoritmi de cost minim
Ideea algoritmilor de cale minimă:

Se apelează la inceput INITIALIZE-SINGLE-SOURCE


Apoi se apelează relaxări ale arcelor

Algoritmii diferă prin numărul de relaxări aplicate pentru fiecare arc din graf
Proprietăți ale căilor minimale
Inegalitatea triunghiulară: pentru orice arc (u,v) avem

Proprietatea de margine superioară: intotdeauna . Dacă v.d atinge valoarea


atunci v.d va rămâne neschimbată pentru tot restul algoritmului

Proprietate lipsei căii: dacă nu există cale de la s la v atunci

Proprietatea de convergență: dacă calea cea mai scurtă de la s la v trece prin u si


la orice moment inaintea relaxării pe arcul (u,v), atunci după relaxare

Proprietatea de relaxare a căii: dacă calea minimă de la la este si relaxăm


arcele din p in ordinea , , ...., atunci. Proprietatea are loc indiferent ce alte relaxări
mai sunt realizate de algoritm, si indiferent cum aceste relaxări sunt mixate cu cele
din calea p

Proprietatea subgrafului predecesorilor: daca pentru toate nodurile v, atunci


subgraful predecesorilor este arborele cu caile minime cu varful in s
Algoritmul Bellman-Ford
BELLMAN-FORD(G, w, s)
1. INITIALIZE-SINGLE-SOURCE(G, s)
2. For i = 1 to |G.V| - 1
3. For fiecare arc (u,v)
4. RELAX(u, v, w)
5. For fiecare arc (u,v)
6. If v.d > u.d + w(u,v)
7. Return FALSE
8. Return TRUE

Algoritmul indica FALSE in cazul in care gaseste un ciclu cu cost negativ


Timp de executie: O(VE)
Algoritmul Bellman-Ford
Cai minime in grafuri aciclice (DAG)
DAG-SHORTEST-PATH(G, w, s)
1. Se sorteaz[ topologic nodurile din G
2. INITIALIZE-SINGLE-SOURCE(G, s)
3. For fiecare nod u, considerat in ordineatopologica
4. For fiecare nod v G.Adj[u]
5. RELAX(u, v, w)

Timpul total de executie:


Cai minime in grafuri aciclice (DAG)
Algoritmul lui Dijkstra
Rezolvă problema căii minime dacă

DIJKSTRA(G, w, s)
1. INITIALIZE-SINGLE-SOURCE(G, s)
2.
3. Q = G.V // coadă min-priority
4. While
5. u = EXTRACT-MIN(Q)
6.
7. For fiecare nod
8. RELAX(u, v, w)

Invariant: la startulfiecărei iteratii while, are loc pentru fiecare v din S

Timp de executie: dacă


Algoritmul lui Dijkstra

S-ar putea să vă placă și