1 / 22

GRAFURI

GRAFURI. GRAFURI NEORIENTATE GRAFURI ORIENTATE. GRAFURI NEORIENTATE. Definitie Gra d ul unui vârf . Graf parţial şi subgraf Reprezentarea grafurilor ne orientate Parcurgerea grafurilor neorientate Conexitate in grafuri neorientate Grafuri hamiltoniene si euleriene

oakes
Download Presentation

GRAFURI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GRAFURI • GRAFURI NEORIENTATE • GRAFURI ORIENTATE

  2. GRAFURI NEORIENTATE • Definitie • Gradul unui vârf. • Graf parţial şi subgraf • Reprezentarea grafurilor neorientate • Parcurgereagrafurilorneorientate • Conexitate in grafurineorientate • Grafurihamiltoniene si euleriene • Aplicatiigrafurineorientate back

  3. Definitie • Definitie: • Se numestegrafneorientat, o perecheordonata de multiminotata G=(X,U), unde X={x1,x2,…,xn} este o multimefinite si nevida de elemntenumitenodurisauvarfuri,iar U={u1,u2,…,un} este o multime de perechineordonate de elementedin X numitemuchii. • Exemplu: • G=(X,U) X={1,2,3,4,5,6,7,8,9,10} U={(1,2);(1,3);(1,5);(2,3);(6,7);(6,10);(7,8);(8,9);(9,10)}

  4. Gradul unui vârf. • Gradul unui varf x, notat d(x), reprezinta numarul muchiilor care trec prin nodul x (incidente cu nodul x). • Un varf care are gradul 0 se numeste varf izolat(de exemplu varful 4). • Un varf care are gradul 1 se numeste varf terminal(de exemplu varful 5). • Propozitie: • Fie G=(X,U) un graf neorientat cu n noduri si m muchii, suma gradelor tuturor nodurilor este egala cu 2m. • Intr-un graf neorientat numarul nodurilor de grad impar este un numar par back

  5. Graf parţial şi subgraf • Un graf G’ a lui G, este chiar G sau se obtinedin G pastrandtoatevarfurile si suprimandnistemuchii.Se numestesubgraf al grafului G=(X,U) un grafneorientat H=(Y,V), unde YX iar V continetoatemuchiiledin U care au ambeleextremitati in multimea Y. back

  6. linia 0 1 1 1 1 1 0 1 0 2 A= 1 1 0 1 3 1 0 1 0 4 coloana 1 2 3 4 Reprezentarea grafurilor neorientate • Cele mai cunoscute forme de reprezentare ale unui astfel de graf sunt: matricea de adiacenta, listele vecinilor si vectorul muchiilor. • Matricea de adiacenta • Este o matrice patratica cu n linii si n coloane, in care elementele a[i,j] se definesc astfel: a[i,j]=1 daca exista (i,j) in U, cu x diferit de y si 0 daca nu exista (i,j) in U. • Pentru graful G=(X,U) din figura de mai jos, matricea de adiacenta este: • a[i,j]=a[j,i] oricare ar fi i,j {1,2,…..,n} • Proprietatile matricei de adiacenta: • Este o matrice simetrica; • Pe diagonala principala are toate elementele egale cu 0; • Suma elementelor pe linia sau coloana i este egala cu gradul nodului i; • Daca elementele pe linia/coloana i sunt toate egale cu 0 atunci nodul este izolat; • Daca toate elementele din matrice,mai putin cele de pe diagonala principala, sunt 1 inseamna ca graful este complet. next back

  7. linia 0 1 1 1 1 1 0 1 0 2 A= 1 1 0 1 3 1 0 1 0 4 coloana 1 2 3 4 Listele vecinilor • Listele vecinilor • Pentru fiecare nod al grafului se retin nodurile adiacente cu el. • Pentru reprezentarea listei de adiacenta se poate folosi alocare dinamica. • Exemplu pentru matricea de adiacenta de mai sus: nodul lista vecinilor 1 2, 3, 4 2 1, 3 3 1, 2, 4 4 1, 3 back next

  8. Graf complet si graf bipartit. • Se numestegraf completcu n varfuri, notatKn, un graf G=(X,U) cuproprietatea ca intreoricaredouavarfuri exista o muchie. • Exemplu: • Un grafcomplet cu n varfuri are n*(n-1)/2 muchii. • Un grafneorientat G=(X,U) se numestebipartitdacaexista 2 multimi de noduri A si BX astfelincat AB=X si AB=; iaroricemuchie din U are o extremitate in multimea A siuna in multimea B. • Exemplu: Fie G=(X,U) unde X={1,2,3,4,5,6,7}, U={(1;5),(2;6),(3;6),(4;7)} • Cu multimile A={1,2,3,4} si B={5,6,7} • Se obesrvaca: AB=X, AB=, iarfiecaremuchie are o extremitate in A siuna in B.Se numestegrafbibartit complet, un grafbipartitcuproprietatea ca pentruoricevarf x din A si oricevarf y din B, exista muchia(x,y) (unde A si B suntceledouasubmultimi care partitioneazamultimeavarfurilorX). • Exemplu: back

  9. Parcurgerea grafurilor neorientate • Prin parcurgerea grafurilor neorientate se intelege vizitarea varfurilor intr-o anumita ordine, ordine data de un anumit criteriu. • Exista doua metode de parcurgere: • Parcurgerea in latime BF(Breadth First); • Parcurgerea in adancime DF(Depth First); Algoritmul de parcurgere in latime BF • Fiind dat un graf neorientat G=(X,U) si un nod xX, sa se parcurga toate varfurile • grafului incepand din varful x. • Metoda consta in: • -se viziteaza varful de pornire, dupa care se viziteaza toate varfurile adiacente cu acesta care nu au fost vizitate inca,in continuare se alege primul varf adiacent cu varful de pornire si se viziteaza toate varfurile adiacente cu acesta nevizitate inca si asa mai departe pentru celelalte varfuri cat timp este posibil.Exemplu: • Presupunem ca varful de pornire este 1,atunci parcurgerea BF este:1,2,5,6,3,4,7. • Pentu 3 varf de pornire:3,2,4,1,5,6,7. • Pentru implementare vom folosi un vector care are proprietatile unei cozi, fie c=(c1,c2,…,ck). Capetele de intoducere si extragere vor fi identificate prin pozitiile p si respectiv u. • Notam cu n numarul de noduri din graf. Este necesar ca elemntele matricei de adiacenta a cu n linii*n coloane sa fie cunoscute. • Mai avem nevoie de un vector viz cu n elemente, in care elementele viz[k] (k=1,2,….,n) au semnificatia: viz[i]=0, daca varful i nu a fost vizitat sau viz[i]=0 daca a fost vizitat. Mai intai initializam tot vectorul viz cu 0. • Initial in coada se gaseste varful de pornire: p=1, u=1, c[p]:=x, viz[x]:=1. • Cat timp mai sunt elemente in coada(“while p<=u”): • Extragem din coada varful aflat in capatul de extragere u, si-l memoram intr-o variabila z{z:=c[p]}; • Pe linia z in a cautam vecinii lui z si ii introducem in coada. next back

  10. Conexitate in grafuri neorientate • Prinparcurgerea in latimeaceluigraf am subliniat o proprietateimportanta a grafului:faptulca in urmaparcurgerii au fostvizitatetoatevarfurile. • Luandoricaredouavarfuri,putemgasicelputin un traseu care pornestedintr-un varf si ajunge in celalalt. • Luandoricaredouavarfuri, ele pot fi legateprintr-un lant. • Dar nu toategrafurilesuntconexe. In schimbputemdesprindedin el “portiuni” care, fiecareluataseparat, este un grafconex. • Exemplu: • Se numestecomponentaconexa a grafului G=(X,U), un subgraf G1=(X1,U1) a lui G, conex, cuproprietatea ca nu exista nici un lant care sa lege un varfdin X1 cu un varfdin X-X1. back

  11. Grafurihamiltoniene si euleriene • Se numestecicluhamiltonianintr-un graf, un cicluelementar care continetoatevarfurilegrafului. • Un graf care contine un cicluhamiltonian se numestegrafhamiltonian. • Un lantelementar care continetoatevarfurilegrafului se numestelanthamiltonian. • Un grafhamiltonian are celputintreivarfuri. • Graful complet cu n varfuri este un grafhamiltonian. • Teorema: • Fie G=(X,U), cu n>=3 varfuri, dacaoricarear fi x un nod al grafului si d(x)>=n/2, atuncigraful este hamiltonian. • Se numesteciclueulerianintr-un graf, un ciclu care continetoatemuchiilegrafului. • Un graf care contine un ciclueulerian se numestegrafeulerian. • Un lanteulerian este un lant care continetoatemuchiilegrafului. • Teorema: • Un graffaravarfuriizolate este eulerian, daca si numaidaca este conex si gradeletuturorvarfurilorsuntnumere pare. back

  12. GRAFURI ORIENTATE • Definitie • Graful unui vârf. Mulţimile Γ şi ω • Graf parţial şi subgraf • Reprezentarea grafurilor orientate • Drumuri si circuite in grafuri orientate • Aplicatii grafuri orientate back

  13. Definitie • Numim graf orientat, o pereche ordonată de mulţimi G=(X,U), unde: • X este o mulţime finită şi nevidă numită mulţimea nodurilor (vârfurilor); • U este o mulţime formată din perechi ordonate de elemente ale lui X, numită mulţimea arcelor (muchiilor). Muchiile sunt diferenţiate prin ordinea de scriere a simbolurilor. • Arcul (x,y) nu este tot una cu arcul (y,x). back next

  14. U1 1 U2 2 U3 U5 U4 3 U6 4 U7 Figura1 Exemplu graf orientat • Pentru graful G=(X,U) din figura 1. avem: X={1, 2, 3, 4} şi U={u1, u2, u3, u4, u5, u6, u7,}= {(1,1), (2,1), (3,2), (2,3), (2,4), (3,4), (3,4)} • arc va fi de forma u= (x,y), unde x se numeşte extremitate iniţială, iar y se numeşte extremitate finală a arcului. Cu alte cuvinte, “arcul iese din nodul x şi intră în nodul y”. La fel ca la grafurile neorientate, vom spune că nodurile x şi y sunt adiacente, iar arcul u şi nodul x sunt incidente (la fel arcul x şi nodul y). Nodul y se numeşte succesor al lui x, iar nodul x se numeşte predecesor al lui y. Un arc de forma (x,x), care iese din nodul x şi intră tot x, se numeşte buclă. back

  15. Graful unui vârf • Gradul exterior al unui vârf x, notat d+(x), reprezintă numărul arcelor care ies din nodul x, adică numărul arcelor de forma (x,z) ε U. • Analog, se defineşte gradul interior al unui vârf x, notat d-(x), ca fiind numărul arcelor care intră în nodul x (de forma (y,x)). • → mulţimea nodurilor ce constituie extremităţi finale ale arcelor care pleacă din nodul x. Pe scurt, mulţimea succesorilor lui x; • → mulţimea nodurilor ce constituie extremităţi iniţiale ale arcelor care pleacă din nodul x. Pe scurt, mulţimea predecesorilor lui x; back

  16. Graf parţial şi subgraf • Fie graful G = (X,U). Un graf parţial al lui G, este un graf G1= (X,V), cu . Altfel spus, un graf parţial G1 al lui G, este chiar G, sau se obţine din G păstrând toate vârfurile şi suprimând nişte muchii. • Fie graful G = (X,U). Un graf parţial al lui G, este un graf G1= (Y,T), unde şi , iar T va conţine numai muchiile care au ambele extremităţi în Y. Altfel spus, un graf parţial G1 al lui G, se obţine din G eliminând nişte vârfuri şi păstrând doar acele muchii care au ambele extremităţi în mulţimea vârfurilor rămase. back

  17. Reprezentarea grafurilor orientate • Cele mai cunoscute forme de reprezentare sunt: • matricea de adiacenţă • matricea vârfuri – arce • matricea drumurilor • listele vecinilor. • reprezentarea grafului ca un vector de muchii back

  18. 2 3 1 4 Figura 5 Matricea de adiacenţă • Are aceeaşi semnificaţie ca în cazul grafurilor neorientate: fiecare element a[i,j], cu i,j ε {1,2,...,n}, este: 1 dacă există arcul (i,j), respectiv 0 în caz contrar. • Datorită orientării, aşa cum am mai spus, arcul (i,j) nu este totuna cu arcul (j,i). Prin urmare, a[i,j] ≠ a[j,i]. Aşadar matricea de adiacenţă nu mai este simetrică faţă de diagonala principală, aşa cum se întâmpla în cazul grafurilor neorientate. • Pentru graful G=(X,U) din figura 5, matricea de adiacenţă este: back

  19. Drumuri si circuite in grafuri orientate • Se numeştelanţintr-un graf orientat, o mulţime de arce L={u1,u2,...,uk}, cu proprietatea ca oricare doua arce vecine in mulţime au o extremitate comuna. • Un lanţ este de fapt un traseu care uneşte prin arce doua noduri numite extremităţile lanţului, fără a tine cont de orientarea arcelor componente. • Se numeştedrum în graful G, un şir de noduri D={z1, z­2, z3, …, zk}, unde z­1, z­2, z3, …, zk aparţin lui x, cu proprietatea că oricare două noduri consecutive sunt adiacente, adică există arcele [z­1, z­2], [z­2, z3], …, [zk-1,zk] aparţin lui U. • Dacă nodurile z­1, z­2, z3, …, zk sunt distincte două câte două, drumul se numeşte elementar. În caz contrar, drumul este ne-elementar. • Se numeştecircuitîntr-un graf, un lanţ L={z­1, z­2, z3, …, zk} cu proprietatea că z1=zk şi arcele [z­1, z­2], [z­2, z3], …, [zk-1,zk] sunt distincte două câte două. • Dacă într-un circuit, toate nodurile cu excepţia primului şi ultimului sunt distincte două câte două, atunci circuitul se numeşteelementar. În caz contrar, el este ne-elementar. back

  20. Reprezentarea grafului ca un vector de muchii • Fiecare arc al grafului poate fi privit ca o înregistrare cu două componente, în speţă cele două noduri care constituie extremităţile arcului: • nod_in -> nodul din care iese arcul (“nodul de început” al arcului); • nod_sf -> nodul în care intră arcul (“nodul de sfârşit” al arcului); • Putem defini tipul de date ARC, astfel: • type ARC=record • nod_in, nod_sf: integer; • end; • Graful în ansamblul său, este o mulţime de arce, adică o mulţime de elemente de tipul ARC. În consecinţă, definim graful ca un “vector de arce”, adică un vector de elemente de tipul ARC: • var v: array [1..25] of ARC; • Numărul real de elemente este numărul de arce m. Astfel, elementele efectiv folosite ale vectorului vor fi v[1], v[2],..., v[m]. Fiecare element {1, 2, ..., m}) este de tipul ARC şi reprezintă unv[i] (cu i arc al grafului, având două componente: • v[i].nod_in şi v[i].nod_sf -> nodurile extremităţi ale arcului. home

  21. 3 1 4 2 Aplicatii grafuri orientate Rezolvare În procedura citire_graf se citesc de la tastatură m perechi de numere întregi de forma (x,y) reprezentând extremităţile celor m arce ale grafului, şi se constituie matricea de adiacenţă a, cu n linii * n coloane. Algoritmul de căutare a celebrităţii cuprins în procedura celebritate. Pentru început, vom căuta o persoană pe care o vom numi în continuare candidat la celebritate. Memorăm acest candidat în variabila candid. Presupunem că iniţial candidatul este persoana 1 (candid:=1). “Cercetăm” celelalte persoane, într-un ciclu cu i de la 2 la n. Pentru fiecare persoană i, trebuie să facem o testare. În cazul în care candidatul “actual” candid o cunoaşte i (a[candid,i] este 1) candid nu mai poate fi celebritate (celebritate nu trebuie să cunoască nici o altă persoană din grup !). În această situaţie, noul candidat la celebritate devine i (candid:=1). La finele parcurgerii de mai sus, în variabila candid vom avea aşadar un candidat la celebritate. Mai rămâne să vedem dacă acest candidat este cunoscut de către celelalte persoane. În exemplul de mai sus, urmare a faptului că persoana 3 este celebritate, avem relaţiile (1,3), (2,3) şi (4,3), adică a[1,3]=a[2,3]=a[4,3]=0. În consecinţă, pe coloana 3 avem n-1 valori de 1. Pe caz general, trebuie să numărăm valorile de 1 de pe coloana candid în matricea de adiacenţă, în adiacenţă, iar dacă găsim n-1 valori, atunci persoana candid este într-adevăr celebritate. • Celebritate. • Se dă un grup format din n persoane, care se cunosc sau nu între ele. De la tastatură se introduc m perechi de numere întregi (x,y) cu semnificaţia ”persoana x cunoaşte pe persoana y”. relaţia de cunoştinţă nu este neapărat reciprocă. Numim celebritate, o persoană care este cunoscută de către toate celelalte persoane din grup, dar ea nu cunoaşte pe nici un alt membru al grupului. Să se determine dacă din grup există o astfel de celebritate. • Interpretarea datelor. • Problema poate fi modelată într-un graf orientat, în care nodurile sunt persoanele 1,2,3...n, iar arcele sunt relaţiile de cunoştinţă între aceste persoane. O relaţie de cunoştinţă este de forma (x,y) cu semnificaţia “persoana x o cunoaşte pe persoana y”. De exemplu, dacă grupul are n=4 persoane, iar cele m=5 “relaţii de cunoştinţă” sunt (1,3), (2,3), (4,3), (1,2), (1,4), atunci graful şi matricea sa de adiacenţă arată astfel: back next

  22. Aplicatii grafuri orientate • Un CD valoros • Într-un grup sunt n elevi, băieţi şi fete, pe care-i numerotăm 1, 2, … , n. Fiecare elev cunoaşte o parte dintre ceilalţi elevi. Relaţia de cunoştinţă nu este neapărat reciprocă (dacă x îl cunoaşte pe y, asta nu înseamnă că şi y trebuie să îl cunoască pe x). Unul dintre elevi are un CD foarte valoros, cu multe jocuri demonstrative, pe care toţi membri grupului vor să-l aibă fie şi pentru scurt timp, pentru a şi-l copia pe calculatorul propriu. CD—ul circulă printre membrii grupului în felul următor: fiecare elev după ce l-a primit de la altcineva îl dă mai departe, dar numai unui elev pe care îl cunoaşte, pentru că nu doreşte să ajungă în mâna unor persoane în care nu poate avea încredere. Determinaţi o modalitate (dacă există) prin care CD-ul să circule exact o singură dată pe la fiecare elev, transmiterea lui făcându-se numai către o cunoştinţă, iar în final CD-ul să ajungă din nou la proprietarul său. • Interpretarea datelor • Relaţiile de cunoştinţă din cadrul grupului pot fi reţinute într-o matrice a cu n linii şi n coloane, în fiecare element a[i, j] este: 1 dacă elevul i îl cunoaşte pe elevul j, respectiv 0 în caz contrar. Cu datele problemei putem construi un graf în care nodurile sunt elevii 1, 2, 3,…, n, iar arcele sunt relaţiile de cunoştinţă din grup. Astfel, va exista arc de la nodul x la nodul y dacă elevul x în cunoaşte pe elevul y. Întrucât în enunţ se precizează că relaţiile de cunoştinţă nu sunt neapărat reciproce („x cunoaşte pe y” nu implică „y cunoaşte pe x”), rezultă că avem de-a face cu un graf orientat. Matricea a definită mai înainte este tocmai matricea de adiacenţă a grafului. • „Traseul” pe care îl parcurge CD-ul pleacă dintr-un nod (proprietarul său), trecând prin fiecare nod (pe la fiecare elev) o singură dată. Transmiterea se face numai către o cunoştinţă. Astfel, de la elevul x va ajunge la elevul y numai dacă există arc (cunoştinţă) de la x la y. În final, traseul se încheie în nodul de unde a plecat (CD-ul se întoarce la proprietarul iniţial). Un traseu care respectă condiţiile de mai sus nu este altceva decât un circuit elementar care trece prin toate nodurile grafului: drum deoarece poate trece de la un nod la altul numai printr-un arc, elementar deoarece nu trece de două ori prin acelaşi nod, şi în sfârşit circuit pentru că revine în nodul de plecare. back

More Related