programare s˘i structuri de datemarianzsu/postuniv/curs/curs07.pdfde exemplu: g asit˘i o solut˘ie...

Post on 07-Mar-2020

4 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Arbori n-ariArbori binari

PROGRAMARE SI STRUCTURI DE DATECURS 7

Lect. dr. Onet - Marian Zsuzsanna

Facultatea de Matematica si Informatica UBBın colaborare cu NTT Data

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Cuprins

Arbore

Arbore binar

Arbore binar de cautare

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori

Un arbore este o structura de date alcatuita din noduri,fiecare nod poate sa aiba 0 sau mai multi descendenti (copii)si fiecare nod are un singur parinte.

Intr-un arbore, toate nodurile trebuie sa fie conectate (trebuiesa existe un drum de a ajunge de la fiecare nod la fiecare altnod).

Nu pot exista cicluri ıntr-un arbore: pornind de la un nod siparcurgand alte noduri, nu putem ajunge ınapoi la nodul de lacare am plecat.

Intr-un arbore cu n noduri exista n-1 legaturi.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Exemplu de arbore:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Nu este arbore (nu este conectata), nu pot ajunge de la nodulA la L (de exemplu).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Nu este arbore (exista un ciclu A - C - E - A)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Nodul care nu are parinte se numeste radacina. Intr-un arboreexista o singura radacina.

Nodurile care nu au descendenti se numesc frunze.

Inaltimea arborelui este cel mai lung drum (ca numar delegaturi) de la radacina la o frunza.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina

- nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze -

nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:

G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D:

A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui:

3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

In functie de numarul maxim de descendenti care pot existapentru un nod, putem vorbi de:

Arbore Binar (maxim 2 descendenti - care se numescdescendent stang si descendent drept)

Arbore N-ar (mai mult de 2 descendenti)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbore Binar

Exemplu de Arbore Binar

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbore N-ar

Exemplu de Arbore N-ar

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Operatii pentru arbori

Intr-un arbore (binar sau n-ar) nu aveam acele operatii cu caresuntem obisnuiti de la celelalte structuri de date:

Nu aveam adaugare

Nu avem stergere

Nu avem cautare

etc.

Motivul este ca arbori (arbore n-ar si arbore binar simplu) nuprea sunt folositi ca reprezentare pentru containere.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Atunci la ce putem folosi arbori, daca nu la reprezentarea unorcontainere?

Arbori n-ari pot fi folositi ın probleme de cautare

Arbori binari pot fi folositi pentru reprezentare de arboregenealogic, de expresii aritmetice, etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Probleme de cautare

La problemele de cautare/optimizare cautam o solutie pentrudiferite probleme, pentru care nu putem gasi ın mod ”simplu”solutia

De exemplu: gasiti o solutie pentru problema canibalilor si amisionarilor: pe malul stang al unui rau se afla 3 canibali si 3misionari. Ei trebuie sa ajunga la malul drept folosind o barcaın care ıncap maxim 2 persoane (incluzand persoana careconduce barca). Daca la un moment dat pe un mal sunt maimulti canibali decat misionari, ei vor manca misionarii. Gasitio modalitate de a traversa raul.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Probleme de cautare

Pentru a rezolva o problema cu metode de cautare, estenecesara modelarea problemei:

Trebuie sa existe un spatiu al starilor posibile

Trebuie sa avem o stare initiala

Trebuie sa avem una sau mai multe stari finale

Trebuie sa putem ajunge dintr-o stare ıntr-o alta stare

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Canibali si misionari

Putem reprezenta o stare din aceasta problema prinspecificarea persoanelor pe malul drept si pe malul stang (sitrebuie sa stim unde e barca).

Notam misionarii cu MNotam canibalii cu CNotam barca cu BNotam raul cu

Astfel starea initiala (de unde pornim) e MMMCCCB (toatalumea e la malul stang)

Iar starea finala (unde vrem sa ajungem) este MMMCCCB(toata lumea e la malul drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Canibali si misionari

Dintr-o stare putem ajunge ın starea urmatoare daca 1 sau 2persoane trec cu barca pe celalalt mal.

De exemplu, din starea initiala MMMCCCB putem ajunge ınurmatoarele stari

MMMCC CB (1 canibal trece pe malul drept)MMMC CCB (2 canibali trec pe malul drept)MMCCC MB (1 misionar trece pe malul drept)MCCC MMB (2 misionari trec pe malul drept)MMCC MCB (1 misionar si 1 canibal trece pe malul drept)

Putem construi un arbore din stari, unde radacina este stareainitiala, si starile ın care putem ajunge dintr-o stare reprezintadescendentii lui.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Canibali si misionari

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Probleme de cautare

Scopul nostru este sa gasim un drum, de la starea initiala la ostare finala

Pentru a gasi acest drum, trebuie sa parcurgem arborele(adica sa vizitam, toate nodurile - pana gasim cel cautat).

Exista 2 variante simple de parcurgere:

Parcurgere ın adancime (DFS - Depth First Search)

Parcurgere ın latime (BFS - Breadth First Search)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Parcurgerea ın adancime este o parcurgere ın care luam primuldescendent al unui nod, dupa care luam primul descendent alacestui nod, si asa mai departe pana ajungem la o frunza.

Dupa ce ajungem la o frunza, urcam ınapoi la parinte si dacamai are noduri nevizitate, luam pe primul si iar coboram panala o frunza.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Sa vedem pas cu pas parcurgerea ın adancime pentru arborelede mai sus.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Incepem cu radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui A, C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui C, E.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui E, B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui B, I.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

I nu are descendent (deci nu putem merge ın jos), urcam la B.B nu are alt descendent, urcam la E. E are alt descendent,deci mergem pe G.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

G nu are descendent, urcam la E. E nu mai are alt descendent,urcam la C. C are alt descendent, deci mergem pe F.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

F nu are descendent, urcam la C. C nu are alt descendent,urcam la A. A are alt descendent, mergem pe D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Mergem pe primul descendent al lui D, X.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

X nu are descendent, urcamam la D. Mergem pe al 2-leadescendent al lui D, H.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Mergem pe primul descendent al lui H, K.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

K nu are descendent, urcam la H. H are alt descendent,coboram pe L.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

L nu are descendent, urcam la H. H nu are alt descendent,urcam la D. D nu are alt descendent, urcam la A. A nu are altdescendent, dar nici parinte, deci am terminat de parcursnodurile.

Ordinea ın care am parcurs nodurile este: A, C, E, B, I, G, F,D, X, H, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgerea ın adancime

Pe desen pare simplu. Nici implementarea nu este maicomplicata. Pur si simplu avem nevoide de o stiva ın carepunem nodurile.

Pornim cu o stiva ın care punem radacina arborelui.

Cat timp stiva nu este vida scoatem un element din stiva(vizitam nodul corespunzator)

Daca nodul scos din stiva are descendenti, adaugamdescendentii lui ın stiva.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Adaugam ın Stiva radacina. Presupunem ca un nod estevizitat, cand este sters din stiva.

Stiva: ALect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (A), ıl vizitam, si adaugamdescendentii lui A ın stiva (de la dreapta la stanga).

Stiva: D, C

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (C), ıl vizita, si adaugamdescendentii lui C ın stiva (de la dreapta la stanga).

Stiva: D, F, E

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (E), ıl vizita, si adaugamdescendentii lui E ın stiva (de la dreapta la stanga).

Stiva: D, F, G, B

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (B), ıl vizita, si adaugamdescendentul lui B ın stiva

Stiva: D, F, G, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (I), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca I nu are descendenti.

Stiva: D, F, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (G), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca G nu are descendenti.

Stiva: D, F

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (F), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca F nu are descendenti.

Stiva: D

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (D), ıl vizitam, si adaugam ınstiva descendentii lui D (de la dreapta la stanga)

Stiva: H, X

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (X), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca X nu are descendenti.

Stiva: H

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (H), ıl vizitam, si adaugamdescendentii lui H ın stiva (de la dreapta la stanga)

Stiva: L, K

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (K), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca K nu are descendenti.

Stiva: L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (L), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca L nu are descendenti.

Stiva:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın adancime

Stiva este vida, deci am terminat de parcurs toate nodurile.

Ordinea ın care am parcurs nodurile este: A, C, E, B, I, G, F,D, X, H, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Cealalta parcurgere des ıntalnita la arbori n-ari esteparcurgerea ın latime.

Pornim de la radacina.

Vizitam pe rand toti descendentii radacinii, dupa aceeadescendentii descendentilor si asa mai departe.

Practic, doar cand terminam cu toate nodurile de pe un nivel,trecem la nodurile de pe nivelul urmator.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Implementarea parcurgerii ın latime este identica cuimplementarea parcurgerii ın adancime, doar se foloseste ocoada ın loc de stiva:

Pornim cu o coada ın care punem radacina arborelui.

Cat timp coada nu este vida scoatem un element din coada(vizitam nodul corespunzator)

Daca nodul scos din coada are descendenti, adaugamdescendentii lui ın coada.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Adaugam ın coada radacina. Presupunem ca un nod estevizitat, cand este sters din coada.

Coada: A

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (A), ıl vizitam, si adaugamdescendentii lui A ın coada.

Coada: C, D

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (C), ıl vizitam, si adaugamdescendentii lui C ın coada

Coada: D, E, F

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (D), ıl vizitam, si adaugamdescendentii lui D ın coada

Coada: E, F, X, H

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (E), ıl vizitam, si adaugamdescendentii lui E ın coada

Coada: F, X, H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (F), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca F nu are descendenti.

Coada: X, H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (X), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca X nu are descendenti.

Coada: H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (H), ıl vizitam, si adaugam ıncoada descendentii lui H.

Coada: B, G, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (B), ıl vizitam, si adaugam ıncoada descendentul lui B

Coada: G, K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (G), ıl vizitam, si nu adaugamnimic ın coada, pentru ca G nu are descendenti.

Coada: K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (K), ıl vizitam, si nu adaugamnimic ın coada

Coada: L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (L), ıl vizitam, si nu adaugamnimic ın coada, pentru ca L nu are descendenti.

Coada: I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (I), ıl vizitam, si nu adaugamnimic ın coada, pentru ca I nu are descendenti.

Coada:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın latime

Coada este vida, deci am terminat de parcurs toate nodurile.

Ordinea ın care am parcurs nodurile este: A, C, D, E, F, X, H,B, G, K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori binari

Un arbore ın care fiecare nod are maxim 2 descendenti, senumeste arbore binar.

Pentru un arbore binar avem nume pentru descendenti, existadescendent/fiu stang si descendent/fiu drept.

Daca un nod are un singur descendent, trebuie specificat dacae fiul stang sau cel drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste plin daca pe fiecare nivel arenumarul maxim de noduri posibile.

Un arbore binar plin cu k niveluri, are 2k − 1 noduri.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste complet daca poate fi obtinutdintr-un arbore binar plin, eliminand niste noduri de la ultimulnivel, de la dreapta spre stanga (sa avem structura deansamblu).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste degenerat daca are n noduri pe nniveluri (si ınaltime n − 1).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori binari - Parcurgere

Pe langa cele 2 parcurgeri discutate pentru un arbore n-ar(DFS si BFS), la un arbore binar mai exista 3 parcurgeri:

Parcurgere ın preordine

Parcurgere ın inordine

Parcurgere ın postordine

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine I

La parcurgere ın preordine tot timpul se viziteaza prima dataparintele, dupa care subarborele stang, dupa care subarboreledrept. Cand vizitam subarbori, tot ın preordine le vizitam.

Sa vedem un exemplu concret

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine II

Incepem cu radacina (dupa care vizitam subarborele stang -tot ın preordine - si subarborele drept - tot ın preordine).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine III

Continuam cu subarborele stang (aici iar vizitam radacina,subarbore stang si subarbore drept).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine IV

Continuam cu subarbore stang al lui B (radacina, subarborestang, subarbore drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine V

Continuam cu subarborele stang al lui D (radacina, subarborestang, subarbore drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine VI

E nu are descendenti, mergem ınapoi la D si vizitamsubarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine VII

F nu are descendenti, mergem ınapoi la B, si vizitamsubarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine VIII

I nu are descendenti, urcam la A si vizitam subarborele drept(radacina, subarbore stang, subarbore drept).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine IX

Mergem pe subarbore stang al lui C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine X

G nu are subarbore stang, mergem pe cel drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine XI

J nu are descendenti, urcam la C si vizitam subarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: A, B, D, E, F, I, C, G, J, H (aceeasi ordine ca laDFS, pentru ca DFS e un fel de parcurgere preordine).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine XIII

Subalgoritmul de parcurgere poate fi implementat cel mai usorın mod recursiv. Pentru implementare ne trebuie oreprezentare pentru un arbore. Arborele fiind alcatuit dinnoduri, ne trebuie structura nod:

Nod:info: TElemstang: ↑ Noddrept: ↑ Nod

Iar arborele binar nu are altceva decat o radacina

ArboreBinar:rad: ↑ Nod

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine XIV

Cand lucram recursiv cu arbori binari ın general functiarecursiva primeste ca parametru un nod.

subalgorithm preordineRecursiv (nod: ↑ Nod) is://nod este un nod. Poate fi NIL

if nod 6= NIL thenprint [nod].infopreordineRecursiv([nod].stang)preordineRecursiv([nod].drept)

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın preordine XV

Dar avem nevoie si de functia care primeste ca parametru unarbore, si care apeleaza functia recursiva (porneste apelulrecursiv) cu radacina arborelui.

subalgorithm parcurgePreordine() is:preordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine I

La parcurgere ın inordine tot timpul se viziteaza prima datasubarborele stang, urmat de parintele, urmat de subarboreledrept. Cand vizitam subarbori, tot ın inordine le vizitam.

Sa vedem un exemplu concret:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine II

Incepem cu subarbore stang de la radacina. Subarborele tot ıninordine se viziteaza, deci ıncep cu subarborele stang si asamai departe, pana gasesc un nod care nu are subarbore stang.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine III

Dupa subarbore stang vizitat, vizitam radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine IV

Continuam cu subarbore drept al lui D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine V

Continuam cu B (care are subarborele stang vizitat deja).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine VI

Mergem pe subarborele drept de la B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine VII

Radacina A are deja subarborele stang vizitat, acum vizitamA-ul.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine VIII

Mergem pe subarbore drept de la A. Aici iar ne trebuiesubarbore stang prima data, si cum G nu are subarbore stang,G va fi primul nod vizitat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine IX

Mergem pe subarbore drept al lui G.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine X

Acum putem vizita C (avem subarborele stang vizitat deja)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine XI

La final mai vizitam subarbore drept de la C, H.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: E, D, F, B, I, A, G, J, C, H

Implementarea parcurgerii se face similar cu preordine, sifolosim aceeasi reprezentare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine XIII

subalgorithm parcurgeInordine() is:inordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın inordine XIV

subalgorithm inordineRecursiv (nod: ↑ Nod) is//nod este un nod. Poate fi NIL

if nod 6= NIL theninordineRecursiv([nod].stang)print [nod].infoinordineRecursiv([nod].drept)

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine I

La parcurgere ın postordine tot timpul se viziteaza prima datasubarbore stang, urmat de subarbore drept, si la final radacina.

Sa vedem un exemplu concret

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine II

Incepem cu subarbore stang si prima data vizitam nodul E.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine III

Continuam cu subarborele drept al radacinii lui E, adica D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine IV

Dupa ce am vizitat subarborele drept si stang vizitamradacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine V

Continuam cu subarborele stang al lui B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine VI

Acum vizitam B (subarborele stang si drept e vizitat deja).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine VII

Am vizitat subarborele stang pentru radacina A, acum vizitamsubarborele drept. Incepem cu J.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine VIII

Putem vizita G (subarbore stang nu are, cel drept este vizitat).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine IX

Mergem pe subarbore drept al lui C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine X

Vizitam C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine XI

La final vizitam radacina A.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: E, F, D, I, B, J, G, H, C, A.

Implementarea parcurgerii se face similar cu preordine siinordine, si folosim aceeasi reprezentare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine XIII

subalgorithm parcurgePostordine() ispostordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Parcurgere ın postordine XIV

subalgorithm postordoneRecursiv (nod: ↑ Nod) is//nod este un nod. Poate fi NIL

if nod 6= NIL thenpostordineRecursiv([nod].stang)postordineRecursiv([nod].drept)print [nod].info

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Preordine, inordine, postordine

Cele 3 parcurgeri pot fi retinute cel mai usor asa:

Subarborele stang(S) este vizitat tot timpul ınainte desubarborele drept (D).

Pozitia radacinii (R) se modifica:

PREordine: R, S, DINordine: S, R, DPOSTordine: S, D, R

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Intrebare I

Daca am pentru un arbore parcurgerea ın inordine si ınpreordine, cum pot reconstrui arborele?

Cum arata arborele care are urmatoarele noduri:

J I B A G F H D C E (inordine)

A B I J C D F G H E (preordine)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Intrebare II

Idee:

Din preordine stiu care e radacina (A).

Inordine este S, R, D, daca stiu radacina, pot gasi sanga (J IB) si dreapta (G F H D C E)

Deci subarborele stang contine J I B (inordine) B I J(preordine)

Subarborele drept contine G F H D C E (inordine) C D F G HE (preordine)

Continuam recursiv

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Intrebare III

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman

O problema ın care se folosesc arbori binari este codificareaHuffman: avand un text, vrem sa-i atribuim un cod binar(adica o secventa de 0 si 1) fiecarui simbol (litera) din text.

In codificare Huffman, codurile au lungimi diferite, ın principiuvrem ca acele simboluri care apar mai des, sa primeasca uncod mai scurt.

Daca codurile au lungimi diferite, nu orice secventa de 0 si 1reprezinta un cod valid: nici-un cod nu poate sa fie prefixulunui alt cod.De exemplu - daca avem urmatoarele coduri:

a - 01b - 11c - 1101d - 1

daca vrem sa decodam textul 110101 nu stim daca este:ddaa, sau ca, sau baa

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman

Pentru codificare Huffman avem nevoie de un text ın care sanumaram frecventele simbolurilor (sau ne trebuie directfrecventele).

Pentru fiecare simbol cream un arbore binar format doardintr-un nod (care contine simbolul respectiv).

Adaugam aceste arbori ıntr-o coada cu prioritati, iarprioritatea pentru fiecare arbore este frecventa simbolului.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman

Cat timp ın coada cu prioritati sunt minim 2 elemente,stergem din coada arborii cu prioritatea minima. Construimdin acesti doi arbori un arbore nou, care are acesti 2 arbori cadescendent stang si drept. Punem noul arbore ınapoi ın Coadacu prioritati si prioritatea lui este suma prioritatilor pentru cei2 arbori uniti.

La final, cand coada cu prioritati contine un singur element,acel arbore ne da codurile. Fiecare frunza din arbore contineun simbol, iar codul simbolului este construit traversand de laradacina spre nodul frunza, adaugand ın cod 0 cand mergempe stanga si 1 cand mergem pe dreapta.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Adauga aceste noduri ıntr-o Coada cu Prioritati ın careprioritatea va fi frecventa simbolului (cifra de dupa litera)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (arborele cu n siarborele cu m) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 2

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (cei doi arbori cuprioritatea 2) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 4

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (cei doi arbori cuprioritatea 3) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati le unim si avem unsingur arbore

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a determina codul pentru fiecare simbol, traversam dela radacina la o frunza, adunam 0 la cod cand mergem pesubarborele stang si 1 cand mergem pe cel drept.

a - 00

e - 01

n - 100

m - 101

r - 11

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a decoda un mesaj, pornim de la radacina si mergemın stanga daca codul curent este 0 si ın dreapta daca codul e1. Cand ajungem la o frunza, am decodat o litera, reıncepemde la radacina.

Sa decodam codul: 10100110101

Pornim de la radacina. Codul curent este 1, mergem ladreapta, de acolo stanga si iar dreapta. Am ajuns la litera m.

Continuam de la radacina cu restul codului: 00110101

etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a decoda un mesaj, pornim de la radacina si mergemın stanga daca codul curent este 0 si ın dreapta daca codul e1. Cand ajungem la o frunza, am decodat o litera, reıncepemde la radacina.

Sa decodam codul: 10100110101

Pornim de la radacina. Codul curent este 1, mergem ladreapta, de acolo stanga si iar dreapta. Am ajuns la litera m.

Continuam de la radacina cu restul codului: 00110101

etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbore Binar de Cautare - ABC

Un Arbore Binar de Cautare (ABC) este un arbore binar ıncare pentru fiecare nod, nodurile din subarborele stang continelemente mai mici (sau egale) decat el, si nodurile dinsubarborele drept contin elemente mai mare decat el.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Exemplu de ABC

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC

Pot exista mai multi ABC-uri cu exact aceleasi elemente darcare au structura diferita.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC

Daca parcurgem un ABC ın inordine (stanga, radacina,dreapta), vom avea toate elementele ın ordine crescatoare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC

Pentru un ABC putem avea operatii care nu au existat laarbori n-ari sau arbori binari:

adaugarestergerecautare

ABC poate fi folosit ca reprezentare pentru containereordonate ın care nu exista pozitii*: multime ordonata, colectiaordonata, dictionar ordonat, etc.

*se poate implementa si o lista ordonata pe ABC, dar e un picmai complicat (si nu vom discuta aceasta implementare)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - reprezentare

Reprezentarea pentru un ABC este similara cu reprezentareaunei arbori binari simple: avem nevoie de structura Nod, siavem nevoie de structura ABC.

Nod:info: TElemstang: ↑ Noddrept: ↑ Nod

ABC:rad: ↑ Nod

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare

Cum putem verifica daca un element apare sau nu ın ABC(adica daca am un nod care contine elementul respectiv)?

Mecanismul este similar cu cautarea binara: pornesc de laradacina si continui ori pe subarborele stang, ori pe cel drept,ın functie de cum este elementul cautat fata de cel din nodulcurent.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare

Cum putem verifica daca un element apare sau nu ın ABC(adica daca am un nod care contine elementul respectiv)?

Mecanismul este similar cu cautarea binara: pornesc de laradacina si continui ori pe subarborele stang, ori pe cel drept,ın functie de cum este elementul cautat fata de cel din nodulcurent.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare I

Sa cautam elementul 15 ın arborele de mai jos

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare II

Pornim cu un nod curent, care este radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare III

Daca nodul curent nu contine elementul cautat, comparamelementul cautat cu elementul din nodul curent. Dacaelementul cautat este mai mic, continuam ın subarbore stang(nod curent devine stangul lui nod curent), altfel continuamın subarbore drept. Din moment ce 10 < 15, mergem pesubarbore drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare IV

Continuam pe subarborele stang (15 < 30)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare V

Continuam pe subarborele stang (15 < 20)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare VI

Am gasit nodul, deci cautarea a fost cu succes.

Daca am fi cautat elementul 16, tot la fel am fi facut (16 >10, 16 < 30, 16 < 20), dar cand nodul curent era 15,continuam pe subarborele drept, care nu exista. Cand nodulcurent devine NIL, putem spune ca elementul nu se gaseste ınarbore.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare

function cautare(elem: TElem) is://elem este elementul cautat

curent: ↑ Nodcurent = this.rad //curent este ↑ Nodwhile curent 6= NIL AND [curent].info 6= elem execute

if elem < [curent].info thencurent = [curent].stang

elsecurent = [curent].drept

end ifend whileif curent == NIL then

return Falselse

return Adevaratend if

end function

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare

Cat este complexitatea algoritmului de cautare?

Desi tindem sa credem ca la un ABC complexitatea va filogaritmica, din moment ce putem avea si arbori degenerati (nnoduri pe n nivele), complexitatea ın caz defavorabil este defapt Θ(n).

In caz mediu, complexitatea este Θ(log2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Cautare

Cat este complexitatea algoritmului de cautare?

Desi tindem sa credem ca la un ABC complexitatea va filogaritmica, din moment ce putem avea si arbori degenerati (nnoduri pe n nivele), complexitatea ın caz defavorabil este defapt Θ(n).

In caz mediu, complexitatea este Θ(log2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare I

Cum adaugam un element nou ıntr-un ABC?

Noul element va fi obligatoriu o frunza, si trebuie sa cautamnodul la care ıl adaugam ca frunza. Tot timpul exista unsingur astfel de nod.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare II

Sa adaugam elementul 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare III

Pornim de la radacina. Vom folosi 2 noduri: nod curent(portocaliu) si parintele nodului curent (albastru). Initialnodul curent este radacina si parintele de NIL.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare IV

La fiecare pas parintele ia valoarea nodului curent, iar nodulcurent merge pe stanga sau dreapta ın functie de comparatiaelementului de adaugat cu elementul din nodul curent. Aici,din moment ce 6 < 10 mergem pe stanga

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare V

6 < 8, mergem pe stanga.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare VI

6 > 4, mergem pe dreapta.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare VII

6 < 7, mergem pe stanga.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare VIII

Acum nodul curent este NIL, ceea ce ınseamna ca stim ca lanodul parinte (cercul albastru) trebuie sa adaugamdescendentul. Comparam valoarea din parinte cu elementul deadaugat ca sa stim daca ıi adaugam descendent stang saudrept (stang la noi).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare IX

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare

subalgorithm adauga(elem: TElem) is://elem este elementul de adaugat

nodNou, curent, parinte: ↑ Nod[nodNou].info = elem[nodNou].stang = NIL[nodNou].drept = NILif this.rad == NIL then

this.rad = nodNouelse

curent = this.radparinte = NIL //curent si parinte sunt ↑ Nodwhile curent 6= NIL execute

parinte = curentif elem ≤ [curent].info then

curent = [curent].stangelse

curent = [curent].dreptend if

end while//continuam pe pagina urmatoareLect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare

if elem ≤ [parinte].info then[parinte].stang = nodNou

else[parinte].drept = nodNou

end ifend if

end subalgorithm

Complexitate:

O(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Adaugare

if elem ≤ [parinte].info then[parinte].stang = nodNou

else[parinte].drept = nodNou

end ifend if

end subalgorithm

Complexitate: O(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere

Stergerea este o operatie un pic mai complicata, pentru catrebuie sa ne asiguram ca nu stricam arborele.

La stergere prima data cautam nodul pe care vrem sa-lstergem si avem 3 cazuri:

Nodul nu are descendenti deloc

Nodul are un singur descendent

Nodul are 2 descendenti

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere II

Daca nodul de sters nu are descendenti, ıl putem sterge faraprobleme.

De exemplu daca vrem sa stergem nodul 7.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere III

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere IV

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere V

Daca nodul de sters are un singur descendent, atunci legamacest descendent de parintele nodului.

De exemplu daca vrem sa stergem nodul 20.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere VI

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere VII

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere VIII

Daca vrem sa stergem un nod cu 2 descendenti avem 2optiuni (ambele sunt corecte, oricare poate fi folosita):

Cautam elementul maxim din subarbore stang, ınlocuimcontinutul nodului de sters cu acest maxim, si stergem nodulcu maxim.

Cautam elementul minim din subarbore drept, ınlocuimcontinutul nodului de sters cu acest minim, si stergem nodulcu minim.

Sa stergem nodul 10.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere IX

Maximul din stanga, este elementul cel mai la dreapta dinsubarborele stang (pornesc pe subarborele stang si merg peramura dreapta pana dau de un nod fara descendent drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere X

Mutam 9 ın radacina, si stergem nodul cu 9.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere XI

Cealalta varianta:

Minimul din dreapta, este elementul cel mai la staga dinsubarborele drept (pornesc pe subarborele drept si merg peramura stanga pana dau de un nod fara descendent stang)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

ABC - Stergere XII

Mutam 15 ın radacina, si stergem nodul cu 15.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati

Am vazut ca la ABC avem complexitate O(n) pentru operatii.

Daca vrem sa asiguram complexitate O(log2n) pentru operatiitrebuie sa ne asiguram ca ABC-ul este echilibrat:

Diferenta de ınaltime dintre subarborele stang si cel drept este1, 0 sau -1.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati

Este echilibrat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati

Nu este echilibrat (8 are adancime 2 la stanga si 0 la dreapta).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati I

Pentru a avea arbori echilibrati, dupa operatii de adaugare sistergere, daca se strica echilibrul, aplicam rotatii.

De exemplu:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati II

Adaugam 13 si nu mai este echilibrat

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Arbori n-ariArbori binari

Arbori echilibrati III

Aplicam o rotatie la nodul 20.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

top related