Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΝικολίτα Μεσσηνέζης Τροποποιήθηκε πριν 6 χρόνια
1
GRAFURI GRAFURI NEORIENTATE GRAFURI ORIENTATE
2
GRAFURI NEORIENTATE Definitie Gradul unui vârf.
Graf parţial şi subgraf Reprezentarea grafurilor neorientate Parcurgerea grafurilor neorientate Conexitate in grafuri neorientate Grafuri hamiltoniene si euleriene Aplicatii grafuri neorientate back
3
Definitie Definitie: Se numeste graf neorientat, o pereche ordonata de multimi notata G=(X,U), unde X={x1,x2,…,xn} este o multime finite si nevida de elemnte numite noduri sau varfuri, iar U={u1,u2,…,un} este o multime de perechi neordonate de elemente din X numite muchii. 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 obtine din G pastrand toate varfurile si suprimand niste muchii. Se numeste subgraf al grafului G=(X,U) ungraf neorientat H=(Y,V), unde YX iar V contine toate muchiile din U care au ambele extremitati in multimea Y. back
6
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. linia A= coloana next back
7
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 , 3, 4 , 3 , 2, 4 , 3 linia A= coloana back next
8
Graf complet si graf bipartit.
Se numeste graf complet cu n varfuri, notat Kn, un graf G=(X,U) cu proprietatea ca intre oricare doua varfuri exista o muchie. Exemplu: Un graf complet cu n varfuri are n*(n-1)/2 muchii. Un graf neorientat G=(X,U) se numeste bipartit daca exista 2 multimi de noduri A si BX astfel incat AB=X si AB=; iar orice muchie din U are o extremitate in multimea A si una 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 obesrva ca: AB=X, AB=, iar fiecare muchie are o extremitate in A si una in B. Se numeste graf bibartit complet, un graf bipartit cu proprietatea ca pentru orice varf x din A si orice varf y din B, exista muchia(x,y) (unde A si B sunt cele doua submultimi care partitioneaza multimea varfurilorX). 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 xX, 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
Prin parcurgerea in latime acelui graf am subliniat o proprietate importanta a grafului:faptul ca in urma parcurgerii au fost vizitate toate varfurile. Luand oricare doua varfuri,putem gasi cel putin un traseu care porneste dintr-un varf si ajunge in celalalt. Luand oricare doua varfuri, ele pot fi legate printr-un lant. Dar nu toate grafurile sunt conexe. In schimb putem desprinde din el “portiuni” care, fiecare luata separat, este un graf conex. Exemplu: Se numeste componenta conexa a grafului G=(X,U), un subgraf G1=(X1,U1) a lui G, conex, cu proprietatea ca nu exista nici un lant care sa lege un varf din X1 cu un varf din X-X1. back
11
Grafuri hamiltoniene si euleriene
Se numeste ciclu hamiltonian intr-un graf, un ciclu elementar care contine toate varfurile grafului. Un graf care contine un ciclu hamiltonian se numeste graf hamiltonian. Un lant elementar care contine toate varfurile grafului se numeste lant hamiltonian. Un graf hamiltonian are cel putin trei varfuri. Graful complet cu n varfuri este un graf hamiltonian. Teorema: Fie G=(X,U), cu n>=3 varfuri, daca oricare ar fi x un nod al grafului si d(x)>=n/2, atunci graful este hamiltonian. Se numeste ciclu eulerian intr-un graf, un ciclu care contine toate muchiile grafului. Un graf care contine un ciclu eulerian se numeste graf eulerian. Un lant eulerian este un lant care contine toate muchiile grafului. Un graf fara varfuri izolate este eulerian, daca si numai daca este conex si gradele tuturor varfurilor sunt numere 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
Exemplu graf orientat Figura1 U3 U2 U4 U5 U6 U1 U7 3 4 1 2 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. Mulţimile Γ şi ω
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) ε U). → 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; ω+(x) = {u = (x,y)| u ε U} → mulţimea arcelor care ies din nodul x; ω-(x) = {u = (y,x)| u ε U} → mulţimea arcelor care intră în nodul 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
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: 1 2 3 4 Figura 5 coloana 1 2 3 4 A= back
19
Matricea vârfuri – arce
Este o matrice b cu n linii şi m coloane, în care fiecare element b[i,j] este: 1, dacă nodul i este o extremitate iniţială a arcului uj; -1, dacă nodul i este o extremitate finală a arcului uj; 0, dacă nodul i nu este o extremitate a arcului uj. Pentru graful de mai jos cu n=4 noduri şi m=5 arce, matricea vârfuri – arce este: 2 3 1 4 u3 u2 u1 u4 u5 Figura 6 1 -1 Observaţii: Pe fiecare coloană j (aferentă arcului uj), avem exact două elemente nenule: un 1 (linia i pe care se află reprezintă extremitatea iniţială a arcului uj) şi un -1 (linia i pe care se află reprezintă extremitatea finală a arcului uj) Numărul valorilor de 1 de pe linia i, reprezintă gradul exterior al nodului i (numărul arcelor ce au ca extremitate iniţială pe i), iar numărul valorilor de -1 de pe linia i reprezintă gradul interior al nodului i (numărul arcelor care au ca extremitate finală pe i). back
20
Listele vecinilor 2 3 1 4 u3 u2 u1 u4 u5 Figura 6 Pentru fiecare nod x se construiesc două liste ale vecinilor săi: L*(x) → lista vecinilor succesori; conţine nodurile ce sunt extremităţi finale ale arcelor care ies din nodul x. L-(x) → lista vecinilor predecesori; conţine nodurile ce sunt extremităţi iniţiale ale arcelor care intră în nodul x. Nodul x L*(x) L-(x) 1 2 vidă 1,3,4 3 2,4 4 2,3 back
21
Drumuri si circuite in grafuri orientate
Se numeşte lanţ 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şte drum în graful G, un şir de noduri D={z1, z2, z3, …, zk}, unde z1, z2, z3, …, zk aparţin lui x, cu proprietatea că oricare două noduri consecutive sunt adiacente, adică există arcele [z1, z2], [z2, z3], …, [zk-1,zk] aparţin lui U. Dacă nodurile z1, z2, z3, …, zk sunt distincte două câte două, drumul se numeşte elementar. În caz contrar, drumul este ne-elementar. Se numeşte circuit într-un graf, un lanţ L={z1, z2, z3, …, zk} cu proprietatea că z1=zk şi arcele [z1, z2], [z2, 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şte elementar. În caz contrar, el este ne-elementar. back
22
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ă unv[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
23
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: 3 1 4 2 back next
24
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
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.