1 / 24

Structuri arborescente

Structuri arborescente. Definitie. Graful G este arbore daca G este aciclic si conex.. . . . . . . Structuri arborescente. Definitie. Fie G=(V,E) graf arbore. Subgraful H=(V1,E1) al lui G este subarbore al lui G daca H este graf arbore.. . . . . Structuri arborescente. Fie G=(V,E) un graf.

alva
Download Presentation

Structuri arborescente

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. Structuri arborescente (grafuri de tip arbore)

    2. Structuri arborescente Definitie. Graful G este arbore daca G este aciclic si conex.

    3. Structuri arborescente Definitie. Fie G=(V,E) graf arbore. Subgraful H=(V1,E1) al lui G este subarbore al lui G daca H este graf arbore.

    4. Structuri arborescente Fie G=(V,E) un graf. Urmatoarele afirmatii sînt echivalente: G este graf arbore (aciclic si conex); G este graf conex minimal: oricare ar fi e?E, prin eliminarea muchiei e din E, graful rezultat nu este conex; G este graf aciclic maximal: prin adaugarea unei noi muchii în graf rezulta cel putin un ciclu. Cum verificam daca un graf este arbore? Verificare conexitate + verificare aciclicitate (alg. Marimont) Verificare aciclicitate si n = m + 1 Verificare conexitate si n = m + 1

    5. Structuri arborescente Definitie. Se numeste graf asimetric un digraf D=(V,E) cu proprietatea ca pentru orice uv?E, vu nu apartine E. Digraful D este simetric daca pentru orice uv?E si vu?E.

    6. Structuri arborescente Definitie. Fie D=( V, E ) digraf netrivial. Graful G=( V, E’ ), unde E’ = { uv / uv?E sau vu?E} se numeste graf suport al digrafului D.

    7. Structuri arborescente Definitie. Un arbore directionat este un graf orientat asimetric pentru care graful suport corespunzator este graf arbore. Definitie. Arborele directionat T = ( V, E ) este arbore cu radacina daca exista r ?V astfel încît, pentru orice u ? V, u ? r, exista r-u drum în T. Vîrful r se numeste radacina arborelui directionat T (drumurile sînt unice, radacina este unica; lungimea unui drum este egala cu numarul de arce). Definitie. Fie T = ( V, E ) arbore directionat. Arborele T1 = (V1 ,E1 ) este subarbore al lui T daca V1 ? V, E1 ? E si T1 este arbore directionat.

    8. Structuri arborescente

    9. Reprezentari si parcurgeri (arbori orientati) Definitie. Un arbore orientat este un arbore directionat cu radacina. Definitie. Fie T=(V,E), un arbore orientat cu radacina r. Un vîrf v este situat pe nivelul i al arborelui T, daca distanta de la vîrf la radacina este egala cu i. Radacina arborelui este considerata de nivel 0. Se pot folosi toate tipurile de reprezentare a grafurilor, plus metode specifice arborilor, mai eficiente.

    10. Reprezentarea Fiu-Frate N: numarul de noduri R: nodul radacina FIU(i): numarul atasat primului descendent al vîrfului i FRATE(i): numarul atasat vîrfului descendent al tatalui vîrfului i si care urmeaza imediat lui i INF(i): informatia atasata vîrfului i de obicei informatia e chiar valoarea i, caz în care vectorul nu mai e necesar Valoare lipsa: se foloseste o valoare conventionala (0, -1…)

    11. Reprezentarea Fiu-Frate

    12. Reprezentare folosind structuri dinamice Presupunînd ca fiecare vîrf al arborelui are cel mult n descendenti, fiecarui vîrf îi este atasata structura

    13. Parcurgeri Aplicarea sistematica a unei reguli de vizitare a vîrfurilor arborelui. Cele mai utilizate reguli de parcurgere a arborilor orientati sînt A-preordine (varianta DF) A-postordine (varianta DF) parcurgerea pe niveluri (BF)

    14. Parcurgerea în A-preordine (Fiu-Frate) Este vizitat vîrful curent si sînt identificati descendentii lui. Se aplica aceeasi regula de vizitare pentru fiecare dintre arborii avînd ca radacini descendentii vîrfului curent void A_preordine (nod R) { if (R){ vizit (R); A_preordine(FIU[R]); A_preordine(FRATE[R]); } } 1, 2, 5, 6, 9, 10, 11, 12, 13, 7, 3, 4, 8, 14, 15, 16

    15. Parcurgerea în A-postordine (Fiu-Frate) Se identifica si se viziteaza descendentii vîrfului curent, apoi se viziteaza vîrful curent. Se aplica aceeasi regula de vizitare pentru arborii avînd ca radacini descendentii vîrfului curent void A_postordine (nod R) { if (R){ A_postordine(FIU[R]); vizit (R); A_postordine(FRATE[R]); } } 5, 9, 10, 11, 12, 13, 6, 7, 2, 3, 14, 15, 16, 8, 4, 1

    16. Parcurgeri în adîncime (str. dinamice) void A_preordine (nod R) { if (R) { vizit (R); for(i=0;i<n;i++) A_preordine(R->leg[i]); } } void A_postordine (nod R) { if (R) { for(i=0;i<n;i++) A_postordine(R->leg[i]); vizit (R); } }

    17. Parcurgerea pe niveluri (Fiu-Frate) void parcurgere_pe_niveluri(nod R, int FIU[], int FRATE[], int n) { TNOD* C = NULL; push(C,R); while (C) { pop(C,v); VIZIT(v); v=FIU[v]; while (v) { push(C,v); v=FRATE[v]; } } } 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

    18. Parcurgerea pe niveluri (str. dinamice) void parcurgere_pe_niveluri(nod *R) { TNOD* C = NULL; push(C,R); while (C) { pop(C,v); VIZIT(v); for(i=0;i<n;i++) if(R->leg[i]) push(C,R->leg[i]); } } 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

    19. Arbori partiali Definitie. Fie G un graf. Subgraful partial H este un arbore partial al lui G daca H este graf arbore. Definitie. Fie G=(V,E,w) un graf ponderat conex. Daca T=(V,E0) este un arbore partial al grafului G’=(V,E), ponderea arborelui T, notata W(T), este definita prin W(T)= Definitie. Arborele partial T0?T(G) este arbore partial minim pentru G daca W(T0) = min { W(T); T?T(G) }, unde T(G) este multimea arborilor partiali corespunzatori grafului G.

    20. Arbori partiali

    21. Algoritmul lui Kruskal Problema: determinarea arborelui partial de cost minim Algoritm: E se initializeaza arborele ca multime vida Dintre arcele disponibile (neselectate anterior) se alege arcul cu ponderea cea mai mica si care nu formeaza un ciclu prin adaugare la arbore Repeta pasul anterior de n – 1 ori

    22. Algoritmul lui Kruskal

    23. Functie pentru determinarea radacinii int radacina(int v,int tata[]) { int u = v; while(tata[u] >= 0) u = tata[u]; return u; } Ex.: v = 4 u = 4 tata[4]=2 u = 2 tata[2]=1 u = 1 tata[1]=-6 < 0 Algoritmul lui Kruskal

    24. Algoritmul lui Kruskal int kruskal(int a[][3],int nm, int nv, int b[][3]) { int tata[50],i,j, v1, v2, r1, r2; int c=0; for(i=0; i<nv; i++) tata[i]=-1; for(i=j=0; j<nv-1; i++) { v1=a[i][0]; v2=a[i][1]; r1=radacina(v1,tata); r2=radacina(v2,tata); if( r1 != r2 ) { if( tata[r1] < tata[r2] ) { tata[r1]+=tata[r2]; tata[r2]=r1; } else { tata[r2]+=tata[r1]; tata[r1]=r2; } b[j][0]=a[i][0]; b[j][1]=a[i][1]; b[j][2]=a[i][2]; c+=a[i][2]; j++; } } return c; }

    25. Spor la învatat!

More Related