Vous êtes sur la page 1sur 21

ALGORITMICA GRAFURILOR.

NOTIUNI DE BAZA

2009

Tematica
1 Grafuri 1.1 Denitii generale . . . . 1.2 Reprezentarea grafurilor 1.3 Grade . . . . . . . . . . 1.4 Conexitate . . . . . . . . 1.5 Algoritmul Roy-Warshall 3 3 5 7 8 10

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

2 Distante i drumuri minime s 13 2.1 Expunerea problemei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 Algoritmul Roy-Floyd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Arbori 17 3.1 Teorema de caracterizare a arborilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2 Arbori partiali de cost minim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Bibliograe
[1] Gh. Barbu, I. Vduva, M. Boloteanu, Bazele informaticii, Editura Tehnic, Bucureti, 1997. a s a s [2] Gh. Barbu, V. Pun, Calculatoare personale i programare C/C++, Editura Didactic i Pedagogic, Bua s n a s a cureti, 2005. s [3] C. Blcu, Combinatoric i teoria grafurilor, Editura Universitii din Piteti, Piteti, 2007. a a as at s s [4] E. Ciurea, Algoritmi. Introducere algoritmica grafurilor, Editura Tehnic, Bucureti, 2001. n a s [5] E. Ciurea, L. Ciupal, Algoritmi. Introducere algoritmica uxurilor n retele, Editura Matrix Rom, Bucureti, a n s 2006. [6] C. Croitoru, Tehnici de baz optimizarea combinatorie, Editura Universitii Al. I. Cuza, Iai, 1992. a n at s [7] L. Livovschi, H. Georgescu, Sinteza i analiza algoritmilor, Editura Stiintic i Enciclopedic, Bucureti, 1986. s as a s [8] D.R. Popescu, Combinatoric i teoria grafurilor, Societatea de Stiinte Matematice din Romnia, Bucureti, a s a s 2005. [9] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I i II, Editura Universitii din Bucureti, s at s Bucureti, 1990-1991. s [10] L. State, Elemente de logic matematic i demonstrarea automat a teoremelor, Tipograa Universitii din a a s a at Bucureti, Bucureti, 1989. s s [11] T. Toadere, Grafe. Teorie, algoritmi i aplicatii, Editura Albastr, Cluj-Napoca, 2002. s a [12] I. Tomescu, Combinatoric i teoria grafurilor, Tipograa Universitii din Bucureti, Bucureti, 1978. as at s s [13] I. Tomescu, Probleme de combinatoric i teoria grafurilor, Editura Didactic i Pedagogic, Bucureti, 1981. as as a s [14] I. Tomescu, Data structures, Editura Universitii din Bucureti, Bucureti, 2004. at s s

Tema 1 Grafuri
Grafurile sunt modele matematice cu o gam larg de aplicatii. Aceast aplicabilitate a condus a a a la dezvoltarea accelerat a teoriei grafurilor, att din punct de vedere al rezultatelor teoretice ct a a a i al algoritmicii, grafurile impunndu-se drept modele de baz informatic, special teoria s a a n a n n structurilor de date i a analizei algoritmilor. s

1.1

Denitii generale

Denitia 1.1.1. Un graf neorientat (graf, pseudograf, graf general) este o pereche G = (V, E) unde: V este o multime nit i nevid, elementele sale numindu-se nodurile (vrfurile, punctele) as a a grafului G; E este o colectie (multime multipl, multiset) nit de perechi neordonate, posibil egale, de a a noduri, elementele sale numindu-se muchiile (legturile directe, liniile) grafului G. a Observatia 1.1.1. Intr-o pereche neordonat, notat [x, y], nu conteaz ordinea dintre elemente, adic a a a a [x, y] = [y, x]. Denitia 1.1.2. Un graf orientat (digraf, pseudodigraf) este o pereche G = (V, E) unde: V este o multime nit i nevid, elementele sale numindu-se vrfurile (nodurile, punctele) as a a grafului G; E este o colectie (multime multipl, multiset) nit de perechi ordonate de vrfuri, elementele a a a sale numindu-se arcele (legturile directe ale) grafului G. a Observatia 1.1.2. Intr-o pereche ordonat, notat (x, y), conteaz ordinea dintre elemente, adic a a a a (x, y) = (y, x) pentru x = y. Denitia 1.1.3. Numrul de noduri ale unui graf (neorientat sau orientat) se numete ordinul a s grafului, iar numrul de muchii sau arce se numete dimensiunea grafului. a s Denitia 1.1.4. a) Dac e = [x, y] este o muchie a unui graf neorientat, atunci nodurile x i y a s se numesc extremitile muchiei e i spunem c muchia e este incident cu nodurile x i at s a a s y. b) Dac e = (x, y) este un arc al unui graf orientat, atunci nodul x se numete extremitatea a s initial iar nodul y se numete extremitatea nal a arcului e i spunem c arcul e este a s a s a incident cu x spre exterior i cu y spre interior. s 3

TEMA 1. GRAFURI

c) O bucl a unui graf (neorientat sau orientat) este o muchie sau un arc avnd extremitile a a at egale (adic o muchie de forma [x, x], respectiv un arc de forma (x, x)). a d) Dou noduri x i y ale unui graf (neorientat sau orientat) se numesc adiacente (vecine) dac a s a exist o muchie sau un arc incident cu x i cu y (adic o muchie de forma [x, y], respectiv un a s a arc de forma (x, y) sau de forma (y, x)). Denitia 1.1.5. Dac colectia (multimea multipl) de muchii sau arce a unui graf (neorientat a n a sau orientat) exist dou sau mai multe elemente egale (i aate pe pozitii diferite), atunci acestea a a s se numesc muchii sau arce multiple. Denitia 1.1.6. Un graf (neorientat sau orientat) fr bucle se numete multigraf (neorientat, a a s respectiv orientat). Denitia 1.1.7. Un graf (neorientat sau orientat) se numete simplu (sau strict) dac nu contine s a nici bucle i nici muchii sau arce multiple. s Observatia 1.1.3. a) Un graf neorientat simplu este o pereche G = (V, E), unde V este o multime a nit i nevid (de elemente numite noduri) iar E P2 (V ) este o multime nit (de elemente numite as a muchii), unde P2 (V ) = {{x, y}|x, y V, x = y} (multimea tuturor submultimilor cu dou elemente ale lui V ). a b) Un graf orientat simplu este o pereche G = (V, E), unde V este o multime nit i nevid (de as a elemente numite noduri) iar E V V \ {(x, x)|x V } este o multime nit (de elemente numite a arce). Denitia 1.1.8. Fie G = (V, E) un graf (orientat sau neorientat). O reprezentare grac a lui a G se obtine reprezentnd nodurile sale prin puncte distincte (n plan sau pe o alt suprafat dat), a a a a iar muchiile [x, y] sau arcele (x, y) prin segmente (de curb continu) distincte neorientate, respectiv a a orientate, de la punctul ce reprezint nodul x pn la punctul ce reprezint nodul y. a a a a s Exemplul 1.1.1. Graful neorientat G = (V, E), cu V = {1, 2, 3, 4, 5, 6} i E = {e1 , e2 , e3 , e4 , e5 , e6 , e7 , e8 , e9 }, unde e1 = [1, 2], e2 = [1, 4], e3 = [2, 2], e4 = [2, 5], e5 = [3, 6], e6 = [3, 6], e7 = [4, 5], e8 = [4, 5], e9 = [4, 5] (E este o multime multipl!) are reprezentarea grac din Figura 1.1.1. a a

e1 e7 e8 e9

e3
2

2 5

e2
4

e4
5

e5
6

e6
3 4

Figura 1.1.1:

Figura 1.1.2:

s Acest graf are ordinul 6 i dimensiunea 9. El contine bucla e3 , muchiile multiple e5 , e6 i muchiile s s multiple e7 , e8 , e9 , deci nu este nici multigraf, nici simplu. Nodurile 1 i 2 sunt adiacente, iar nodurile 1 i 5 nu sunt adiacente. s Exemplul 1.1.2. Graful orientat G = (V, E), cu V = {1, 2, 3, 4, 5} i s E = {(1, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (5, 4)} este un graf simplu avnd reprezentarea grac din Figura 1.1.2. Arcul (3, 1) are extremitatea initial a a a 3 i extremitatea nal 1. s a

TEMA 1. GRAFURI

Denitia 1.1.9. Fie G1 = (V1 , E1 ) i G2 = (V2 , E2 ) dou grafuri (ambele orientate sau ambele s a neorientate). s a a s a) Spunem c G1 este un subgraf al lui G2 i notm G1 G2 dac V1 V2 i E1 E2 . a b) Spunem c G1 este un graf partial al lui G2 dac V1 = V2 i E1 E2 . a a s Denitia 1.1.10. Fie G = (V, E) un graf (neorientat sau orientat) i U V o submultime nevid s a de noduri. Subgraful indus (generat) de U G este subgraful G[U ] = (U, F ), unde F este n colectia tuturor muchiilor sau arcelor din E ce au ambele extremiti U . at n Denitia 1.1.11. Fie G = (V, E) un graf (orientat sau neorientat) i F E o colectie de muchii s sau de arce. a) Subgraful indus (generat) de F G este subgraful G[F ] = (U, F ), unde U este multimea n tuturor nodurilor din V ce sunt extremiti pentru cel putin o muchie sau un arc din F . at b) Graful partial indus (generat) de F G este graful partial (V, F ). n Exemplul 1.1.3. Pentru graful neorientat din Exemplul 1.1.1, subgraful generat de submultimea de noduri {1, 3, 4, 5} are reprezentarea din Figura 1.1.3.
1 3

Figura 1.1.3: Pentru graful orientat din Exemplul 1.1.2, subgraful generat de submultimea de arce {(2, 3), (5, 4)} are reprezentarea din Figura 1.1.4, iar graful partial generat de aceeai submultime de arce are s reprezentarea din Figura 1.1.5.
2 5

Figura 1.1.4:

Figura 1.1.5:

1.2

Reprezentarea grafurilor

continuare descriem cteva forme de reprezentare (memorare) a grafurilor informatic. Dintre In a n a aceste forme, cea mai utilizat este matricea de adiacent. a a Denitia 1.2.1. Fie G = (V, E) un graf (neorientat sau orientat) unde V = {v1 , . . . , vn } i E = s a a a {e1 , . . . , em }. Matricea de adiacent asociat grafului G este matricea A = (aij )i,j=1,n denit prin aij = numrul de muchii sau de arce ek E de la nodul vi la nodul vj (adic muchii de forma a a ek = [vi , vj ], respectiv arce de forma ek = (vi , vj )), i, j {1, . . . , n}.

TEMA 1. GRAFURI Observatia 1.2.1. a) Dac graful neorientat G = (V, E) este simplu, atunci a aij = 1, dac vi i vj sunt adiacente (adic [vi , vj ] E), a s a 0, caz contrar. n 1, dac (vi , vj ) E, a 0, caz contrar. n

b) Dac graful orientat G = (V, E) este simplu, atunci a aij =

Exemplul 1.2.1. Matricea de adiacent asociat grafului neorientat din Exemplul 1.1.1 este a a 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 2 , A= 1 0 0 0 3 0 0 1 0 3 0 0 0 0 2 0 0 0 iar matricea de adiacent asociat grafului orientat din Exemplul 1.1.2 este a a 0 1 0 0 0 0 0 1 1 1 A = 1 1 0 0 0 . 0 0 0 0 0 0 0 0 1 0 Observatia 1.2.2. Evident, orice graf neorientat are matricea de adiacent simetric (aij = aji i, j). a a Observatia 1.2.3. Fie G = (V, E) un graf (neorientat sau orientat), unde V = {v1 , . . . , vn } i E = s a n a {e1 , . . . , em }, E = . O alt reprezentare a grafului G este matricea T ce retine ecare coloan extremitile unei muchii sau arc, adic T = (tkj ) k = 1, 2 denit prin t1j = x, t2j = y, unde at a a ej = [x, y] (pentru muchii) sau ej = (x, y) (pentru arce), j {1, . . . , m}. Pentru graful din Exemplul 1.1.1 matricea T este T = 1 1 2 2 3 3 4 4 4 2 4 2 5 6 6 5 5 5 1 2 2 2 3 3 5 2 3 4 5 1 2 4 ,
j = 1, m

iar pentru graful din Exemplul 1.1.2 matricea T este T = .

Observatia 1.2.4. O alt form frecvent utilizat reprezentarea grafurilor simple este dat de a a a n a listele de adiacent (memorate static sau dinamic). Lista de adiacent a unui nod x este format a a a din toate nodurile y pentru care exist muchie sau arc de la x la y (y se numete succesor direct a s al lui x). Pentru graful orientat din Exemplul 1.1.2, listele de adiacent sunt a L(1) = {2}, L(2) = {3, 4, 5}, L(3) = {1, 2}, L(4) = , L(5) = {4}, a a unde L(i) reprezint lista de adiacent a nodului i. Pentru grafurile orientate simple, deseori se memoreaz i listele de predecesori directi. Lista de predecesori directi a unui nod x este format as a din toate nodurile y pentru care exist arc de la y la x (y se numete predecesor direct al lui x). a s Pentru graful din Exemplul 1.1.2, aceste liste sunt L(1) = {3}, L(2) = {1, 3}, L(3) = {2}, L(4) = {2, 5}, L(5) = {2}. Evident, pentru grafurile neorientate notiunile de succesor direct i predecesor direct coincid, ind i s s sinonime cu notiunile de vecin sau adiacent.

TEMA 1. GRAFURI

Observatia 1.2.5. Alegerea uneia sau alteia dintre formele de reprezentare a grafurilor descrise mai sus depinde de ecienta i de uurinta implementrii operatiilor necesare de prelucrare a acestor s s a forme, deci de tipul problemei modelate prin grafuri i de algoritmul de rezolvare utilizat. s

1.3

Grade

Denitia 1.3.1. Fie G = (V, E) un graf i x V un nod arbitrar xat. s a) Dac G este neorientat, atunci gradul lui x, notat dG (x) = d(x), este denit prin a d(x) = a(x) + 2 b(x), unde a(x) reprezint numrul de muchii e E ce nu sunt bucle i sunt incidente cu x, iar b(x) a a s este numrul de bucle e E ce sunt incidente cu x. a b) Dac G este orientat, atunci: a gradul de ieire (semigradul exterior) al lui x, notat d+ (x) = d+ (x), reprezint s a G numrul de arce e E incidente cu x spre exterior; a a gradul de intrare (semigradul interior) al lui x, notat d (x) = d (x), reprezint G numrul de arce e E incidente cu x spre interior; a gradul (total al) lui x, notat dG (x) = d(x), este d(x) = d+ (x) + d (x). Exemplul 1.3.1. Pentru graful neorientat din Exemplul 1.1.1, gradele nodurilor sunt: d(1) = 2, d(2) = 4, d(3) = 2, d(4) = 4, d(5) = 4, d(6) = 2. Pentru graful orientat din Exemplul 1.1.2, gradele nodurilor sunt: d+ (1) = 1, d+ (2) = 3, d+ (3) = 2, d+ (4) = 0, d+ (5) = 1, d (1) = 1, d (2) = 2, d (3) = 1, d (4) = 2, d (5) = 1, d(1) = 2, d(2) = 5, d(3) = 3, d(4) = 2, d(5) = 2.

s Propozitia 1.3.1. Fie G = (V, E) un graf, V = {v1 , . . . , vn }, i e A = (aij )i,j=1,n matricea de adiacenta a grafului G.
n

a) Dac G este neorientat, atunci d(vi ) = aii + a b) Dac G este orientat, atunci d+ (vi ) = a
n n j=1

j=1

aij , i {1, . . . , n}.


n j=1

aij , d (vi ) =

aji , i {1, . . . , n}.

Observatia 1.3.1. Dac graful G este simplu, atunci aii = 0 i i egalitatea de la punctul a) al a s propozitiei anterioare devine d(vi ) =
j=1

aij . d(x) = 2m.


xV

Propozitia 1.3.2. Fie G = (V, E) un graf avnd dimensiunea m. Atunci a In plus, dac G este orientat atunci a
xV

d+ (x) =
xV

d (x) = m.

Denitia 1.3.2. Fie G = (V, E) un graf. Un nod x V cu dG (x) = 0 se numete nod izolat, iar s s un nod y V cu dG (y) = 1 se numete nod terminal.

TEMA 1. GRAFURI

1.4

Conexitate

Denitia 1.4.1. Fie G = (V, E) un graf. a) Un lant graful G este o succesiune alternant n a [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ], unde v1 , v2 , . . . , vk+1 V (noduri), e1 , e2 , . . . , ek V (muchii sau arce), k N, cu proprietatea a at s a c pentru orice i {1, . . . , k} ei este o muchie sau un arc avnd extremitile vi i vi+1 (adic a ei = [vi , vi+1 ] pentru un graf neorientat, respectiv ei = (vi , vi+1 ) sau ei = (vi+1 , vi ) pentru un s at graf orientat). Nodurile v1 i vk+1 se numesc extremitile lantului, iar nodurile v2 , . . . , vk se numesc noduri intermediare. Numrul k de muchii sau arce (nu neaprat distincte) ale a a lantului se numete lungimea lantului. s b) Un lant se numete s nchis dac are extremitile egale, respectiv deschis caz contrar. a at n c) Un lant se numete simplu dac muchiile sau arcele sale sunt diferite dou cte dou (con s a a a a sidernd diferite i muchiile sau arcele multiple aate pe pozitii diferite n E). a s d) Un lant deschis se numete elementar dac nodurile sale sunt diferite dou cte dou. Un s a a a a lant nchis se numete elementar dac este simplu i, cu exceptia extremitilor, nodurile s a s at sale sunt diferite dou cte dou. a a a e) Un ciclu este un lant nchis i simplu de lungime nenul (adic cu cel putin o muchie sau un s a a arc). f ) Un drum este un lant [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ] cu proprietatea c pentru orice i {1, . . . , k} a a s a a muchia sau arcul ei are extremitatea initial vi i extremitatea nal vi+1 (adic ei = (vi , vi+1 ) pentru graf orientat). Un astfel de drum se noteaz i cu as (v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ), s a a nodurile v1 i vk+1 numindu-se extremitatea initial, respectiv extremitatea nal a drumului. g) Un circuit este un drum nchis i simplu de lungime nenul (adic un drum ce este i ciclu). s a a s Observatia 1.4.1. Pentru grafurile neorientate notiunile de lant i de drum coincid; deci i notiunile s s de ciclu i de circuit coincid. s Observatia 1.4.2. Orice lant elementar este i simplu. s Observatia 1.4.3. Pentru grafurile neorientate sau orientate simple orice lant [v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ] sau drum (v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 ) este bine determinat de nodurile sale (deoarece muchia sau a arcul ei nu poate dect singura muchie sau singurul arc de la vi la vi+1 , i), deci poate notat, pe scurt, doar prin nodurile succesive [v1 , v2 , . . . , vk , vk+1 ], respectiv (v1 , v2 , . . . , vk , vk+1 ). Exemplul 1.4.1. Pentru graful neorientat din Exemplul 1.1.1, [1, e2 , 4, e9 , 5, e4 , 2, e1 , 1, e2 , 4]

TEMA 1. GRAFURI

este un lant (drum) deschis, nesimplu (contine de dou ori e2 ), neelementar (contine de dou ori 1), a a de lungime 5. acelai graf, [1, e1 , 2, e3 , 2, e4 , 5, e7 , 4, e9 , 5, e8 , 4, e2 , 1] este un ciclu (circuit) simplu i neelementar In s s (contine de dou ori 2), de lungime 7. a Pentru graful orientat simplu din Exemplul 1.1.2, [3, 1, 2, 4, 5] este un lant ce nu este drum (deoarece (4, 5) nu este arc, ci (5, 4)), iar (3, 1, 2, 5, 4) este un drum (i lant) deschis elementar s acelai graf, (1, 2, 3, 1) este un circuit (i ciclu) elementar, iar [2, 5, 4, 2] (i simplu) de lungime 4. In s s s este un ciclu elementar ce nu este circuit (deoarece (4, 2) nu este arc, ci (2, 4)). Denitia 1.4.2. a) Un graf (neorientat sau orientat) se numete conex dac pentru orice dou s a a noduri distincte x, y exist cel putin un lant de la x la y. a b) Un graf orientat se numete tare-conex dac pentru orice dou noduri distincte x, y exist cel s a a a putin un drum de la x la y (deci, schimbnd ordinea lui x i y, exist cel putin un drum i de a s a s la y la x). Observatia 1.4.4. Orice graf tare-conex este i conex (deoarece orice drum este i lant). Orice graf s s cu un singur nod veric denitia anterioar, deci este i conex i tare-conex. a a s s Observatia 1.4.5. Deoarece pentru orice nod x exist lantul [x] i drumul (x) de lungimi zero, rezult a s a c denitia anterioar putem renunta la conditiile ca nodurile x i y s e distincte. a n a s a De asemenea, deoarece prin eliminarea tuturor portiunilor dintre noduri egale dintr-un lant sau drum se obtine un lant sau un drum elementar avnd aceleai extremiti, rezult c denitia a s at a a n anterioar putem a nlocui termenii de lant i drum cu lant elementar, respectiv drum elemen s tar. Exemplul 1.4.2. Graful neorientat din Exemplul 1.1.1 nu este conex, deoarece nu exist lanturi a ntre nodurile 1 i 3. Graful orientat din Exemplul 1.1.2 este conex, dar nu este tare-conex, deoarece nu s exist drum de la nodul 4 la nodul 1 (dei exist drum de la nodul 1 la nodul 4!). a s a Denitia 1.4.3. a) O component conex a unui graf (orientat sau neorientat) G = (V, E) a a este un subgraf G[U ] generat de o submultime U V de noduri cu proprietatea c G[U ] este a conex i maximal cu aceast proprietate (n raport cu incluziunea), adic pentru orice nod s a a x V \ U subgraful G[U {x}] nu mai este conex. b) O component tare-conex a unui graf orientat G = (V, E) este un subgraf G[U ] generat a a de o multime U V de noduri cu proprietatea c G[U ] este tare-conex i maximal cu aceast a s a proprietate (n raport cu incluziunea), adic pentru orice noduri x1 , x2 , . . . , xp V \U subgraful a G[U {x1 , x2 , . . . , xp }] nu mai este tare-conex. Observatia 1.4.6. Un graf este conex dac i numai dac are o singur component conex. Un graf as a a a a orientat este tare-conex dac i numai dac are o singur component tare-conex. Numrul de a s a a a a a componente tare-conexe ale unui graf orientat este mai mare sau egal dect numrul de componente a a conexe ale acelui graf, deoarece orice component tare-conex este inclus a a a ntr-o component conex a a (conform denitiei anterioare i Observatiei 1.4.4). s Observatia 1.4.7. Orice nod izolat x genereaz o component conex i o component tare-conex, a a as a a ambele avnd forma G[{x}] = ({x}, ). a Propozitia 1.4.1. a) Fie G[V1 ], . . . , G[Vk ] componentele conexe (diferite) ale unui graf G = (V, E). a Atunci {V1 , . . . , Vk } este o partitie a multimii V (adic Vi = i, Vi Vj = i = j, V1 Vk = V ). b) Fie G[V1 ], . . . , G[Vr ] componentele tare-conexe (diferite) ale unui graf orientat G = (V, E). Atunci {V1 , . . . , Vr } este de asemenea o partitie a multimii V .

TEMA 1. GRAFURI

10

Exemplul 1.4.3. Componentele conexe ale grafului neorientat din Exemplul 1.1.1 sunt generate de submultimile de noduri V1 = {1, 2, 4, 5} i V2 = {3, 6}, deci acel graf are 2 componente conexe. s Componentele tare-conexe ale grafului orientat din Exemplul 1.1.2 sunt generate de submultimile de s noduri V1 = {1, 2, 3}, V2 = {4} i V3 = {5}, deci acel graf are 3 componente tare-conexe. Observatia 1.4.8. Submultimile de muchii sau arce ale componentelor conexe ale unui graf formeaz de a asemenea o partitie a multimii de muchii sau arce a grafului (deoarece pentru orice muchie e = [x, y] sau arc e = (x, y) nodurile x i y se a s a ntr-o aceeai component conex i aceast component s a as a a va contine i pe e). Armatia nu mai este valabil pentru componentele tare-conexe. De exemplu, s a pentru graful din Exemplul 1.1.2 arcul (5, 4) nu apartine nici-unei componente tare-conexe.

1.5

Algoritmul Roy-Warshall

Denitia 1.5.1. Fie G = (V, E) un graf (neorientat sau orientat), unde V = {v1 , . . . , vn }. Ma a tricea drumurilor asociat grafului G este matricea D = (dij )i,j=1,n denit prin a dij = 1, dac = (vi , . . . , vj ) drum cu l() > 0, a 0, caz contrar, n

unde l() reprezint lungimea drumului . a Exemplul 1.5.1. Matricea drumurilor asociat a 1 1 0 D= 1 1 0 grafului neorientat din Exemplul 1.1.1 este 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1 , 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1 din Exemplul 1.1.2 este 1 1 1 1 1 1 1 1 1 . 0 0 0 0 1 0

iar matricea drumurilor asociat grafului orientat a 1 1 1 1 D= 1 1 0 0 0 0

Observatia 1.5.1. Evident, orice graf neorientat are matricea drumurilor simetric. a Observatia 1.5.2. Conform Observatiei 1.4.5, pentru i = j putem nlocui termenul de drum cu drum elementar denitia matricei drumurilor. n Urmtorul algoritm determin matricea drumurilor unui graf pornind de la matricea de adiacent. a a a s Algoritmul 1.5.1 (Roy-Warshall). Fie G = (V, E) un graf simplu cu V = {v1 , . . . , vn } i e A = a a a (aij )i,j=1,n matricea sa de adiacent (avnd toate elementele 0 sau 1). Se calculeaz matricele D(k) = (dij )i,j=1,n , k {0, 1, . . . , n}, denite prin D(0) = A,
(k) dij (k)

(1.5.1)
(k1) (k1) dik dkj ,

(k1) dij

k, i, j {1, . . . , n},

(1.5.2)

unde 0 0 = 0, 0 1 = 1 0 = 1 1 = 1 (operatia de disjunctie, sau).

TEMA 1. GRAFURI

11

Teorema 1.5.1 (de corectitudine a Algoritmului Roy-Warshall). In contextul Algoritmului RoyWarshall, ultima matrice calculat este chiar matricea drumurilor asociat grafului G, adic a a a D(n) = D. Demonstratie. Se arat prin inductie dup k {0, 1, . . . , n} c pentru orice i, j {1, . . . , n} avem a a a dij =
(k)

1, dac = (vi , . . . , vj ) drum cu l() > 0 i I() {v1 , . . . , vk }, a s 0, caz contrar, n

(1.5.3)

unde l() reprezint lungimea drumului , I() reprezint multimea nodurilor intermediare ale drua a mului , iar {v1 , . . . , vk } reprezint multimea {vi |, 1 i k}, deci pentru k = 0 aceast multime a a este . Observatia 1.5.3. Pentru n xat, Algoritmul Roy-Warshall necesit 2n3 operatii (cte o operatie i a a s pentru ecare (k, i, j) {1, . . . , n} {1, . . . , n} {1, . . . , n}), deci acest algoritm are complexitatea a O(n3 ). Reamintim notatia utilizat, pentru orice functie f : N N, . O(f ) = {g|g : N N, r > 0, n0 N a. g(n) rf (n) n n0 }. Observatia 1.5.4. Algoritmul Roy-Warshall rmne evident valabil i pentru grafuri nesimple, cu a a s modicarea dij =
(0)

1, dac aij > 0, a i, j {1, . . . , n}. 0, dac aij = 0, a

Exemplul 1.5.2. Pentru graful din Exemplul 1.1.2, prin aplicarea Algoritmului Roy-Warshall obtinem matricele: 0 1 0 0 0 0 0 1 1 1 (0) D = A = 1 1 0 0 0 (matricea de adiacent); a 0 0 0 0 0 0 0 0 1 0 D
(1)

0 0 1 0 0
(1)

1 0 1 0 0

0 1 0 0 0

0 1 0 0 1

0 1 0 0 0

(2) ; D =

0 0 1 0 0

1 0 1 0 0

1 1 1 0 0

1 1 1 0 1

1 1 1 0 0

(deoarece, de exemplu, d13 = d13 1 1 D(3) = 1 0 0 D


(5)

(2)

d12 d23 = 0 1 1 = 0 1 = 1); 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; D(4) = 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0

(1) (1)

1 1 1 0 1

1 1 1 0 0

1 1 1 0 0

= D (matricea drumurilor).

TEMA 1. GRAFURI

12

Observatia 1.5.5. Conform ecuatiilor (1.5.3), Algoritmul Roy-Warshall este un algoritm specic metodei programrii dinamice. a (k) (k1) (k) (k1) Conform ecuatiilor (1.5.2) i denitiei operatiei avem dik = dik s i dkj = dkj , k, i, j s {1, . . . , n}, deci pentru implementarea algoritmului putem utiliza o singur matrice D. Astfel obtinem a urmtoarea descriere pseudocod a algoritmului a n Roy Warshall :
{ pentru i = 1, n pentru j = 1, n dij aij ;//initializare pentru k = 1, n pentru i = 1, n pentru j = 1, n dij dij dik dkj ;

},

iar pentru grafuri oarecare (simple sau nesimple) initializarea are forma
pentru i = 1, n pentru j = 1, n dac (aij > 0) dij 1; a altfel dij 0.

Observatia 1.5.6. Dac G = (V, E) este un graf neorientat i V = {1, . . . , n}, atunci pentru orice nod a s x V componenta conex a nodului x este (indus de) multimea a a {x} {y|y V \ {x}, dxy = 1}. Astfel Algoritmul Roy-Warshall poate utilizat pentru determinarea componentelor conexe i s pentru vericarea conexitii grafului. at Observatia 1.5.7. Dac G = (V, E) este un graf orientat i V = {1, . . . , n}, atunci pentru orice nod a s x V componenta tare-conex a nodului x este (indus de) multimea a a {x} {y|y V \ {x}, dxy = dyx = 1}, deci Algoritmul Roy-Warshall poate utilizat pentru determinarea componentelor tare-conexe i s pentru vericarea tare-conexitii grafului. at

Tema 2 Distante i drumuri minime s


Problema determinrii distantelor i drumurilor minime a s ntre nodurile unui graf ponderat apare n continuare vom prezenta un algoritm clasic pentru rezolvarea acestei numeroase aplicatii practice. In probleme.

2.1

Expunerea problemei

Denitia 2.1.1. Un graf ponderat este o pereche (G, c), unde G = (V, E) este un graf iar c : E R este o functie numit pondere (cost). Pentru orice e E, c(e) se numete ponderea (costul) a s muchiei sau arcului e. Denitia 2.1.2. Fie (G, c) un graf ponderat, unde G = (V, E), V = {v1 , . . . , vn } iar c : E R+ . a) Dac = (x0 , e1 , x1 , . . . , xk1 , ek , xk ) este un drum al grafului G, unde x0 , x1 , . . . , xk V , a e1 , . . . , ek E, k N, atunci costul (ponderea) lui este a 0, dac k = 0, k c() = c(ei ), dac k 1 a
i=1

(adic suma costurilor arcelor sau muchiilor sale). a b) Fie x, y V . Un drum = (x, . . . , y) graful G cu proprietatea c n a c( ) = min{c()| este drum de la x la y G} n se numete drum minim (drum de cost minim, drum de pondere minim) de la x la s a s a y graful ponderat (G, c). Costul c( ) al acestui drum minim se numete distanta minim n de la x la y graful (G, c). n Observatia 2.1.1. Eliminnd eventualele circuite C1 , . . . , Cp dintr-un drum de la nodul x la nodul a y obtinem un drum elementar de la x la y cu proprietatea c c( ) = c() a
p

s Dac drumul este minim atunci i drumul elementar este minim i c(e) = 0 pentru orice a s a muchie sau arc e al circuitelor C1 , . . . , Cp . Deci existenta unui drum minim de la x la y implic existenta unui drum minim elementar de la x la y. Astfel distanta minim de la x la y poate a considerat ca ind costul minim al unui drum elementar de la x la y. Mai mult, dac functia cost a a c este strict pozitiv, atunci orice drum minim este elementar. a Observatia 2.1.2. Multimea drumurilor elementare ind evident nit, avem echivalenta: exist dru a a muri minime de la x la y dac i numai dac exist drumuri de la x la y. as a a 13

k=1

c(Ck ) c().

TEMA 2. DISTANTE SI DRUMURI MINIME

14

Observatia 2.1.3. Distanta minim de la un nod x la el si este egal cu zero, drumul minim a nsu a elementar de la x la x ind drumul de lungime zero, = (x). Observatia 2.1.4. Dac = (x0 , x1 , . . . , xk ) este un drum minim de la x0 la xk , atunci orice subdrum a a = (xi , xi+1 , . . . , xj ) (0 i j k) al su este un drum minim de la xi la xj (principiul optimalitii al lui Bellman). Armatia poate justicat uor prin reducere la absurd. at a s Exemplul 2.1.1. Fie graful ponderat (G, c) reprezentat Figura 2.1.1. n

1 5 5 15 5 5 5 5 10 4

10 3 5

2
Figura 2.1.1: Drumurile elementare de la nodul 1 la nodul 5 sunt 1 = (1, 3, 5), avnd costul c(1 ) = 10+5 = 15, a a 2 = (1, 4, 5), avnd costul c(2 ) = 5 + 5 = 10, deci 2 este un drum minim de la 1 la 5. Astfel distanta minim de la nodul 1 la nodul 5 este c(2 ) = 10. a Denitia 2.1.3. Fie (G, c) un graf ponderat, unde G = (V, E), V = {v1 , . . . , vn }, c : E R+ . a) Matricea distantelor (costurilor) directe asociat grafului (G, c) este matricea C = (cij )i,j=1,n a denit prin a a 0, dac i = j, a s min{c(e)|e = (vi , vj ) E}, dac i = j i (vi , vj ) E, cij = , dac i = j i (vi , vj ) E a s a (pentru grafuri neorientate (vi , vj ) desemnnd de fapt muchia [vi , vj ]). b) Matricea distantelor (costurilor) minime asociat grafului (G, c) este matricea C = a a (cij )i,j=1,n denit prin c( ), = drum minim de la vi la vj , dac = (vi , . . . , vj ) drum n G, a cij = , caz contrar. n Observatia 2.1.5. Evident, pentru orice graf neorientat att matricea distantelor directe ct i ma a a s tricea distantelor minime sunt matrice simetrice. Observatia 2.1.6. Conform Observatiei 2.1.1, putem s a nlocuim termenul de drum cu cel de drum elementar denitia anterioar. n a Conform Observatiei 2.1.2, punctul b) din denitia anterioar este o extindere a denitiei distantei a minime de la punctul b) al Denitiei 2.1.2. Conform Observatiei 2.1.3, cii = 0 i {1, . . . , n}.

TEMA 2. DISTANTE SI DRUMURI MINIME Exemplul 2.1.2. Matricele distantelor sunt 0 15 10 0 C= 5 0 10 5 5

15

directe, respectiv minime asociate grafului din Exemplul 2.1.1 5 0 15 10 5 10 0 5 , C = 10 5 0 15 5 . 10 10 20 0 5 0 5 0 5 5 15 10 0

2.2

Algoritmul Roy-Floyd

Vom expune un algoritm pentru determinarea distantelor minime i a drumurilor minime s ntre orice dou noduri ale grafului ponderat dat. Acest algoritm este asemntor cu Algoritmul Roy-Warshall a a a pentru determinarea matricei drumurilor. Algoritmul 2.2.1 (Roy-Floyd). Fie (G, c) un graf ponderat, G = (V, E), V = {v1 , v2 , . . . , vn }, a a c : E R+ . Fie C = (cij )i,j=1,n matricea distantelor directe asociat grafului (G, c). Se calculeaz matricele C (k) = (cij )i,j=1,n , k {0, 1, . . . , n} denite prin C (0) = C,
(k) cij (k)

(2.2.1) +
(k1) ckj },

(k1) (k1) min{cij , cik

k, i, j {1, . . . , n}.

(2.2.2)

Teorema 2.2.1 (de corectitudine a Algoritmului Roy-Floyd). In contextul Algoritmului Roy-Floyd, ultima matrice calculat este chiar matricea distantelor minime asociat grafului (G, c), adic a a a C (n) = C . Demonstratie. Se arat prin inductie dup k {0, 1, . . . , n} c pentru orice i, j {1, . . . , n} avem a a a a min{c()| = (vi , . . . , vj ), I() {v1 , . . . , vk }}, dac (k) = (vi , . . . , vj ) drum cu I() {v1 , . . . , vk }, cij = (2.2.3) , caz contrar, n unde I() reprezint multimea nodurilor intermediare ale drumului i {v1 , . . . , vk } reprezint a s a a multimea {vi |1 i k}, deci pentru k = 0 aceast multime este . Observatia 2.2.1. Algoritmul Roy-Floyd are complexitatea O(n3 ) (deoarece necesit cte o adunare a a i o comparatie pentru ecare triplet (k, i, j), cu k, i, j {1, . . . , n}). s Exemplul 2.2.1. Pentru graful din Exemplul 2.1.1, prin aplicarea Algoritmului Roy-Floyd obtinem matricele: 0 15 10 5 0 15 10 5 0 0 (0) (1) C = C = 5 0 5 ; C = 5 0 5 10 0 5 10 0 5 5 5 0 5 5 15 10 0

TEMA 2. DISTANTE SI DRUMURI MINIME (deoarece, de exemplu, c53 = min{c53 , c51 + c13 } = min{, 5 + 10} = 15); 0 15 10 5 0 15 10 5 15 0 0 C (2) = 5 0 5 ; C (3) = 5 0 5 ; 10 0 5 10 0 5 5 5 15 10 0 5 5 15 10 0 0 15 10 5 10 0 15 10 5 10 0 0 C (4) = 5 0 5 ; C (5) = 10 5 0 15 5 = C 10 0 5 10 10 20 0 5 5 5 15 10 0 5 5 15 10 0
(1) (0) (0) (0)

16

(matricea distantelor minime). Observatia 2.2.2. Conform ecuatiilor (2.2.3), Algoritmul Roy-Floyd este un algoritm specic metodei programrii dinamice. a (k) (k1) (k) (k1) i ckj = ckj , k, i, j {1, . . . , n}, deci pentru imples Conform ecuatiilor (2.2.2) avem cik = cik mentarea algoritmului putem utiliza o singur matrice C (k) . Astfel obtinem urmtoarea descriere a a n pseudocod a algoritmului. Roy Floyd : { pentru i = 1, n pentru j = 1, n cij cij ;//initializare pentru k = 1, n pentru i = 1, n pentru j = 1, n dac (cik + ckj < cij ) cij cik + ckj ; a }. Considernd c functia cost c este strict pozitiv, pentru determinarea tuturor drumurilor minime a a a (elementare) dintre dou noduri distincte x, y putem utiliza echivalenta: a (x, z, . . . , y) = drum minim z = x, cxz + czy = cxy ,

unde multimea nodurilor este multimea standard V = {1, . . . , n}. Astfel putem determina toate nodurile z ce sunt succesori directi ai nodului x pe drumuri minime de la x la y, i continund acest procedeu pentru subdrumurile minime dintre z i y se gsesc toate s a s a drumurile minime elementare de la x la y.

Tema 3 Arbori
3.1 Teorema de caracterizare a arborilor
a) Un arbore este un graf conex i fr cicluri. s a a

Denitia 3.1.1.

b) Un arbore partial al unui graf G = (V, E) este un graf partial al lui G ce este arbore (adic a un arbore T = (V, F ) cu F E). Observatia 3.1.1. Arborii sunt grafuri simple (deoarece orice bucl este un ciclu i orice dou muchii a s a sau arce multiple formeaz un ciclu). a Exemplul 3.1.1. Graful orientat din Exemplul 1.1.2 nu este arbore (deoarece are cicluri). Doi arbori partiali ai si sunt reprezentati Figura 3.1.2. a n
1

e1

e2
4

e4
5

e5
6

Figura 3.1.1: 1 5

2 5

Figura 3.1.2:

Teorema 3.1.1 (de caracterizare a arborilor). Fie G = (V, E) un graf cu n noduri. Urmtoarele a armatii sunt echivalente: 1) G este un arbore (adic este conex i fr cicluri); a s a a 2) G este fr cicluri i are m = n 1 muchii; a a s 3) G este conex i are m = n 1 muchii; s

17

TEMA 3. ARBORI

18

4) G este fr cicluri i maximal cu aceast proprietate, adic dac se adaug o muchie a a s a a a a ntre oricare dou noduri graful obtinut contine cicluri; a 5) G este conex i minimal cu aceast proprietate, adic dac se elimin o muchie oarecare graful s a a a a obtinut devine neconex; 6) ntre oricare dou noduri ale lui G exist un unic lant elementar. a a

3.2

Arbori partiali de cost minim

Denitia 3.2.1. Fie (G, c) un graf ponderat, G = (V, E). a) Dac H = (U, F ) este un subgraf al lui G, atunci costul (ponderea) lui H este a c(H) =
eF

c(e)

(adic suma costurilor muchiilor sau arcelor sale). a a b) Un arbore partial T = (V, F ) al lui G cu proprietatea c c(T ) = min{c(T )|T = arbore partial al lui G} se numete arbore partial de cost minim (APM) al grafului ponderat (G, c). s Observatia 3.2.1. Un graf ponderat are arbori partiali de cost minim dac i numai dac este conex. as a Problema determinrii arborilor partiali de cost minim are numeroase aplicatii practice. Prezentm a a continuare un algoritm fundamental pentru rezolvarea acestei probleme. n Algoritmul 3.2.1 (Prim). Fie (G, c) un graf ponderat conex cu G = (V, E), V = {v1 , . . . , vn }. Algoritmul are n pai. s La pasul 0 se selecteaz un nod arbitrar x0 V . a La pasul i, i = 1, n 1, se selecteaz o muchie ei = [xj , xi ] E de cost minim cu proprietatea a s a c are ca extremiti un nod xj V selectat la un pas anterior i cellalt nod xi V neselectat a at la paii anteriori; se selecteaz i nodul xi . s as Exemplul 3.2.1. Fie graful ponderat (G, c) reprezentat Figura 3.2.1, unde costul ecrei muchii n a este scris lng segmentul corespunztor acesteia. a a a
1
30 60 70 110

50

3
20

100

5
10

70 40

6
80

90 150 120

100

30

130

10

Figura 3.2.1: Aplicarea Algoritmului Prim pentru acest graf este evidentiat urmtorul tabel: a n a

TEMA 3. ARBORI Pas 0 1 2 3 4 5 6 7 8 9 Muchia selectat Costul ei a [1, 2] 30 [2, 3] 50 [3, 6] 20 [2, 5] 60 [5, 8] 10 [8, 9] 30 [6, 4] 90 [8, 7] 100 [4, 10] 120 Nodul selectat 1 2 3 6 5 8 9 4 7 10

19

Arborele partial de cost minim obtinut este reprezentat Figura 3.2.2. Costul acestui APM este de n 510.
1
30 60

50

3
20 90

6 5
10

120

100

30

10

Figura 3.2.2:

Observatia 3.2.2. Algoritmul Prim este specic metodei de programare Greedy. i are complex s itatea O(n2 ). Observatia 3.2.3. Pentru implementarea Algoritmului Prim, memorm graful ponderat conex i a s simplu (G, c), unde G = (V, E), V = {1, . . . , n}, E = {e1 , . . . , em }, cu ajutorul unei matrice a C = (cij )i,j=1,n a costurilor (directe) avnd semnicatia a c([i, j]), dac [i, j] E, 0, dac i = j, a cij = (3.2.1) , rest, n i, j {1, . . . , n}. Pentru grafuri neorientate, matricea C este simetric. cazul grafurilor nesimple a In putem lua cij = min{c(e)|e = [i, j] E}. Utilizm un vector S cu semnicatia a S[i] = 1, dac nodul i a fost selectat, a 0, caz contrar n

i doi vectori t i T AT A avnd semnicatia s s a t[i] = costul minim al unei muchii [i, j] de la nodul i la un nod selectat j, T AT A[i] = nodul j ce atinge minimul t[i], i {1, . . . , n}. n

TEMA 3. ARBORI Descrierea pseudocod a algoritmului are forma n Prim :


{ S[1] 1;//selectm nodul 1 a cost 0;//costul APM pentru i = 2, n { S[i] 0; t[i] ci1 ; T AT A[i] 1; } a a s pentru l = 1, n 1 //cutm nodul y i muchia [x, y] //ce vor selectate la pasul l { min ; pentru i = 2, n { dac (S[i] = 0) i (t[i] < min) a s { min t[i]; y i; } } S[y] 1;// selectm nodul y a x T AT A[y];// i muchia [x, y] s cost cost + cxy ; a s pentru i = 2, n// actualizm vectorii t i T AT A { dac (S[i] = 0) i (t[i] > ciy ) a s { t[i] ciy ; T AT A[i] y; } } }

20

}.

Vous aimerez peut-être aussi