You are on page 1of 5

Tema de cas 2

SDA

Teme de cas propuse


Identificarea subgrupelor se face n concordan cu pagina de web a cursului, n care este indicat n mod corespunztor numele asistentului care lucreaz cu fiecare subgrup. Programele implementate vor avea o structur modular.

Grupa 311CA - semigrupa a S se implementeze un program C care construiete un arbore binar de cutare cu c ei de tip caracter, utiliz!nd funciile discutate n curs "modificate corespunztor tipului c eilor# i salveaz arborele ntr$un fiier din catalogul curent al crui nume este dat ca parametru n linia de comand. Pe l!ng c eie, fiecare nod mai conine i o informaie de tip ntreg. Parcurgerea arborelui se va face S%&, iar scrierea n fiier se va face fr reveniri. 'n fiier va fi un arbore, nu o list de c ei. Pointerii vor fi valoarea offset$ului la care s$a scris informaia. 'n fiier se scriu numai informaiile asociate nodurilor, nu i c eile. (n al doilea program va trebui s refac n memorie arborele salvat n fiier, parcurg!nd arborele din fiier &S%. )rborele binar rezultat va avea c ei de tip ntreg, aceeai structur ca cel iniial, dar nu va mai fi arbore de cutare. *umele fiierului din catalogul curent este dat ca parametru n linia de comand. Pe ecran se vor tipri numai c eile.

Grupa 311CA - semigrupa b S se implementeze un program C care primete la intrare un fiier conin!nd un te+t cu cuvintele separate prin unul sau mai multe spaii, ,., ,,, ,-,. *umele fiierului se va da ca argument n linia de comand. Programul va construi un arbore binar de cutare cu c ei unice, n care c eile sunt cuvintele din te+t. .iecare nod mai conine o informaie care pstreaz frecvena apariiei cuv!ntului respectiv n te+t. %up parcurgerea te+tului i afiarea arborelui obinut, se va parcurge arborele S%&, se vor scoate r!nd pe r!nd toate nodurile din el i se va construi cu ele un arbore binar de cutare n care c eile sunt frecvenele apariiilor cuvintelor. Prin parcurgerea corespunztoare a acestui arbore, se vor afia cuvintele n ordinea descresctoare a frecvenei apariiei lor n te+t "se vor afia dublei /cuv!nt, numr apariii0#.

Grupa 312CA S se implementeze un program C care ofer printr$un meniu operaii de cutare i inserare n arbori )12. .iecare nod din arbore, pe l!ng c eia de tip ntreg va conine i o informaie "de tip ir de ma+im 34 caractere#, care va fi afiat n momentul gsirii c eii. Cutarea se va face utiliz!nd o funcie iterativ. 'n cazul operaiei de inserare se va preciza at!t c eia, c!t i informaia asociat. 5peraia de inserare trebuie s pstreze caracterul de arbore )12. %up fiecare inserare se va afia arborele "numai c eile#, pentru a verifica corectitudinea funciilor implementate. Pot fi utilizate sau adaptate funcii implementate pentru lucrul cu arbori binari de cutare.

Tema de cas 2

SDA

Grupa 313CA S se implementeze un program C care lucreaz cu arbori )12, n care e+ecut operaii de cutare i tergere a unor noduri, precizate prin c eia lor. .iecare nod din arbore, pe l!ng c eia de tip caracter, va conine i o informaie de tip ntreg, care va fi afiat n momentul gsirii c eii. Cutarea se va face utiliz!nd o funcie recursiv. 5peraia de tergere va trebui s tearg efectiv nodul din arbore i s pstreze proprietatea de arbore )12. %up fiecare tergere se va afia arborele, pentru a verifica corectitudinea funciilor implementate. 5peraiile asupra arborelui vor fi precizate prin comenzi de forma6 Cutarea elementului cu c eia + c+ sau C+ 7tergerea elementului cu c eia + d+ sau %+ )rborele iniial va fi construit cu funcia specific inserrii de noduri n arbore binar de cutare, adaptat pentru tipul corespunztor de nod. %atele vor fi introduse n urmtoarea ordine6 rdcina arborelui, urmat de descendenii direci ai rdcinii "nodurile de pe nivelul 8# descendeni precizai n ordinea de la st!nga la dreapta, urmai de descendenii lor "nodurile de pe nivelul 3# etc.

Grupa 314CA S se implementeze un program C care ofer printr$un meniu operaii de cutare i inserare n arbori 9 cu c ei de tip ntreg. 5peraia de inserare trebuie s pstreze caracterul de arbore 9. %up fiecare inserare se va afia arborele, pentru a verifica corectitudinea funciilor implementate. :oate informaiile de tip c eie dintr$un nod vor fi afiate ntre paranteze, iar toate nodurile de pe acelai nivel vor fi pe ecran pe acelai nivel "linie sau coloan la alegere6 deci se accept o afiare indentat, dar va fi mai bine apreciat una 3$%, cu nodurile de pe acelai nivel plasate pe aceeai linie a ecranului#.

Grupa 315CA S se implementeze primitivele de baz "adugare, tergere, cutare# pentru un arbore de cutare polimorfic "generic#. &elaia de ordonare pentru c eile arborelui va fi una definit de utilizator i transmis ca parametru funciilor menionate mai sus. 5peraia de eliminare va fi implementat obligatoriu prin metoda ;ibbard <inteligent=. "Suportul teoretic pentru aceast tem de cas este prezentat n continuarea acestui te+t#. .unciile vor fi e+ecutate prin comenzi dintr$un meniu.

Tema de cas 2

SDA

Eliminarea unui nod dintr-un arbore binar de cutare


'n e+punerea urmtoare, referitoare la eliminarea unui nod dintr$un arbore binar de cutare se consider urmtoarele notaii6 %ac A este un arbore i n un nod oarecare din acesta, atunci vom considera6 SD"n# > subarborele drept al nodului n SS"n# > subarborele st!ng al nodului n h"A# > nlimea arborelui A

tergerea nai !
?liminarea unei frunze dintr$un arbore este o problem trivial i se rezum la tergerea efectiv a frunzei din arbore. Pentru un nod intern, abordarea cea mai simpl, dar i cea mai ineficient este urmtoarea6 .ie un nod n cu o c eie k ce se dorete a fi tears din arbore. ?liminarea poate fi reprezentat grafic n felul urmtor ".igura 8#6 n S%"n# r D r ?liminarea nodului n cu c eia k 84 A ?liminarea nodului cu c eia D @min C B B SS"A# SS"n# 8 3 SS"A# 84 C

@ SS"n#

8 A3

@min

#igura 1 ?liminarea <naiva= stanga dintr$un arbore binar de cautare

#igura 2 ?liminarea nodului cu c eia D duce la degenerarea arborelui

S considerm e+emplul prezentat n .igura 3. Se constat c oric!t de ec ilibrat ar fi un arbore, la tergerea unui nod nlimea unui subarbore va crete, iar dup o serie de eliminri succesive el va degenera ntr$o list. %e remarcat c se poate aplica i metoda n oglid "simetric#, numit eliminarea naiv dreapta dintr$un arbore binar de cutare.

Eliminarea "ibbard
%efinim6
ma+ min

"SS"n## lungimea drumului de la rdcina SS"n# la nodul cu @ma+ din SS"n#

"S%"n## lungimea drumului de la rdcina S%"n# la nodul cu @min din S%"n#

Tema de cas 2

SDA

Cu aceste notaii, reprezentarea grafic a eliminrii ;ibbard st!nga a nodului n ce conine c eia k este prezentat n .igura D.

SS"n# r A SS"A#

n @ma+ S%"n# r

ma+

S%"n# ?liminarea nodului n cu c eia k A SS"A#

@E E

ma+ @ma+

@E SS"ma+#

SS"ma+#
#igura 3 ?liminarea ;ibbard st!nga dintr$un arbore binar de cutare

?ste evident c se poate aplica i metoda de eliminarea n oglind "simetric#, connst!nd n aducerea nodului cu c eie minim din subarborele drept al nodului n cu c eia k de eliminat. 5 abordare eficient a problemei presupune determinarea nlimilor ma+"SS"n## i min "S%"n## definite anterior i aplicarea metodei stnga respectiv dreapta n funcie de ma+imum dintre nlimile celor doi subarbori "st!ng i drept#. 1om numi metoda ;ibbard <inteligent= aceast abordare a eliminrii unui nod. &elu!nd e+emplul anterior se constat c ma+/ min ceea ce duce la aplicarea eliminrii Hibbard dreapta i la scderea nlimii totale a arborelui "vezi .igura B#. 5 urmare evident a faptului c nalimea arborelui scade este aceea c viitoarele cutri n arbore se vor face mai rapid.

D 8 3 B C 84 ?liminarea nodului cu c eia D 8 3

B 84 C

#igura 4 ?liminarea nodului cu c eia D duce la scderea nlimii arborelui i deci la o optimizare a cutrilor viitoare

Tema de cas 2

SDA