P. 1
Introducere grafuri

Introducere grafuri

|Views: 286|Likes:
Published by Cosmin Borcan

More info:

Categories:Types, School Work
Published by: Cosmin Borcan on Jun 12, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/28/2014

pdf

text

original

ALGORITMICA GRAFURILOR.

˘ NOTIUNI DE BAZA ¸

2009

Tematica
1 Grafuri 1.1 Definitii 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 ¸

1

Bibliografie
[1] Gh. Barbu, I. V˘duva, M. Bolo¸teanu, Bazele informaticii, Editura Tehnic˘, Bucure¸ti, 1997. a s a s [2] Gh. Barbu, V. P˘un, Calculatoare personale ¸i programare ˆ C/C++, Editura Didactic˘ ¸i Pedagogic˘, Bua s ın a s a cure¸ti, 2005. s [3] C. B˘lc˘u, Combinatoric˘ ¸i teoria grafurilor, Editura Universit˘¸ii din Pite¸ti, Pite¸ti, 2007. a a as at s s [4] E. Ciurea, Algoritmi. Introducere ˆ algoritmica grafurilor, Editura Tehnic˘, Bucure¸ti, 2001. ın a s [5] E. Ciurea, L. Ciupal˘, Algoritmi. Introducere ˆ algoritmica fluxurilor ˆn retele, Editura Matrix Rom, Bucure¸ti, a ın ı ¸ s 2006. [6] C. Croitoru, Tehnici de baz˘ ˆ optimizarea combinatorie, Editura Universit˘¸ii ”Al. I. Cuza”, Ia¸i, 1992. a ın at s [7] L. Livovschi, H. Georgescu, Sinteza ¸i analiza algoritmilor, Editura Stiintific˘ ¸i Enciclopedic˘, Bucure¸ti, 1986. s ¸ ¸ as a s [8] D.R. Popescu, Combinatoric˘ ¸i teoria grafurilor, Societatea de Stiinte Matematice din Romˆnia, Bucure¸ti, a s ¸ ¸ a s 2005. [9] C.P. Popovici, H. Georgescu, L. State, Bazele informaticii. Vol. I ¸i II, Editura Universit˘¸ii din Bucure¸ti, s at s Bucure¸ti, 1990-1991. s [10] L. State, Elemente de logic˘ matematic˘ ¸i demonstrarea automat˘ a teoremelor, Tipografia Universit˘¸ii din a a s a at Bucure¸ti, Bucure¸ti, 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, Tipografia Universit˘¸ii din Bucure¸ti, Bucure¸ti, 1978. as at s s [13] I. Tomescu, Probleme de combinatoric˘ ¸i teoria grafurilor, Editura Didactic˘ ¸i Pedagogic˘, Bucure¸ti, 1981. as as a s [14] I. Tomescu, Data structures, Editura Universit˘¸ii din Bucure¸ti, Bucure¸ti, 2004. at s s

2

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, atˆt din punct de vedere al rezultatelor teoretice cˆt a a a ¸i al algoritmicii, grafurile impunˆndu-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

Definitii generale ¸

Definitia 1.1.1. Un graf neorientat (graf, pseudograf, graf general) este o pereche G = (V, E) ¸ unde: • V este o multime finit˘ ¸i nevid˘, elementele sale numindu-se nodurile (vˆrfurile, punctele) ¸ as a a grafului G; • E este o colectie (multime multipl˘, multiset) finit˘ de perechi neordonate, posibil egale, de ¸ ¸ a a noduri, elementele sale numindu-se muchiile (leg˘turile 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]. Definitia 1.1.2. Un graf orientat (digraf, pseudodigraf) este o pereche G = (V, E) unde: ¸ • V este o multime finit˘ ¸i nevid˘, elementele sale numindu-se vˆrfurile (nodurile, punctele) ¸ as a a grafului G; • E este o colectie (multime multipl˘, multiset) finit˘ de perechi ordonate de vˆrfuri, elementele ¸ ¸ a a a sale numindu-se arcele (leg˘turile 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. Definitia 1.1.3. Num˘rul de noduri ale unui graf (neorientat sau orientat) se nume¸te ordinul ¸ a s grafului, iar num˘rul de muchii sau arce se nume¸te dimensiunea grafului. a s Definitia 1.1.4. a) Dac˘ e = [x, y] este o muchie a unui graf neorientat, atunci nodurile x ¸i y ¸ a s se numesc extremit˘¸ile 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 nume¸te extremitatea a s initial˘ iar nodul y se nume¸te extremitatea final˘ 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

4

c) O bucl˘ a unui graf (neorientat sau orientat) este o muchie sau un arc avˆnd extremit˘¸ile 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)). Definitia 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 aflate pe pozitii diferite), atunci acestea a a s ¸ se numesc muchii sau arce multiple. Definitia 1.1.6. Un graf (neorientat sau orientat) f˘r˘ bucle se nume¸te multigraf (neorientat, ¸ a a s respectiv orientat). Definitia 1.1.7. Un graf (neorientat sau orientat) se nume¸te 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 finit˘ ¸i nevid˘ (de elemente numite noduri) iar E ⊆ P2 (V ) este o multime finit˘ (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 finit˘ ¸i nevid˘ (de ¸ as a elemente numite noduri) iar E ⊆ V × V \ {(x, x)|x ∈ V } este o multime finit˘ (de elemente numite ¸ a arce). Definitia 1.1.8. Fie G = (V, E) un graf (orientat sau neorientat). O reprezentare grafic˘ a lui ¸ a G se obtine reprezentˆnd 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 pˆn˘ 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 grafic˘ din Figura 1.1.1. ¸ a a

1

e1 e7 e8 e9

e3
2

3

1

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 avˆnd reprezentarea grafic˘ din Figura 1.1.2. Arcul (3, 1) are extremitatea initial˘ a a ¸ a 3 ¸i extremitatea final˘ 1. s a

TEMA 1. GRAFURI

5

Definitia 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 not˘m 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 Definitia 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 extremit˘¸i ˆ U . ¸ at ın Definitia 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 extremit˘¸i 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

4

5

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 aceea¸i submultime de arce are ¸ s ¸ reprezentarea din Figura 1.1.5.
2 5

1

2

5

3

4

3

4

Figura 1.1.4:

Figura 1.1.5:

1.2

Reprezentarea grafurilor

ˆ continuare descriem cˆteva forme de reprezentare (memorare) a grafurilor ˆ informatic˘. Dintre In a ın a aceste forme, cea mai utilizat˘ este matricea de adiacent˘. a ¸a Definitia 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 definit˘ prin aij = num˘rul 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

6

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 ˆ fiecare coloan˘ extremit˘¸ile unei muchii sau arc, adic˘ T = (tkj ) k = 1, 2 definit˘ 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 nume¸te 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 nume¸te 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, fiind ¸i ¸ s s sinonime cu notiunile de vecin sau adiacent. ¸

TEMA 1. GRAFURI

7

Observatia 1.2.5. Alegerea uneia sau alteia dintre formele de reprezentare a grafurilor descrise mai ¸ sus depinde de eficienta ¸i de u¸urinta implement˘rii 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

Definitia 1.3.1. Fie G = (V, E) un graf ¸i x ∈ V un nod arbitrar fixat. ¸ s a) Dac˘ G este neorientat, atunci gradul lui x, notat dG (x) = d(x), este definit prin a d(x) = a(x) + 2 · b(x), unde a(x) reprezint˘ num˘rul de muchii e ∈ E ce nu sunt bucle ¸i sunt incidente cu x, iar b(x) a a s este num˘rul de bucle e ∈ E ce sunt incidente cu x. a b) Dac˘ G este orientat, atunci: a • gradul de ie¸ire (semigradul exterior) al lui x, notat d+ (x) = d+ (x), reprezint˘ s a G num˘rul 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 num˘rul 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 fie 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.
x∈V

Propozitia 1.3.2. Fie G = (V, E) un graf avˆnd dimensiunea m. Atunci ¸ a ˆ In plus, dac˘ G este orientat atunci a
x∈V

d+ (x) =
x∈V

d− (x) = m.

Definitia 1.3.2. Fie G = (V, E) un graf. Un nod x ∈ V cu dG (x) = 0 se nume¸te nod izolat, iar ¸ s s un nod y ∈ V cu dG (y) = 1 se nume¸te nod terminal.

TEMA 1. GRAFURI

8

1.4

Conexitate

Definitia 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 avˆnd extremit˘¸ile 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 extremit˘¸ile lantului, iar nodurile v2 , . . . , vk se numesc noduri intermediare. Num˘rul k de muchii sau arce (nu neap˘rat distincte) ale a a lantului se nume¸te lungimea lantului. ¸ s ¸ b) Un lant se nume¸te ˆ ¸ s ınchis dac˘ are extremit˘¸ile egale, respectiv deschis ˆ caz contrar. a at ın c) Un lant se nume¸te simplu dac˘ muchiile sau arcele sale sunt diferite dou˘ cˆte dou˘ (con¸ s a a a a siderˆnd diferite ¸i muchiile sau arcele multiple aflate pe pozitii diferite ˆn E). a s ¸ ı d) Un lant deschis se nume¸te elementar dac˘ nodurile sale sunt diferite dou˘ cˆte dou˘. Un ¸ s a a a a lant ˆ ¸ ınchis se nume¸te elementar dac˘ este simplu ¸i, cu exceptia extremit˘¸ilor, nodurile s a s ¸ at sale sunt diferite dou˘ cˆte 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 final˘ 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 final˘ 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 fi decˆt singura muchie sau singurul arc de la vi la vi+1 , ∀ i), deci poate fi 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

9

este un lant (drum) deschis, nesimplu (contine de dou˘ ori e2 ), neelementar (contine de dou˘ ori 1), ¸ ¸ a ¸ a de lungime 5. ˆ acela¸i 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 ¸ ˆ acela¸i 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)). Definitia 1.4.2. a) Un graf (neorientat sau orientat) se nume¸te 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 nume¸te 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, schimbˆnd 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 verific˘ definitia 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˘ ˆ definitia anterioar˘ putem renunta la conditiile ca nodurile x ¸i y s˘ fie 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 avˆnd acelea¸i extremit˘¸i, rezult˘ c˘ ˆ definitia ¸ ¸ 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 (de¸i exist˘ drum de la nodul 1 la nodul 4!). a s a Definitia 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˘. Num˘rul de a s a a a a a componente tare-conexe ale unui graf orientat este mai mare sau egal decˆt num˘rul 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 definitiei 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 avˆnd 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 afl˘ ˆ s a ıntr-o aceea¸i component˘ conex˘ ¸i aceast˘ component˘ s a as a a va contine ¸i pe e). Afirmatia 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

Definitia 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 definit˘ 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” ˆ definitia matricei drumurilor. ın ¸ Urm˘torul 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 fie A = ¸a a a (aij )i,j=1,n matricea sa de adiacent˘ (avˆnd toate elementele 0 sau 1). Se calculeaz˘ matricele D(k) = (dij )i,j=1,n , k ∈ {0, 1, . . . , n}, definite prin D(0) = A,
(k) dij (k)

(1.5.1) ∨
(k−1) (k−1) dik dkj ,

=

(k−1) 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 fixat, Algoritmul Roy-Warshall necesit˘ 2n3 operatii (cˆte o operatie · ¸i ¸ a ¸ a ¸ s ∨ pentru fiecare (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 r˘mˆne evident valabil ¸i pentru grafuri nesimple, cu ¸ a a s modificarea 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 specific ¸ ¸ metodei program˘rii dinamice. a (k) (k−1) (k) (k−1) Conform ecuatiilor (1.5.2) ¸i definitiei 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 ¸ urm˘toarea 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 fi utilizat pentru determinarea componentelor conexe ¸i s pentru verificarea conexit˘¸ii 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 fi utilizat pentru determinarea componentelor tare-conexe ¸i s pentru verificarea tare-conexit˘¸ii grafului. at

Tema 2 Distante ¸i drumuri minime ¸ s
Problema determin˘rii 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

Definitia 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 nume¸te ponderea (costul) ¸ a s muchiei sau arcului e. Definitia 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 , . . . , xk−1 , 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 nume¸te 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 nume¸te distanta minim˘ ın de la x la y ˆ graful (G, c). ın Observatia 2.1.1. Eliminˆnd 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 fi ¸ ¸ a considerat˘ ca fiind 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 fiind evident finit˘, 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 fiind 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 s˘u este un drum minim de la xi la xj (principiul optimalit˘¸ii al lui Bellman). Afirmatia poate fi justificat˘ u¸or 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), avˆnd costul c(µ1 ) = 10+5 = 15, a a µ2 = (1, 4, 5), avˆnd 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 Definitia 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 definit˘ 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 ) desemnˆnd de fapt muchia [vi , vj ]). b) Matricea distantelor (costurilor) minime asociat˘ grafului (G, c) este matricea C = ¸ a a (cij )i,j=1,n definit˘ 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 atˆt matricea distantelor directe cˆt ¸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” ˆ definitia anterioar˘. ın ¸ a Conform Observatiei 2.1.2, punctul b) din definitia anterioar˘ este o extindere a definitiei distantei ¸ ¸ a ¸ ¸ minime de la punctul b) al Definitiei 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 asem˘n˘tor 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} definite prin C (0) = C,
(k) cij (k)

(2.2.1) +
(k−1) ckj },

=

(k−1) (k−1) 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˘ cˆte o adunare ¸ a a ¸i o comparatie pentru fiecare 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 specific metodei ¸ ¸ program˘rii dinamice. a (k) (k−1) (k) (k−1) ¸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 urm˘toarea 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 }. Considerˆnd 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 continuˆnd acest procedeu pentru subdrumurile minime dintre z ¸i y se g˘sesc 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 f˘r˘ cicluri. s a a

Definitia 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 s˘i sunt reprezentati ˆ Figura 3.1.2. ¸ a ¸ ın
1

e1

2

3

e2
4

e4
5

e5
6

1

2

Figura 3.1.1: 1 5

2 5

3

4

3

4

Figura 3.1.2:

Teorema 3.1.1 (de caracterizare a arborilor). Fie G = (V, E) un graf cu n noduri. Urm˘toarele a afirmatii sunt echivalente: ¸ 1) G este un arbore (adic˘ este conex ¸i f˘r˘ cicluri); a s a a 2) G este f˘r˘ 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 f˘r˘ 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 ¸

Definitia 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) =
e∈F

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 nume¸te 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 determin˘rii arborilor partiali de cost minim are numeroase aplicatii practice. Prezent˘m 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 pa¸i. 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 extremit˘¸i un nod xj ∈ V selectat la un pas anterior ¸i cel˘lalt nod xi ∈ V neselectat a at la pa¸ii anteriori; se selecteaz˘ ¸i nodul xi . s as Exemplul 3.2.1. Fie graful ponderat (G, c) reprezentat ˆ Figura 3.2.1, unde costul fiec˘rei muchii ın a este scris lˆng˘ segmentul corespunz˘tor acesteia. a a a
1
30 60 70 110

2

50

3
20

100

4

5
10

70 40

6
80

90 150 120

7

100

8

30

9

130

10

Figura 3.2.1: Aplicarea Algoritmului Prim pentru acest graf este evidentiat˘ ˆ urm˘torul 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

2

50

3
20 90

4

6 5
10

120

7

100

8

30

9

10

Figura 3.2.2:

Observatia 3.2.2. Algoritmul Prim este specific metodei de programare Greedy. ¸i are complex¸ s itatea O(n2 ). Observatia 3.2.3. Pentru implementarea Algoritmului Prim, memor˘m 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) avˆnd semnificatia ⎧ 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}. Utiliz˘m un vector S cu semnificatia a ¸ S[i] = 1, dac˘ nodul i a fost selectat, a 0, ˆ caz contrar ın

¸i doi vectori t ¸i T AT A avˆnd semnificatia 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;//select˘m 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 //c˘ut˘m nodul y ¸i muchia [x, y] //ce vor fi 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;// select˘m nodul y a x ← T AT A[y];// ¸i muchia [x, y] s cost ← cost + cxy ; a s pentru i = 2, n// actualiz˘m 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

}.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->