Documente Academic
Documente Profesional
Documente Cultură
- 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
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ă:
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
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)