Documente Academic
Documente Profesional
Documente Cultură
Dup ce vei parcurge aceast unitate de nvare, vei reui s: Intelegeti notiunea de arbore binar,modul de reprezentare si posibilitatile de parcurgere; Utilizati arborii binari inseilati pentru parcurgerea mai rapida a arborilor binari si gasirea succesorilor/predecesorilor unor noduri; Utilizati algoritmul lui Huffman pentru construirea unor coduri prefixate optime
2 Arbori binari ----------------------------------------------------------------------------------------------------------------------Arborii binari se pot reprezenta in felul urmator : fiecare nod este reprezentat printr-un camp INFO care contine informatia memorata in acel nod,precum si prin doua alte campuri LLINK si RLINK,care contin pointeri catre adresele radacinilor subarborilor stang,respectiv drept (L de la left si R de la right).Daca unul dintre acestia este vid, campul de legatura respectiv va fi reprezentat prin lambda. Un arbore binar se numeste strict daca fiecare nod are zero sau doi fii ; nodurile cu zero fii se numesc frunze sau noduri terminale. Arborii binari se utilizeaza pentru reprezentarea expresiilor aritmetice ; in radacina unui arbore apare ultimul operator (operatie) efectuata de acea expresie,iar subarborii stang,respectiv drept reprezinta cele doua expresii carora li se aplica acest operator. In acest fel in frunze apar operanzii (variabilele si constantele),iar in nodurile interne operatorii expresiei. Vom vedea ca arborii binari se utilizeaza pentru reprezentarea unor algoritmi de sortare si de cautare (regasire a informatiei),operatii care apar frecvent in bazele de date. Structura de arbore binar se poate transforma intr-o structura liniara in urma parcurgerii sau traversarii arborelui,adica a vizitarii nodurilor sale intr-o anumita ordine,rezultand un sir de noduri. Tipurile principale de parcurgeri sunt urmatoarele : -traversarea in preordine sau in ordinea RSD (radacina-stanga-dreapta) : se viziteaza intai radacina,subarborele ei stang si apoi subarborele drept,in aceeasi ordine ; -traversarea in inordine sau in ordinea simetrica SRD (stanga-radacina-dreapta) : se viziteaza intai subarborele stang,radacina si subarborele drept; -traversarea in postordine SDR (stanga-dreapta-radacina) : se viziteaza subarborele stang,apoi subarborele drept si la final radacina. Aceste definitii sunt recursive ; daca arborele este vid,nu se executa nimic. Pentru traversarea unui arbore binar se poate utiliza o stiva,ca in urmatorul exemplu :
Daca se face vizitarea nodului NOD(P) la pasul 3,inainte de depunerea valorii lui P in stiva,se obtine un algoritm pentru vizitarea arborelui in ordinea RSD. Deoarece in reprezentarea cu legaturi LLINK si RLINK a unui arbore binar multe campuri sunt lambda,adica nu contin nicio informatie utila,se poate utiliza o reprezentare insailata a arborelui.Daca insailarea se face relativ la 2 ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare
1. Arbori binari 3 ----------------------------------------------------------------------------------------------------------------------ordinea simetrica,atunci daca LLINK(P)=lambda ea se va inlocui cu adresa predecesorului nodului NOD(P) relativa la ordinea simetrica,iar daca RLINK(P)= lambda,atunci vom defini RLINK(P) ca fiind egal cu adresa succesorului nodului NOD(P) relativ la aceeasi ordine.Pentru a distinge legaturile de insailare de cele obisnuite vom folosi un camp de un singur bit in fiecare nod,care va avea valoarea TAG(P)=1 daca legatura este obisnuita si TAG(P)=0 daca legatura a fost creata prin insailare. Sa mai observam ca este necesara prezenta unui nou nod care sa joace rolul unui nod cap de lista si la care sa mearga lagatura de insailare stanga a primului nod,respectiv legatura de insailare dreapta a ultimului nod al arborelui in ordinea simetrica.Radacina arborelui poata fi gasita in campul LLINK al acestui nod,a carui adresa trebuie memorata printr-un pointer T. In felul acesta unele operatii asupra arborelui pot fi simplificate,de exemplu gasirea succesorului simetric al lui NOD(P) intr-un astfel de arbore,care poate fi gasit facand o parcurgere partiala a unui drum din arbore,fara a mai folosi o stiva auxiliara.
4 Arbori binari ----------------------------------------------------------------------------------------------------------------------Vrem sa gasim un cod prefixat w_1,w_2,,w_L peste alfabetul M,pentru care notand vectorul lungimilor acestor cuvinte prin (l_1,l_2, ,l_L),lungimea medie p_il_i sa fie minima.In aceasta formula s-a notat cu l(w_i)=l_i lungimea (numarul de litere) ale cuvantului w_i. Algoritmul lui Huffman construieste un arbore T optim plecandu-se cu o multime V formata din n frunze ,v_1,,v_n carora li se asociaza ponderile w_1,,w_n pentru 1in si cu o multime I de noduri interne ; I este initial multimea vida.Variabila k,initial egala cu 0 este un contor care numara nodurile interne construite pana in acel moment. Algoritmul se scrie astfel :
while k<n-1 do se selecteaza nodurile x_1 si x_2 din I U V cu cea mai mica pondere;se construieste un nou nod intern x cu ponderea egala cu suma ponderilor celor doua noduri x_1 si x_2 si se adauga x la multimea nodurilor interne I,se face kk+1 ; se elimina nodurile x_1 si x_2 din I U V
od ntrebare: Care sunt proprietatile arborilor optimi care justifica algoritmul lui Huffman?
Rspuns:
1. Daca w_i<w_j atunci nivelul frunzei v_i in orice arbore optim este mai mare sau egal cu nivelul frunzei v_j; 2. Exista un arbore optim in care frunzele cu cele mai mici ponderi sunt frati. Folosindu-se aceste doua proprietati se poate demonstra prin inductie dupa n,numarul de ponderi,ca algoritmul lui Huffman construieste un Exemplul 3 arbore optim (care liste circulare este unic),considerand multimea de Serializarea unei in general nu ponderi {w_1+w_2,w_3,,w_n} sortata crescator.
Testul de autoevaluare nr. 1 De ce expresiile aritmetice trebuie reprezentate prin arbori binari? Cate noduri interne are un arbore binar strict cu n frunze (n2) ? Cum se poate defini prin recurenta un arbore m-ar,in care fiecare nod care nu este frunza sa aiba cel mult m fii (m 2) si ordinea in care apar acestia sa aiba importanta ? Cum se poate defini parcurgerea unui arbore m-ar in ordinea RSD ? Ce structuri de date se pot folosi la aplicarea algoritmului lui Huffman astfel incat complexitatea sa timp sa fie liniara?. Justificati raspunsul.
6 Arbori binari ----------------------------------------------------------------------------------------------------------------------Tema de autoinstruire nr. 1 Consultai bibliografia pentru a afla : 1. Cum procedeaza algoritmul lui Huffman in cazul nebinar. Care este numarul de operatii efectuate de fiecare pas al algoritmului prezentat de parcurgere a unui arbore binar in ordinea simetrica,numar care depinde numai de numarul de noduri ale arborelui si nu de forma lui.
1. Arbori binari 7 ----------------------------------------------------------------------------------------------------------------------Pentru a afla care sunt cele 2 noduri cu cele mai mici ponderi trebuie sa comparam ponderile a 4 noduri,2 situate in varful stivei (fata cozii) frunzelor si 2 situate in fata cozii nodurilor interne,ceea ce se realizeaza cu o complexitate O(1). Se elimina nodurile astfel gasite si se adauga un nou nod cu ponderea egala cu suma celor doua ponderi la spatele cozii nodurilor interne.Deoarece numarul nodurilor interne create de algoritm este egal cu n-1,complexitatea lui folosind aceasta structura de date este egala cu O(n).
1.6. Bibliografie
[1] D. E. Knuth, Tratat de programarea calculatoarelor, Vol. I,Editura Tehnica, Bucuresti, 1973; retiparit, Editura Teora, 2000. [2] K.Mehlhorn, Data Structures and Algorithms, Springer-Verlag, Berlin,1984. [3] S. Sahni, Data Structures, Algorithms, and Applications in C++, Mc Graw Hill,1998. [4] S. Sahni, Data Structures, Algorithms, and Applications in Java, Mc Graw Hill, 2000. [5] I. Tomescu, Data Structures, Editura Universitatii din Bucuresti, 2008. 7 ------------------------------------------------------------------------------------------------------------------Structuri de date si tehnici de programare