1 / 37

Curs 3

Curs 3. arbori binari aplicaţie: reprezentarea expresiilor ca arbori coada cu priorităţi şi max-heap colecţii de mulţimi disjuncte şi “union-find”. Tipul de date abstract ArbBin. obiecte : arbori binari un arbore binar este o colecţie de noduri cu proprietăţile:

heller
Download Presentation

Curs 3

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. Curs 3 • arbori binari • aplicaţie: reprezentarea expresiilor ca arbori • coada cu priorităţi şi max-heap • colecţii de mulţimi disjuncte şi “union-find” 2008 - 2009

  2. Tipul de date abstract ArbBin • obiecte : arbori binari • un arbore binar este o colecţie de noduri cu proprietăţile: • orice nod are 0, 1 sau 2 succesori (fii, copii) • orice nod, exceptând unul singur – rădăcina, are un singur nod predecesor (tatăl, părintele) • rădăcina nu are predecesori • fiii sunt ordonaţi: fiul stâng, fiul drept (daca un nod are un singur fiu, trebuie menţionat care) • nodurile fără fii formează frontiera arborelui 2008 - 2009

  3. C E G A K M D B L F I H Arbori binari: exemplu rădăcină fiu stâng fiu drept subarbore stâng 2008 - 2009

  4. v t1 t2 Arbori binari: definiţia recursivă: • arborele cu nici un nod (vid) este arbore binar • daca v este un nod şi t1, t2 sunt arbori binari atunci arborele care are pe v ca rădăcină, t1 subarbore stâng al rădăcinii şi t2 subarbore drept al rădăcinii, este arbore binar 2008 - 2009

  5. ArbBin: operaţii • insereaza() • intrare: • un arbore binar t • adresa unui nod cu cel mult un fiu (tatăl noului nod) • tipul fiului adăugat (stânga, dreapta) • informaţia e din noul nod • ieşire • arborele la care s-a adăugat un nod ce memorează e; noul nod nu are fii 2008 - 2009

  6. C E G A K M D B L F I H ArbBin: inserare X Y 2008 - 2009

  7. ArbBin: eliminare • elimina() • intrare: • un arbore binar t • adresa unui nod fără fii şi adresa nodului-tată • ieşire • arborele din care s-a eliminat nodul dat (de pe frontieră) 2008 - 2009

  8. E G A K M D B F I H ArbBin: eliminare C L 2008 - 2009

  9. ArbBin :parcurgere preordine • parcurgePreordine() • intrare • un arbore binar t • o procedură viziteaza() • ieşire • arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea: • rădăcina (R) • subarborele stânga (S) • subarborele dreapta (D) 2008 - 2009

  10. ArbBin :parcurgere preordine - exemplu C E G A K M D B L F I H C, A, L, K, E, H, B, F, G, D, I M, 2008 - 2009

  11. ArbBin :parcurgere inordine • parcurgeInordine() • intrare • un arbore binar t • o procedură viziteaza() • ieşire • arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea S R D 2008 - 2009

  12. ArbBin :parcurgere inordine - exemplu C E G A K M D B L F I H K, A, F, B, H, L, E, C, M, I, D G, 2008 - 2009

  13. ArbBin: parcurgere postordine • parcurgePostordine() • intrare • un arbore binar t • o procedurăviziteaza() • ieşire • arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea S D R 2008 - 2009

  14. ArbBin :parcurgere postordine - exemplu C E G A K M D B L F I H H, B, K, L, F, A, E, M, I, D, G, C 2008 - 2009

  15. ArbBin: parcurgere BFS • parcurgeBFS() - Breadth-first search • intrare • un arbore binar t • o procedurăviziteaza() • ieşire • arborele binar t dar cu nodurile procesate cu viziteaza()în ordinea BFS (pe niveluri) 2008 - 2009

  16. ArbBin: parcurgere BFS - exemplu C E G A K M D B L F I H C, M, D, G, E, A, K, B, L, I, H F, 2008 - 2009

  17. C E G A M D K F L I B H ArbBin: implementare cu structuri înlănţuite • reprezentarea obiectelor 2008 - 2009

  18. ArbBin: structura unui nod • un nod v(aflat la adresa v) este o structură cu trei câmpuri: • v->inf /*informaţia memorata în nod*/ • v->stg /*adresa fiului stânga*/ • v->drp /*adresa fiului dreapta*/ 2008 - 2009

  19. Arbori binari: parcurgePreordine() procedure parcurgePreordine(v, viziteza) if (v = NULL) then return else viziteaza(v) parcurgePreordine(v->stg) parcurgePreordine(v->drp) end 2008 - 2009

  20. Arbori binari: implementarea parcurgerii BFS C E G A K M D ( C E G Coada = K ) A D M 2008 - 2009

  21. Arbori binari: implementarea parcurgerii BFS procedure parcurgeBFS(t, viziteza) begin if (t = NULL) then return else Coada coadaVida() insereaza(Coada, t) while (not esteVida(Coada)) citeste(Coada, v) viziteaza(v) if (vstg  NULL) then insereaza(Coada, v->stg) if (vdrp  NULL) then insereaza(Coada, v->drp) elimina(Coada) end 2008 - 2009

  22. Aplicaţie: expresii întregi • Expresii întregi • definiţie • exemple • Reprezentarea expresiilor ca arbori • similarităţi între cele două definiţii • arborele asociat unei expresii • notaţiile prefixate, infixate şi postfixate şi parcurgeri ale arborilor 2008 - 2009

  23. Definiţia expresiilor întregi <int> ::= ... –2 | -1 | 0 | 1 | 2 ... <expr_int> ::= <int> | <exp_int> <op_bin> <exp_int> | (<exp_int>) <op_bin> ::= + |  | * | / | % • reguli de precedenţă 12-5*2 este (12-5)*2 sau 12-(5*2)? • reguli de asociere 15/4/2 este (15/4)/2 sau 15/(4/2)? 15/4*2 este (15/4)*2 sau 15/(4*2)? 2008 - 2009

  24. + + * * 43 -12 5 / 17 66 34 21 Expresiile reprezentate ca arbori -12 + 17 * 5 – (43 + 34 / 21 * 66) 2008 - 2009

  25. + + * * 43 -12 5 / 17 66 34 21 Notaţiile postfixate şi prefixate • notaţia postfixată se obţine prin parcurge postordine -12, 17, 5, *, +, 43, 34, 21, /, 66, *, +, - • notaţia prefixata se obţine prin parcurge preordine -,+, -12, *, 17, 5, +, 43, *, /, 34, 21, 66 2008 - 2009

  26. Coada cu priorităţi: tip de data abstract • obiecte: structuri de date în care elementele sunt numite atomi; orice atom are un câmp-cheie numit prioritate 2008 - 2009

  27. Coada cu priorităţi: operaţii • citeste • intrare: o coadă cu priorităţi C • ieşire: atomul din C cu cheia cea mai mare • elimina • intrare: o coadă cu priorităţi C • ieşire: C din care s-a eliminat atomul cu cheia cea mai mare • insereaza • intrare: o coadă cu priorităţi C şi un atom at • ieşire: C la care s-a adăugat at 2008 - 2009

  28. 12 9 8 1 7 3 4 2 5 maxHeap • arbori binari compleţi cu proprietatea: pentru orice nod, cheia din acel nod este mai mare decât sau egală cu cheile din nodurile fii • exemplu 2008 - 2009

  29. maxHeap: eliminarea 12 9 8 1 7 3 4 2 5 2008 - 2009

  30. maxHeap: inserarea 10 12 9 8 1 7 3 4 2 5 2008 - 2009

  31. x a[i] y z 12 a[2*i+1] a[2*i+2] 9 8 1 7 3 4 2 5 maxHeap:implementarea cu tablouri (k) 1  k  n-1  a[k]  a[(k-1)/2] 12 9 8 7 1 3 4 5 2 0 1 2 3 4 5 6 8 7 2008 - 2009

  32. maxHeap: inserare procedure insereaza(a, n, cheie) begin n  n+1 a[n-1]  cheie j  n-1 heap  false while ((j > 0) and not heap) do k  [(j-1)/2] if (a[j] > a[k]) then swap(a[j], a[k]) j  k else heap  true end 2008 - 2009

  33. maxHeap - elimina procedure elimina(a, n) begin a[0]  a[n-1] n  n-1 j  0 heap  false while ((2*j+1 < n) and not heap) do k  2*j+1 if ((k < n-1) and (a[k] < a[k+1])) then k  k+1 if (a[j] < a[k]) then swap(a[j], a[k]) j  k else heap  true end 2008 - 2009

  34. 0 1 2 3 4 5 6 maxHeap: timp de execuţie • înălţime (adâncime) arbore = lungimea celui mai lung drum de la rădăcina la frontiera • lungime drum = număr arce • n =2k-1 • înălţime arbore = k = log (n+1) • operaţiile înserare/eliminare necesită timpul O(înălţime abore) = O(log n) 2008 - 2009

  35. Colecţii de mulţimi disjuncte: tip de dată abstract • obiecte: colecţii de submulţimi disjuncte (partiţii) ale unei mulţimi univers • operaţii: • find() • intrare: o colecţie C, un element x din univers • ieşire: submulţimea din C la care aparţine x • union() • intrare: o colecţie C, două elemente x şi y din univers • ieşire: C in care componentele lui x şi resp. y sunt reunite • single() • intrare: o colecţie C, un element x din univers • ieşire: C la care componenta lui x are pe x ca unic element 2008 - 2009

  36. 9 5 6 8 0 1 3 7 2 4 Colectii de multimi disjuncte: “union-find” • structura “union-find” • mulţimea univers = {0,1, ..., n-1} • submulţime = arbore • colecţie = pădure • reprezentarea unei păduri prin legătura părinte parinte 2008 - 2009

  37. Colecţii de mulţimi disjuncte: “union-find” function find(C, i) begin temp  i while (parinte[temp] >= 0) do temp  parinte[temp] return temp end procedure union(C, i, j) begin ri  find(i) rj  find(j) if (ri  rj) then parinte[rj]  ri end 2008 - 2009

More Related