Teoria Grafurilor. Introducere noiembrie 2020
Teoria Grafurilor Cuprins Graf = structură de date pentru modelarea relaţiilor binare dintre componentele unui sistem. G = (V, E) unde V : mulţime de noduri = componentele sistemului E : listă de muchii = legături/relaţii dintre noduri Tipuri de grafuri: Neorientate: b a c d e V = {a, b, c, d, e} E = [a b, b c, b c, e c, e e, d e, d a, c a] b c V = {a, b, c, d, e} e Orientate: E = [a b, b c, c b, e c, a d e e, e d, d a, c a] Muchiile orientate se numesc si arce (singular: arc). Observaţie: Dacă a b atunci: În grafuri neorientate: a b = b a (orientarea nu contează) În grafuri orientate: a b b a (orientarea contează!)
Vocabularul teoriei grafurilor Terminologie Orice muchie este incidentă la 2 noduri (capetele muchiei). Un arc a b are sursa a şi destinaţia b. Muchiile de forma a a sau a a se numesc bucle. Apariţiile multiple ale unei muchii în E se numesc muchii paralele. Exemplu: b c în E = [a b, b c, b c, e c, e e, d e, d a, c a] Un graf orientat se numeşte şi digraf (engl. directed graph). Un pseudograf este un graf cu bucle şi muchii paralele. Un multigraf este un graf fără bucle şi cu muchii paralele. Un graf simplu este un graf fără bucle şi fără muchii paralele. dacă G = (V, E) este graf simplu atunci E V V şi scriem a b în loc de a, b E. cel mai adesea, vom studia grafuri simple.
Grafuri ponderate Graf ponderat (G, w) unde G = (V, E) este un graf w : E R unde w(e) este ponderea sau greutatea muchiei e E. Dacă G este graf simplu iar e = x y sau e = x y, atunci scriem w(x, y) în loc de w(e). Exemplu b a 3 4 e 5 1 2 9 1 c d 7 12 f w(a, b) = 3, w(a, e) = 4, w(b, c) = 2 w(c, b) = 9, w(c, f ) = 12, w(c, e) = 1 w(e, b) = 5, w(e, d) = 1, w(d, f ) = 7
Vocabularul teoriei grafurilor Ordinul unui graf = numărul de noduri Mărimea unui graf = numărul de muchii Mulţimea de vecini a unui nod x V : V (x) = {y x y E} dacă graful este neorientat V (x) = {y x y E} dacă graful este orientat Dacă S V atunci V (S) = x S V (x). V [x] = V (x) {x} x este nod terminal dacă are un singur vecin: V (x) = 1 x este nod izolat dacă nu are vecini: V (x) = 0 Dacă G este graf neorientat: gradul lui x este deg(x) = {y x y E} + {y y x E} secvenţa de grade a lui G este lista gradelor nodurilor din G, în ordine descrescătoare. Dacă G este digraf: gradul interior al lui x este deg (x) = {y y x E} gradul exterior al lui x este deg + (x) = {y x y E}
Vocabularul teoriei grafurilor Exemplu 1 5 6 3 Mărimea: 6 2 4 Ordinul: 6 v V (v) V [v] deg(v) 1 {1, 2, 5} {1, 2, 5} 4 2 {1, 3, 4} {1, 2, 3, 4} 3 3 {2, 4} {2, 3, 4} 2 4 {2, 3} {2, 3, 4} 2 5 {1} {1, 5} 1 6 {6} 0 Secvenţa de grade este [4, 3, 2, 2, 1, 0]. Nodul 5 este terminal. Nodul 6 este izolat.
Vocabularul teoriei grafurilor Exemplu 1 5 6 3 Mărimea: 6 2 4 Ordinul: 7 v V (v) V [v] deg (v) deg + (v) deg(v) 1 {1, 2, 5} {1, 2, 5} 2 2 4 2 {1, 3, 4, 5} {1, 2, 3, 4, 5} 3 2 5 3 {2, 4} {2, 3, 4} 1 1 2 4 {2, 3} {2, 3, 4} 0 1 1 5 {1, 3} {1, 3, 5} 1 1 2 6 {6} 0 0 0 Secvenţa de grade este lista [5, 4, 2, 2, 1, 0].
Grafuri izomorfe Grafurile simple G = (V, E) şi H = (V, E ) sunt izomorfe, şi scriem G H, dacă există o funcţie bijectivă f : V V astfel încât x y E dacă şi numai dacă f (x) f (y) E x y E dacă şi numai dacă f (x) f (y) E Remarcă. Două grafuri sunt izomorfe dacă putem redenumi nodurile primului graf cu numele nodurilor celui de-al doilea graf în aşa fel încât muchiile dintre noduri să rămână aceleaşi. De exemplu G H unde G: 1 6 8 5 2 4 H: a g c b n h 3 7 i d
Vocabularul teoriei grafurilor Conectivitate (1) Dacă G = (V, E) este graf neorientat atunci Un drum sau cale de la x la y în G este o listă de noduri π = [x 1, x 2,..., x n ] astfel încât n 2, x 1 = x, x n = y şi x i x i+1 E pentru 1 i < n. Lungimea drumului este n 1. Dacă G = (V, E) este graf orientat atunci Un drum sau cale de la x la y în G este o listă de noduri π = [x 1, x 2,..., x n ] astfel încât n 2, x 1 = x, x n = y şi x i x i+1 E pentru 1 i < n. Lungimea drumului este n 1.
Vocabularul teoriei grafurilor Conectivitate (2) Scriem x y dacă există drum de la x la y, şi x π y dacă π este un drum de la x la y. Un drum este elementar dacă nu conţine de mai multe ori acelaşi nod, hamiltonian dacă este elementar şi conţine toate nodurile grafului. simplu dacă nu conţine de mai multe ori aceeaşi muchie, eulerian dacă este simplu şi conţine toate muchiile grafului. Un ciclu este un drum simplu de la un nod x la x. Un ciclu [x 1,..., x n, x 1 ] este hamiltonian dacă [x 1,..., x n ] este drum eulerian. eulerian dacă este drum eulerian.
Vocabularul teoriei grafurilor Conectivitate 1 3 5 2 4 [5, 1, 2, 3, 4, 2] este un drum simplu dar neelementar de lungime 5. [5, 1, 2, 4] şi [5, 1, 2, 3] sunt drumuri elementare de lungime 3. [2, 1, 5, 2, 3, 4, 2] este un ciclu neelementar de lungime 6. [2, 3, 4, 2] este un ciclu elementar de lungime 3. [1, 2, 5, 1, 4, 3, 2, 4] este un drum eulerian. [2, 5, 1, 4, 3, 2] este un ciclu hamiltonian.
Vocabularul teoriei grafurilor Conectivitate 1 3 5 2 4 [5, 1, 2, 3, 4, 2] este un drum simplu dar neelementar de lungime 5. [5, 1, 2, 4] şi [5, 1, 2, 3] sunt drumuri elementare de lungime 3. [2, 1, 5, 2, 3, 4, 2] este un ciclu neelementar de lungime 6. [2, 3, 4, 2] este un ciclu elementar de lungime 3. [1, 2, 5, 1, 4, 3, 2, 4] este un drum eulerian. [2, 5, 1, 4, 3, 2] este un ciclu hamiltonian. 3 1 2 4 5 are drumul hamiltonian [3, 1, 2, 5, 4] şi ciclul eulerian [5, 4, 5, 1, 3, 1, 2, 5].
Vocabularul teoriei grafurilor Componente conexe Componentele conexe sunt definite pentru grafuri neorientate G = (V, E). Relaţia de conectivitate este o relaţie de echivalenţă clasele de echivalenţă ale lui se numesc componente conexe ale lui G. Exemplu. 1 7 2 3 4 9 5 6 8 are 3 componente conexe: {1, 2, 3, 4, 5}, {6, 8, 9} şi {7}.
Vocabularul teoriei grafurilor Componente tare conexe Componentele tare conexe, sau tari, sunt definite pentru grafuri neorientate G = (V, E). Conectivitatea tare x ct y : x y şi y x este o relaţie de echivalenţă. Clasele de echivalenţă ale lui ct se numesc componente tari ale lui G. G este tare conex dacă are o singură componentă tare, adică dacă oricare două noduri din V sunt conectate tare. Exemplu. 1 7 2 3 4 9 5 6 8 are 3 componente tari: {1, 2, 3, 4, 5}, {6, 8, 9} şi {7}.
Teoreme fundamentale ale Teoriei Grafurilor Teorema 1. Într-un graf, suma gradelor nodurilor este egală cu dublul numărului de muchii. deg(x) = 2 E(G). x V (G) Teorema 2. Orice drum de la x la y conţine un drum elementar de la x la y. Schiţă de demonstraţie:
Clase de grafuri Grafuri complete (K n), grafuri nule (E n) Graful complet K n (n 1) are V = {1, 2,..., n} şi E = {i j 1 i < j n}. K 1 K 2 K 3 K 4 K 5 Graful nul E n (n 1) are V = {1, 2,..., n} şi E =. E 1 E 2 E 3 E 4 E 5
Clase de grafuri Grafuri ciclice (C n), grafuri bipartite complete (K m,n) Graful ciclic C n (n 1) are V = {1, 2,..., n} şi E = {i j 1 i n, j = 1 + (i mod n)}. C 1 C 2 C 3 C 4 C 5 C 6 Pentru m, n > 0, graful bipartit complet K m,n are V = {x i 1 i m} {y j 1 j n} şi E = {x i y j 1 i m, 1 j n}
Clase de grafuri Căi şi arbori Calea P n este graful cu V = {1, 2,..., n} şi E = {i j 1 i < n, j = i + 1}. 1 2 n 1 n Un arbore de ordinul n este un graf simplu conex cu n noduri şi fără cicluri. Mulţimea acestor arbori se notează cu T n. Remarcă. Toţi arborii din T n au n noduri şi n 1 muchii. Exemplu. Arbori din clasa T 5 : G 1 : G 2 : G 3 :
Subgraf, subgraf parţial Fie G = (V, E) un graf şi S V. Subgraful indus de S în G este graful G = (S, E ) unde E = {e E capetele lui e sunt în S}. G este subgraf al lui G dacă G = G[S] pentru un S V. În acest caz, mai spunem şi că G este conţinut în G. G = (V, E ) este subgraf parţial al lui G dacă V V şi E E.
Subgraf, subgraf parţial Fie G = (V, E) un graf şi S V. Subgraful indus de S în G este graful G = (S, E ) unde E = {e E capetele lui e sunt în S}. G este subgraf al lui G dacă G = G[S] pentru un S V. În acest caz, mai spunem şi că G este conţinut în G. G = (V, E ) este subgraf parţial al lui G dacă V V şi E E. Exemplu. Fie G graful Subgraf: u t s Subgraf parţial: v u t u t x y s w v s v z x y x y
Vocabularul teoriei grafurilor Clică, subdiviziune O n-clică (sau doar clică) a unui graf neorientat G este un subgraf al lui G izomorf cu K n. De exemplu: G 2 G 3 G 4 O subdiviziune a unui graf neorientat G este un graf obţinut prin una sau mai multe inserări succesive de noduri noi pe muchiile lui G. De exemplu: este subdiviziune a lui K 2,2. nu este subdiviziune a lui K 2,2.
Operaţii cu grafuri Fie G = (V, E) un graf, x V, S V şi T E. G S este subgraful indus G[V S] G T este subgraful parţial (V, E T ) G \ S este graful (V, E ) obţinut din contracţia nodurilor din S în un singur nod nou x S : V = (V S) {x S } Dacă G este neorientat atunci E ={x y x, y V S şi x y E} {x x S există x y E cu x V S şi y S}. Dacă G este digraf atunci E ={x y x, y V (G) S şi x y E} {x x S există x y E cu x V S şi y S} {x S y există x y E cu x S şi y V S}. G \ e este graful G \ S unde S sunt capetele muchiei e.
Operaţii cu grafuri Exemple G 1 : 3 3 1 2 4 5 4 G 1 {1, 5} 1 7 4 3 9 2 1 7 G 2 : 2 3 4 3 1 7 2 3 4 9 5 6 8 1 2 4 5 G 1 (1 5) 9 3 x {1,2,3,4,5} x {1,5} 2 4 G 1 \ {1, 5} = G 1 (1 5) 7 9 5 6 8 G 2 {2} 5 6 8 G 2 {2 3, 6 3} 6 8 G 2 \{1, 2, 3, 4, 5}
Vocabularul teoriei grafurilor δ(g), (G), α(g), ω(g) Fie G = (V, E) un graf neorientat şi S V. Gradul minim al lui G este δ(g) = min{deg(x) x V } Gradul maxim al lui G este (G) = max{deg(x) x V } Mulţimea de noduri S este stabilă sau independentă dacă nu există nici o muchie între noduri din S. Numărul de independenţă al lui G este α(g) = max{ S S este mulţime independentă în G}. Numărul de clică ω(g) al lui G este ordinul maxim al unei clici din G, adică ω(g) = max{n H este n-clică a lui G}.
Vocabularul teoriei grafurilor Exemple b c y z G 1 : x a G 2 : s d t e 1 5 2 4 3 7 6 δ(g 1 ) = (G 1 ) = 3, α(g 1 ) = 4, ω(g 1 ) = 2. δ(g 2 ) = 2, (G 2 ) = 6, α(g 2 ) = 3, ω(g 2 ) = 4.
Vocabularul teoriei grafurilor Articulaţii şi punţi Fie G = (V, E) un graf neorientat conex. x V (G) este nod de articulaţie (engl. cut vertex) dacă G {x} nu este conex. Altfel spus, ştergerea lui x distruge conectivitatea lui G. e E(G) este o punte (engl. bridge) dacă G e nu este conex. Altfel spus, ştergerea muchiei e distruge conectivitatea lui G. S V (G) este o mulţime de articulaţie (engl. vertex cut set) a lui G dacă graful G S nu este conex. Altfel spus, ştergerea nodurilor din S distruge conectivitatea lui G.
Vocabularul teoriei grafurilor grad de conectivitate, distanţă, excentricitate, centru, periferie, rază, diametru Gradul de conectivitate κ(g) al unui graf incomplet G este numărul minim de noduri ce trebuie eliminate din G pentru a-l deconecta, adică κ(g) = min{ S S este mulţime de articulaţie a lui G}. Dacă k este un întreg strict pozitiv, spunem că G este k-conex dacă k κ(g). Distanţa d(x, y) de la x la y este cea mai mică lungime a unui drum de la x la y. Excentricitatea e(x) a nodului x este distanţa cea mai mare de la x la un nod în G, adică e(x) = max{d(x, y) y V }. Centrul lui G este mulţimea nodurilor cu excentricitate minimă. Periferia lui G este mulţimea nodurilor cu excentricitate maximă. Raza lui G este excentricitatea unui nod din centrul lui G, adică radius(g) = min{e(x) x V }. Diametrul lui G este excentricitatea unui nod de la periferia lui G, adică diam(g) = max{e(x) x V }.
Vocabularul teoriei grafurilor Exemple 1 2 G 1 : a b c d e g f h are 3 puncte de articulaţie (cele încercuite) şi 2 punţi (cele îngroşate). a b c G 2 : d e g f h nu are puncte de articulaţie şi nici punţi, dar are mulţimi de articulaţie cu 2 noduri, de exemplu {c, e}, {f, g} sau {b, e}. Deci κ(g 2 ) = 2.
Vocabularul teoriei grafurilor Exemple G: r a x v s c u z e d(x, c) = 2, d(r, z) = 4, e(x) = e(e) = 2, e(z) = e(z) = 4, radius(g) = 2, diam(g) = 4, G are centrul {x, e}, G are periferia {r, z}.
Reprezentarea grafurilor pe calculator 1 Listă de noduri + listă de muchii 2 Liste de adiacenţă 3 Matrice de adiacenţă 4 Matrice de incidenţă 5 Matrice de ponderi
Reprezentarea grafurilor 1. Cu listă de noduri + listă de muchii Exemplu b a c d e Listă de noduri V = [a, b, c, d, e] Listă de muchii E = [a b, a c, a d, b c, c e, d e] Observaţii: a b = b a, a c = c a, etc. muchia a b mulţimea {a, b} b a c d e Listă de noduri V = [a, b, c, d, e] Listă de arce E = [a b, c a, c b, d a, e c, e d] Observaţii: a b b a, a c c a, etc. arcul a b perechea a, b Remarcă Dacă nu există noduri izolate, nu este necesar să fie reţinută lista de noduri V : V se poate calcula din E
Reprezentarea grafurilor 2. Cu liste de adiacenţă Pentru fiecare nod u V se reţine lista de vecini a lui u. Exemplu b a c d e adj[a] = [b, c, d] adj[b] = [a, c] adj[c] = [a, b, e] adj[d] = [a, e] adj[e] = [c, d] b a c d e adj[a] = [b] adj[b] = [] adj[c] = [a, b] adj[d] = [a] adj[e] = [c, d]
Reprezentarea grafurilor 3. Cu matrice de adiacenţă Presupunem că G = (V, E) este un graf cu n noduri. 1 Fixăm o enumerare [x 1, x 2,..., x n ] a nodurilor din V. 2 Matricea de adiacenţă este A G = (a ij ) de dimensiune n n cu a ij := numărul de muchii de la nodul x i la nodul x j. Observaţii 1 Înainte de a construi A G din G, trebuie fixată o enumerare a tuturor nodurilor: [x 1, x 2,..., x n ] 2 Dacă G este neorientat, A G este matrice simetrică 3 Dacă G este graf simplu, A G conţine doar 0 şi 1
Reprezentarea grafurilor cu matrice de adiacenţă Exemple b G: a b G: a c d c d e e Enumerarea nodurilor: [a, b, c, d, e] 0 1 1 1 0 1 0 1 0 0 A G = 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 Enumerarea nodurilor: [a, b, c, d, e] 0 1 0 0 0 0 0 0 0 0 A G = 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0
Reprezentarea digrafurilor 4. Cu matrice de incidenţă Presupunem că G = (V, E) este digraf. 1 Fixăm o enumerare V = [v 1,..., v n ] a nodurilor din V 2 Fixăm o enumerare E = [e 1,..., e p ] a muchiilor din E Matricea de incidenţă M G = (m ij ) are dimensiunea n p şi 1 dacă e j are sursa v i m ij = 1 dacă e j are destinaţia v i 0 în toate celelalte cazuri. Exemplu Dacă V = [a, b, c, d, e], E = [e 1, e 2, e 3, e 4, e 5, e 6, e 7, e 8 ] şi M G = 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 a e 1 e 6 e e8 b e 4 e 5 e 7 e 2 e 3 d c
Reprezentarea grafurilor simple ponderate 5. Cu matrice de ponderi Presupunem că G = ((V, E), w) este un graf simplu ponderat. Fixăm o enumerare [x 1, x 2,..., x n ] a nodurilor din V. Matricea de ponderi W G = (w ij ) a lui (G, w) este matricea de dimensiune n n cu w ij = 0 dacă i = j, w(x i, x j ) dacă x i x j E sau x i x j E, + în celelalte cazuri. Exemplu (Digraf ponderat cu enumerare de noduri [a, b, c, d, e, f ]) G : a 3 4 b e 5 1 2 9 1 c d 7 12 f W G = 0 3 4 0 2 9 0 1 12 0 7 5 1 0 0
Reprezentarea grafurilor Studiu comparativ pentru un graf cu n noduri şi m muchii Reprezentarea cu listă de muchii Adecvată pentru reprezentarea grafurilor simple fără noduri izolate, cu m n 2 Complexitate spaţială (memorie ocupată): O(m) Reprezentarea cu liste de adiacenţă Permite enumerarea rapidă a vecinilor unui nod Complexitate spaţială (memorie ocupată): O(n + m) Reprezentarea cu matrice de adiacenţă A G = (a ij ) sau cu matrice de ponderi W G = (w ij ) Test rapid de conectivitate directă între 2 noduri: O(1) (v i, v j ) E dacă a ij = 0 sau dacă w ij = Complexitate spaţială (memorie ocupată): O(n 2 ) - reprezentare neadecvată când m n 2 Reprezentarea cu matrice de incidenţă M G Complexitate temporală: O(n m)
Un Java API pentru lucrul cu grafuri Pentru familiarizarea cu algoritmii fundamentali de lucru cu grafuri, vom folosi biblioteca de clase java algs4.jar. Detalii despre ce oferă această bibliotecă găsiţi aici. Sugestii de instalare şi utilizare pe laptop-ul personal: Instalaţi/actualizaţi Eclipse IDE for Java Developers de aici Descărcaţi algs4.jar de aici. Creaţi un proiect Java EduGraph. Creaţi package-ul ro.uvt.cs.graphs în cadrul proiectului EduGraph. Adăugati biblioteca externă algs4.jar: Properties Java Build Path Libraries Add External JARs