Sunteți pe pagina 1din 21

Algoritmi i Structuri de date

Cuprins (Structuri elementare):


Structuri lineare
n alocare static n alocare dinamic - liste structuri lineare cu restricii la i/o: stive i cozi Structuri arborescente arbori oarecari arbori binari cutare folosind arbori binari Sortri interne Arbori binari strici. Aplicaii.

Cuprins (alta abordare):


tipuri de date structurate lineare ne-lineare: arbori i grafuri tehnici de sortare clasa algoritmilor de sortare bazai pe comparaii ntre chei sortare prin interclasare (merging) alte tipuri de sortri tehnici de cutare cutare linear cutare bazata pe comparaii ntre chei. structuri arborescente pt. cutare: arbori binari de cutare, arbori binari de cutare echilibrai AVL, tabele de dispersie alte structuri

ALGORITHMS + DATA STRUCTURES = PROGRAMS (N. Wirth, 1976)

avem de reprezentat mulimi (finite, de date omogene)


statice - componenta nu se schimb n timp dinamice - componenta se schimb n timp

mulimi pe care facem diverse operaii n scopul rezolvriiunorprobleme

Algoritmi
Algoritm = procedur de calcul (en. computational procedure) bine definit care primete o anumit valoare / mulime de valori ca intrare i produce o anumit valoare / mulime de valori ca ieire Problem(computaional) =relaiecerutntreintrarei ieire Algoritm = instrument pentru rezolvarea unri probleme = procedur de calcul care realizeaz relaia cerut ntre intrare i ieire

Exemplu de problem: sortare


Intrare: un ir (a1, a2, , an) Ieire: o permutare p a mulimii {1,,n} astfel nct ap(1) <= ap(2)<= <= ap(n) (se pot aduga i alte constrngeri, cum sunt: - intrarea i ieirea s ocupe acelai spiu de memorie - procedura s fie bazat pe comparri directe ntre chei ai < aj Un algoritm este corect (rezolv problema dat) dac i numai dac -se oprete - produce ieirea dorit

pseudo-cod; independen de implementare

Complexitatea/performana algoritmilor clase de complexitate


Pentru o problem pot exista mai muli algoritmi care s o rezolve. Aceti algoritmi sunt diferii dn punctul de vedere al performanei, care, pentru algoritmi se evalueaz n funcie de complexitate. Complexitatea unui algoritm este consumul de resuse n funcie de mrimea intrrii. Resursele avute de obicei n vedere sunt timpul i spaiul de memorie. Timpul/spaiul necesar pentru ca algoritmul s produc ieirea pentru o intrare de mrime n exprimat ca funcie de n reprezint complexitatea n timp/spaiu a algoritmului. Cu ct acest funcie crete mai ncet, performana este mai bun. Fiind dat o funcie f definit pentru numere naturale, faptul c raportul dintre complexitatea unui algoritm i f(n) tinde spre o constant este numit complexitate de ordn f(n). Se spune c algoritmul are clasa (sau ordinul) de complexitate O(f(n)). Exemple O(log n) , O(n) , O(nlog n), O(n2). Dac f(n) este polinom, se spune c algoritmul are complexitate polinomial.

Complexitatea/performana algoritmilor clase de complexitate (continuare)


n cele mai multe cazuri exist mai multe tipuri de complexitate, dup mulimea valorilor de intrare avut n vedere:

- complexitatea ca medie a mrimilor resursei consumate pentru toate intrrile de mrime n (de exemplu, pentru toi vectorii de lungime n);
-complexitatea n cazul cel mai defavorabil (de exemplu, pentru anumii algoritmi de sortare, cazul cel mai defavorabil este cel n care vectorul de intrare este ordonat descresctor); - complexitatea n cazul cel mai favorabil (de exemplu, pentru anumii algoritmi de sortare, cazul cel mai favorabil este cel n care vectorul de intrare este ordonat cresctor);

Complexitatea de timp a algoritmilor se evalueaz de obicei ca numr de operaii elementare efectuate (de exemplu, numrul de comparri ntre elementele unui vector, n cazul unui algoritm de sortare).

Exemplu:Sortareaprininseriedirect
pas iterativ (1): se ia componenta A[2] i se insereaz la locul ei n vectorul sortat de lungime 1, A[1], producnd un vector sortat de lungime 2.
pas iterativ (i): (pas) vectorul este mprit n dou pri: A[1], , A[i] este sortat cresctor i se numete destinaie, iar A[i+1], , A[n] este nc nesortat i se va numi surs. Se ia prima component dn surs, A[i+1], i se caut s se insereze la locul ei n destinaie. Cutarea locului lui A[i+1] n destinaie se face linear, parcurgnd destinaia de la dreapta la stnga i mutnd pe rnd cte o poziie la dreapta componentele care sunt mai mari dect valoarea de inserat, pn cnd gsim locul valorii x = A[i+1] i o inserm.

Sortareaprininseriedirect
procedure InsDir (A) {sortare prn insertie directa a vectorului A[1..n]} for i:= 2 to n do x:= A[i]; {se caut locul valorii x n destinaie} j:= i- 1; while (j > 0) and (x < A[j]) do A[j+1]:= A[j] j:= j- 1 endwhile {inserarea lui x la locul lui} A[j+1]:= x endfor endproc.

Sortareaprininseriedirect (continuare)
procedure InsDir1(A) {s. prn insertie directa a vectorului A[1..n] cu componenta marcaj A[0]} for i:= 2 to n do {se introduce valoarea n componenta marcaj} A[0]:= A[i]; {se caut locul valorii n destinaie} j:= i-1; while (A[0] < A[j]) do A[j+1]:= A[j] j:= j-1 endwhile A[j+1]:= A[0] endfor endproc.

Structur de date
Colecie finit de date omogene
o anume organizare - structur un anumit tip de acces la date

mpreun cu o mulime de operaii specifice - gestionarea structurii


algoritmi specifici ce implementeaz aceste operaii

Operaii de baz
Traversarea
operaia care acceseaz fiecare element al structurii, o singura dat, n vederea procesrii (vizitarea elementului)

cutarea
se caut un element cu cheie dat n structura cu sau fr succes const dintr-o traversare - eventual incomplet a structurii, n care vizitarea revine la comparaia cu elementul cutat problema cheilor multiple - gsirea primei apariii, a tuturor apariiilor

Operaii de baz (continuare)


Inserarea
adugarea unui nou element structurii, cu pstrarea tipului structurii

tergerea
extragerea unui element al structurii (eventual n vederea unei procesri), cu pstrarea tipului structurii pe elementele rmase Inserarea i tergerea - n reprezentarea mulimilor cu caracter dinamic are costuri mici

Operaii (continuare)
Iniializarea structurii cu structura vid Crearea - prin inserari repetate
(1) iniializarea structurii cu structura vid (2) un ciclu repetitiv (de lungime variabil) (a) se ia cte un element dintr-un fiier de intrare; (b) pentru fiecare asemenea element se apeleaz o procedur ce implementeaz operaia de inserare.

Operaii (continuare)
Combinare (en. merge)
din dou structuri de acelai tip se produce o alt structur, de acelai tip, ce conine reuniunea elementelor structurilor de intrare
ex: interclasarea a dou structuri liniare ordonate

Sortarea
ordonarea total a elementelor
sortarea mulimilor statice sortarea mulimilor dinamice

Observaii
Legtura operaiilor ntre ele
inserare/tergere - inverse una alteia inserare/tergere - sunt precedate de cutarea locului n care se fac cutarea - traversare (eventual incomplet)

NU toate operaiile se implementeaz pe toate structurile!


fiecare structur are operaii specifice

Clase principale de structuri


Lineare

Nelineare
arborescente grafuri

Bibliografie
1. D.E. Knuth :"Tratat de programarea calculatoarelor", vol. I si III 2. T. H. Cormen, C. E. Leiserson, R. L. Rivest: "Introduction to Algorithms", The MIT Press, 1990 3. N. Wirth: "Algorithms + Data Structures = Programs", Prentice Hall Inc., 1976 4. A. V. Aho, J. E. Hopcroft, J. D. Ullman: "Data Structures and Algorithms", Addison-Wesley Publ. Comp., 1983 5. S. Baase: "Computer Algorithms: Introduction to Design and Analysis", Addison-Wesley Publ. Comp., 1988 6. L. Nyhoff, S. Leestma: "Advanced programming n Pascal with Data Structures", MacMillan Publ. Comp. N.Y., 1988 7. L. Livovschi, H. Georgescu: "Sinteza si analiza algoritmilor", Ed. Stiintifica si Enciclopedica, Bucuresti, 1986 8. C. Ionescu Texe, I. Zsako: "Structuri arborescente cu aplicatiile lor", Ed. Tehnica, Bucuresti, 1990 9. I. Tomescu: "Data Structures", Editura Univ. dn Bucuresti, 1997 10. Rodica Ceterchi "Structuri de date", Editura Univ. dn Bucuresti, 2001

S-ar putea să vă placă și