120 likes | 448 Vues
Grafuri orientate. Elev: Ciunghia Radu Clasa: 11 A Prof. Ohotă Eugenia. Defini ţii.
E N D
Grafuri orientate Elev: Ciunghia Radu Clasa: 11 A Prof. Ohotă Eugenia
Definiţii • Se numeşte graf orientat sau digraf o pereche de mulţimi (X, U), unde X este o mulţime finită şi nevidă de elemente numite noduri sau vârfuri, iar U este o mulţime de perechi ordonateformate cu elemente distincte din mulţimea X, numite arce. • Mulţimea arcelor care ies dintr-un nod: ω + • Mulţimea arcelor care intră într-un nod: ω- • În graful G=(X,U) avem: • X = 1, 2, 3, 4, 5. • U={ (5,3), (1, 2), (1, 3), • (1,4), (1,5), (2,3), (2,4), (2, 5), (3,4), (4, 5)} • Numim vârfuri adiacente orice pereche de vârfuri care formează un arc. Două vârfuri spunem că sunt incidente cu arcul pe care îl formează. • Pentru arcul (x, y) spunem că x este extremitatea iniţială şi y este extremitatea finală. • Spunem că doua arce suntincidente dacă au o extremitate comună. • Se numeşte succesoral vârfului x orice vârf la care ajunge un arc care iese din x. • Mulţimea succesorilor se notează: Γ+. • Se numeşte predecesoral vârfului x orice vârf de la care intră un arc în vârful x. • Mulţimea predecesorilor se notează: Γ-. • Gradul intern al unui nod este egal cu numărul arcelor care intră în nod şi se notează d-(x). • Gradul extern al unui nod este egal cu numărul arcelor care ies din nod şi se notează d+(x).
Teoreme • Teorema 1: Numărul total de grafuri orientate cu n noduri este n(n-1)/2; • Teorema 2: Într-un graf orientat cu n noduri suma gradelor interne este egală cu suma gradelor externe şi este egală cu numărul arcelor. • Aplicaţii ale definiţiilor • Mulţimea arcelor care intră în nodul 2: ω +(2)= {(2, 5), (2, 3), (2, 4)}; • Mulţimea arcelor care ies din nodul 2: ω- (2)={(1, 2)}; • Nodurile 2 si 4 sunt adiacente. • Pentru arcul (2, 3) spunem ca 2 este extremitatea iniţială şi 3 este extremitatea finală. • Arcele (2, 3) şi (3, 4) sunt incidente. • Nodul 4 este succesor al nodului 2. • Nodul 2 este predecesor al nodului 4. • Mulţimea succesorilor nodului 2: Γ+2= {3, 4, 5}; • Mulţimea predecesorilor nodului 2: Γ-2={1}; • Gradul extern al nodului 2: 3 • Grad intern al nodului 2: 1
Matricea drumurilor Este o matrice d cu n linii şi n coloane, în care fiecare element d[i,j] este : - 1, dacă există drum de la nodul i la nodul j în graf; - 0, în caz contrar. Algoritmul Roy-Warshall de determinare a matricei drumurilor • Matricea drumurilor se obţine aplicând matricei de adiacenţă transformări succesive. Vom spune că există drum de la nodul i la nodul j, dacă găsim un nod k (diferit de i, j) cu proprietatea că există drum de la i la k şi drum de la j la k. Astfel: • un element a[i, j] care este 0, devine 1, dacă există un nod k astfel încât a[i, k]=1 şi a[k, j]=1. Pentru a găsi arcele nodului k, trebuie parcurse pe rând în varianta k toate nodurile 1, 2, …, n. • for k:=1 to n do • for i:=to n do {i≠k} • for j:=1 to n do {j≠k} • if (a[i, j]=0) and (i<>k) and (j<>k) then • a[i, j]:=a[i,k]*a[k, j]; • Atribuirea a[i, j]:=a[i,k]*a[k, j] este o scriere elegantă a regulii de mai sus: • în cazul în care unul din elementele a[i,k], a[k, j] este 0, a[i, j] va rămâne 0; • dacă a[i, k]=1 şi a [k, j]=1, atunci a[i, j] devine 1.
Cele 6 grade de separare si matricea drumurilor • Teoria celor "sase grade de separare" se afla la baza retelelor de socializare pe care le cunoastem astazi, desi a fost formulata cu zeci de ani in urma. • Cele "sase grade de separare" ("six degrees of separation") se refera la o teorie care sustine ca, in medie, fiecare individ se afla la circa sase pasi de oricare alta persoana de pe Pamant. Mai exact, apeland la sistemul "un prieten care cunoaste un prieten care are un amic etc.", ai constata ca poti reusi sa faci cunostinta chiar si cu un om aflat in cealalt capat al globului. Daca expresia "sase grade de separare" a devenit populara si folosita odata cu piesa de teatru "Six Degrees of Separation", scrisa de John Guare, fondatorul teoriei este Frigyes Karinthy. La dezvoltarea teoriei lansate de Frigyes Karinthy au contribuit, ulterior, Michael Gurevich, Ihtiel de Sola Pool, matematicianul Manfred Kochen si psihologul american Stanley Milgram. Acesta din urma a realizat un experiment devenit faimos - "the small world experiment" - care a dus la concluzia ca, intre doua persoane, exista o distanta, in medie, de circa 6 persoane - rezultatul lui Milgram fiind de 5,5. Psihologul s-a folosit de corespondenta prin scrisori pentru a realiza acest experiment, concluziile sale fiind de-a dreptul surprinzatoare.
Desi aceasta a fost prima ocazie cand s-a vorbit despre distanta de sase persoane dintre doi oameni, Milgram nu a folosit niciodata expresia "sase grade de separare". Aceasta a fost utilizata si facuta faimoasa de catre John Guare care, la randul sau, i-a atribuit-o lui Marconi (inventatorul telegrafiei fara fir si a antenei de emisie legate de pamant). • Ulterior, criticii acestei teorii au desemnat-o drept un simplu "mit urban". Cu toate acestea, experimente realizate mult mai tarziu au validat-o ca fiind cat se poate de reala. Unul dintre acestea a fost conceput de cercetatorii de la Microsoft, in 2006. Acestia au analizat mesajele transmise intre utilizatorii IM Messenger intr-o singura luna - mai precis, 30 de miliarde intre 180 de milioane de utilizatori. Rezultatele, care i-au surprins si pe oamenii de stiinta, au aratat ca, in medie, distanta dintre doua persoane care foloseau IM Messenger era de circa 6,6. Mai exact, 78% dintre utilizatori puteau fi conectati prin cel mult 7 legaturi, numarul maxim fiind de 29 de persoane. • Aceasta teorie poate fi testată folosind matricea drumurilor si Algoritmul lui Dijkstra care calculeazã lungimile drumurilor minime de la un nod la celelalte noduri ale grafului, precum şi nodurile prin care trec aceste drumuri. • Considerând că persoanele sunt reprezentate fiecare de un nod si existenţa unui arc [x,y] între două noduri înseamnă că persoana x o cunoaşte pe persoana y, putem transpune această teorie într-o problemă de grafuri orientate, în care scopul este de a verifica dacă într-adevăr se respectă ipoteza. • Costul se calculează ţinând cont că fiecare relaţie între două persoane are costul 1 , iar dacă la finalul algoritmului cel mai mare cost găsit este mai mic sau egal cu 6, atunci teoria se verifică.
Algoritmul lui Dijkstra • void dijkstra(int x0){ int i, j, min, k, ok; int viz[NMAX], d[NMAX], tata[NMAX]; for (i = 1; i<=n; i++) { d[i] = C[x0][i]; tata[i] = x0; viz[i] = 0; } tata[x0] = 0; viz[x0] = 1; ok = 1; while (ok) { min = INFINIT; for (i = 1; i<=n; i++) if (!viz[i] && min>d[i]) { min = d[i]; k = i; } if (min != INFINIT) { viz[k] = 1; for (i = 1; i<=n; i++) if (!viz[i] && d[i]>d[k]+C[k][i]) { d[i] = d[k]+C[k][i]; tata[i] = k; } } else ok = 0; }}