Algoritmica grafelor
Curs 3 Reprezentări ale grafelor Pentru a putea lucra mai uşor cu grafe se recurge la o reprezentare a acestora. Aceste reprezentări sunt necesare în cazul în care vrem să precizăm graful pe hârtie sau pentru un calculator. Aşa cum se întâmplă în general la reprezentarea datelor şi aici se poate vorbi despre modelul logic şi cel fizic al reprezentării grafelor. Noi vom prezenta doar modelele logice. În funcţie de problema care dorim sa o rezolvăm şi de modul de rezolvare a acesteia se va utiliza una sau alta dintre reprezentările grafelor. Binenţeles că alegerea facută influenţează timpul de răspuns al algoritmilor sau exprimat mai general influenţează complexitatea acestora. Se cunosc mai multe moduri de reprezentare ale grafelor. 1. Reprezentarea geometrică Această reprezentare se face prin a pune în corespondenţa elementelor grafului elemente geometrice din plan. Corespondenţa este: vârfurile grafului se reprezintă prin puncte sau cerculeţe sau pătrăţele, dacă este nevoie marcate (etichetate); fiecare arc se reprezintă printr-o linie dreaptă sau curbă (curbă Jordan) ce uneşte reprezentările extremităţilor arcului respectiv, orientată de la reprezentarea extremităţii iniţiale către reprezentarea extremităţii terminale a arcului; muchiile se reprezintă ca şi arcele numai că lipseşte orientarea. Uneori arcele (muchiile) sunt marcate fie cu numărul arcului respectiv fie cu alte valori care pot avea semnificaţii conform problemei. Dacă reprezentările vârfurilor sunt marcate (etichetate) graful se numeşte graf etichetat. Aici trebuie să remarcăm că acelaşi graf etichetat poate avea reprezentări diferite (vezi figura 1). Dacă reprezentările vârfurilor nu sunt etichetate graful se numeşte graf neetichetat. Definiţie: Graf planar este un graf care admite o reprezentare geometrică în care reprezentările arcelor nu se intersecteză.
1
Algoritmica grafelor
Figura 1. Reprezentari diferite ale unui graf etichetat
Orice componentă conexă, în sens topologic, a planului din care s-au eliminat reprezentările vâfurilor şi ale arcelor unui graf planar se numeşte faţă a grafului planar respectiv. Adică faţă a unui graf planar este o regiune a planului, în care s-a reprezentat un graf planar, limitată de muchii ale grafului cu proprietatea că oricare două puncte ale sale se pot uni printr-o linie poligonală care nu intersectează muchii ale grafului. Un rezultat important este acela prin care se arată că numărul feţelor unui graf planar este constant indiferent de reprezentarea planară a grafului. În spaţiu orice graf se poate reprezenta astfel încât oricare două muchii (arce) să nu se intersecteze. Asceastă reprezentare se poate face astfel: • Se reprezintă toate vârfurile pe o dreaptă; • Pentru reprezentarea fiecărei muchii se alege câte un plan distinct ce conţine dreapta pe care sunt reprezentate vârfurile grafului, apoi se reprezintă în acel plan muchia (arcul). Cum planele în care s-au reprezentat câte o muchie sunt disjuncte şi au în comun doar dreapta pe care s-au reprezentat vârfurile grafului înseamnă că oricare două muchii nu se intersectează. Reprezentării geometrice în calculator îi corespunde reprezentarea cu liste înlănţuite sau pointeri sau o altă structură de date convenabilă. 2
Algoritmica grafelor
2. Reprezentarea matriceală Un graf G=(X,U) se poate reprezenta cu ajutorul matricei de adiacenţă (vârfuri-vârfuri) sau al matricei de incidenţă (vârfuri-arce). Fiecare linie şi coloană corespunzând unui vârf sau unui arc (muchie) a grafului. 2.1. Matricea de adiacenţă Matricea de adiacenţă este o matrice pătratică, linia şi coloana i corespunzând vârfului i al grafului. Elementele matricei de adiacenţă se definesc astfel: ⎧1, (i, j) ∈ U aij = ⎨ , i, j ∈ X. ⎩0, (i, j) ∉ U
Astfel graful G=(X, U), cu X={1,2,3,4,5} şi U={(1,2);(2,1);(2,3);(3,5);(3,4);(4,3);(4,5);(5,1)} se poate preciza şi prin matricea de adiacenţă următoare: ⎛0 ⎜ ⎜1 A = ⎜0 ⎜ ⎜0 ⎜1 ⎝
1 0 0 0⎞ ⎟ 0 1 0 0⎟ 0 0 1 1⎟ ⎟ 0 1 0 1⎟ 0 0 0 0 ⎟⎠
Observaţii: a. Valorile matricei de adiacenţă se pot considera ca valori booleene şi deci elementul aij precizează dacă perechea de vârfuri (i,j) este sau nu arc în graful reprezentat prin matricea de aiacenţă A. b. Dacă valorile matricei de adiacenţă se interpretează ca numere naturale, atunci numărul aij este numărul arcelor de la i la j în graful G. Pentru multigrafe se poate conveni astfel ca valorile matricei A să fie numere naturale conforme acestei interpretări. c. Pentru grafele neorientate matricile de adiacenţă sunt simetrice şi putem interpreta şi invers, dacă matricea de adiacenţă a unui graf este simetrică, atunci acel graf este neorientat.
3
Algoritmica grafelor
2.2. Matricea de incidenţă Matricea de incidenţă se ataşează grafelor simple (fără bicle) şi a căror mulţime de arce s-a ordonat, adică s-au numerotat arcele, U={1,2,..m}. Linia i corespunde vârfului i iar coloana u corespunde arcului u. Deci matricea este de tip n × m . Elementele matricei de incidenţă se definesc astfel: 1, ∃j ∈ X : u = (i, j) ⎧ ⎪ biu = ⎨− 1, ∃j ∈ X : u = ( j , i ), i ∈ X, u ∈ U ⎪ 0, altfel ⎩
Graful reprezentat în figura 2 se poate reprezenta prin matricea de incidenţă următoare: 1 −1 0 0 0⎞ ⎛1 ⎜ ⎟ 1 0 − 1⎟ ⎜−1 0 1 B = ⎜ 0 −1 0 −1 0 0⎟ . ⎜ ⎟ 0 0 0 1 1⎟ ⎜0 ⎜0 0 0 0 − 1 0 ⎟⎠ ⎝
Figura 2.
Definiţie: Într-un graf G conex numim distanţă dintre vârfurile i şi j minimul lungimilor lanţurilor dintre i şi j. Notăm distanţa dintre i şi j cu d(i,j). Noţiunea introdusă verifică axiomele distanţei: pozitivitatea, adică d (i, j ) ≥ 0, ∀i, j ∈ X , egalitatea are loc dacă şi numai dacă i=j. simetria, adică d (i, j ) = d ( j, i ), ∀i, j ∈ X, relaţia are loc pentru că orice lanţ de la i la j induce un lanţ de la j la i. inegalitatea triunghiului, adică d (i, j ) ≥ d (i, k ) + d ( k , j ), ∀i, j, k ∈ X, care are loc din cauză că d(i,k)+d(k,j) reprezintă numărul de muchii ale unui lanţ de la i la j, mai precis ale lanţului obţinut prin compunerea lanţului de lungime minimă de la i la k cu lanţul de lungime minimă de la k la j, iar d(i,j) reprezintă minimul numărului de muchii ale lanţurilor de la i la j. Ori, ştim că minimul dintre elementele unei mulţimi este mai mic sau egal decât orice element al mulţimii.
4
Algoritmica grafelor
3. Reprezenarea cu tablouri unidimensionale Dacă un graf are numarul de vârfuri mare şi un număr relativ mic de muchii atunci matricele cu care se reprezintă graful au multe valori zero. Complexitatea căutării într-o asemenea matrice şi cantitatea mare de suport (memorie) fac ca să crească complexitatea algoritmilor. O reprezentare mai eficientă în aceste cazuri este cea care foloseşte două tablouri (liste liniare), ce necesită o cantitate de memoie de aproximativ n+m celule. În continuare prezentăm doar trei astfel de moduri de reprezentare. 3.1.
Lista arcelor
În această reprezentare se utilizează tablourile α şi β de dimensiune m. Valorile α(u) şi β(u) fiind extremităţile iniţială respectiv finală ale arcului u ∈ U. Mai jos dăm o astfel de reprezentare pentru graful reprezentat geometric în figura 3. u α(.)
1 1
2 1
3 2
4 3
5 1
6 5
7 5
8 7
9 6
10 4
β(.)
2
3
4
4
4
4
7
6
4
7
2 1
3 5
1
5
6
10
4
2
4
7 7
9
8
3
6 Figura 3.
3.2.
Lista succesorilor (valorile lui Г)
În acest caz tabloul α are dimensiunea n+1, iar β are dimensiunea m (pentru grafe orientate) sau 2m (pentru grafuri neorientate). Pentru fiecare vârf i ∈ X, α(i) indică adresa (indicele) din tabloul β de unde sunt înregistraţi succesorii săi. Succesorii vârfului i se află, deci, în tabloul β între poziţiile α(i) şi α(i+1)-1 inclusiv. Dacă α(i)= α(i+1), atunci vârful i nu are nici un succesor. 5
Algoritmica grafelor
Deci, pentru fiecare i ∈ X, au loc relaţiile: i −1
a (i ) = ∑ g + ( j ) + 1 şi α(n+1)=m+1 sau α(n+1)=2m+1 j =1
g+(i)= α(i+1)-α(i) (la grafele orientate) g(i)= α(i+1)-α(i) (la grafele neorientate) Γi = {β (α (i )), β (α (i ) + 1),..., β (α (i ) − 1)}.
Dacă arcele (muchiile) grafului au anumite ponderi (valori) acestea se pot pastra într-un alt tablou p(.) de dimensiunea tabloului β. Pentru exemplificare considerăm graful din figura 4 pentru care n=4 şi m=6. Tablourile a şi b conţin următoarele valori:
Figura 4.
3.3. Lista predecesorilor (valorile lui Г-1) În acest caz tabloul α are dimensiunea n+1, iar β are dimensiunea m (pentru grafe orientate) sau 2m (pentru grafuri neorientate). Pentru fiecare vârf i ∈ X, α(i) indică adresa (indicele) din tabloul β de unde sunt înregistraţi predecesorii săi. Predecesorii vârfului i se află, deci, în tabloul β între poziţiile α(i) şi α(i+1)-1 inclusiv. Dacă α(i)= α(i+1), atunci vârful i nu are nici un predecesor. Deci, pentru fiecare i ∈ X, au loc relaţiile: i −1
a (i ) = ∑ g − ( j ) + 1 şi α(n+1)=m+1 sau α(n+1)=2m+1 j =1
g-(i)= α(i+1)-α(i) (la grafele orientate) g(i)= α(i+1)-α(i) (la grafele neorientate)
6
Algoritmica grafelor Γ − i = {β (α (i )), β (α (i ) + 1),..., β (α (i ) − 1)}.
Dacă arcele (muchiile) grafului au anumite ponderi (valori) acestea se pot pastra într-un alt tablou p(.) de dimensiunea tabloului β. Tema Scrieti algoritmii de conversie ai reprezentării unui graf dintr-o formă dată în altă formă dată: 1. Conversia reprezentării unui graf din matricea de adiacenţă A în matricea de incidenţă B. 2. Conversia reprezentării unui graf din matricea de adiacenţă A în lista succesorilor definită de vectorii unidimensionali α şi β. 3. Conversia reprezentării unui graf din matricea de adiacenţă A în lista predecesorilor definită de vectorii unidimensionali α şi β. 4. Conversia reprezentării unui graf din matricea de incidenţă B în matricea de adiacenţă A. 5. Conversia reprezentării unui graf din matricea de incidenţă B în lista sccesorilor definită de vectorii unidimensionali α şi β. 6. Conversia reprezentării unui graf din matricea de incidenţă B în lista predecesorilor definită de vectorii unidimensionali α şi β. 7. Conversia reprezentării unui graf din lista succesorilor, cu ajutorul vectorilor α şi β, în matricea de adiacenţă A. 8. Conversia reprezentării unui graf din lista succesorilor, cu ajutorul vectorilor α şi β, în matricea de incidenţă B. 9. Conversia reprezentării unui graf din lista succesorilor, cu ajutorul vectorilor α şi β, în lista predecesorilor cu ajutorul vectorilor a şi b. 10. Conversia reprezentării unui graf din lista predecesorilor, cu ajutorul vectorilor α şi β, în matricea de adiacenţă A. 11. Conversia reprezentării unui graf din lista predecesorilor, cu ajutorul vectorilor α şi β, în matricea de incidenţă B. 12. Conversia reprezentării unui graf din lista predecesorilor, cu ajutorul vectorilor α şi β, în lista succesorilor cu ajutorul vectorilor a şi b.
7