Sunteți pe pagina 1din 40

STRUCTURI DE DATE

SEMESTRUL II
2013/2014
Lect. dr. Trmbia Maria-Gabriela
1

Dedicat memoriei lui


Mihai Ptracu

Mihai Ptracu, considerat cel mai bun cercettor n nformatic


teoretic din ultimii 10 ani
Nscut pe 17 iulie 1982 la Craiova, Mihai Ptracu i-a finalizat
studiile universitare la Massachusetts Institute of Technology din Statele
Unite, unde a i lucrat ulterior.
Teza lui de doctorat, susinut aici, a fost premiat drept cea mai bun
teza tiinific de la MIT, care este cea mai bine cotat universitate la
informatic din lume.
Mihai a ctigat multe medalii la olimpiadele de specialitate, ajungnd
pe locul 20 n topul medaliailor la nivel internaional. A obinut de 9 ori
premiul I la nivel naional i 7 medalii la fazele internaionale: 4 de aur
i 3 de argint.
A fost membru al Comitetului Stiinific al Olimpiadei Internaionale de
Informatic, presedintele Comitetului tiinific al Balcaniadei de
Informatic (2011) i al Olimpiadei Europene de Informatic (2009).
In 2012, Mihai Patrascu a primit premiul Presburger, de la Asociaia
European de Informatic Teoretic, pentru revoluionarea domeniului
de structuri de date.
n vrst de numai 29 de ani, a murit pe data de 5 iunie 2012.
Lect. Dr. Trimbitas Maria-Gabriela

Cuprinsul cursului
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

Introducere. Structuri de date. Algoritmi.


Complexiti
Tipuri de date. TAD Colecie - Concepte legate de colecie
TAD Tablou
TAD Dicionar Concepte legate de dicionare
TAD Lista - Concepte legate de liste
TAD Stiva Concepte legate de stiv
TAD Coad - Concepte legate de coad
TAD Coad cu prioriti Concepte legate de coada cu prioriti
Tabela de dispersie (hash-table)
TAD Arbore Concepte legate de arbori
Heap-uri
Arbori binari de cutare. Arbori echilibrai
Ordinea ar putea fi modificat
Lect. Dr. Trimbitas Maria-Gabriela

Bibliografie
1. CORMEN, THOMAS H. - LEISERSON, CHARLES - RIVEST, RONALD R.:
Introducere n algoritmi. Cluj-Napoca: Editura Computer Libris Agora, 2000.
2. SIMONAS SALTENIS:Algorithms and Data Structures, 2002.
3. STANDISH, T.A.: Data Structures, Algorithms & Software Principles in C, AddisonWesley, 1995
4. FRENTIU M., POP H.F., SERBAN G.: Programming Fundamentals, Ed.Presa
Universitara Clujeana, Cluj-Napoca, 2006, 234 pagini
5. SEDGEWICK, R.: Algorithmen, Addison-Wesley,1998
6. WIRTH, N.: Algorithmen und Datenstrukturen, Pascal Version, 5 Auflage, B.G.
Teubner Stuttgart,1998
7. NICULESCU V., CZIBULA G.: Structuri fundamentale de date. O perspective
orientate obiect. Editura Casa Cartii de Stiinta, Cluj-Napoca,2011
8. HOROWITZ, E.: Fundamentals of Data Structures in C++. Computer Science Press,
1995.
9. MOUNT, DAVID M.: Data Structures. University of Maryland, 1993.
10. AMBSBURY, WAYNE: Data Structures. From Arrays to Priority Queues, 1993.
11. BRUNO R. PREISS, Data Structures and Algorithms with Object-Oriented Design
Patterns in C++, 1997.
Lect. Dr. Trimbitas Maria-Gabriela

1. Introducere
Structuri de date
Algoritmi

Lect. Dr. Trimbitas Maria-Gabriela

Algoritm

n acest timbru sovietic apare


Muhammad ibn Musa al-Khwarizmi
(nscut aproximativ n 780; mort
ntre 835 i 850), matematician
persan i astronom din Khorasan
provincie a Uzbekistanului de azi.
Cuvntul algoritm provine din
numele lui.

Lect. Dr. Trimbitas Maria-Gabriela

Definiie (generala) Un algoritm este o descriere


precis i finit a unui proces constnd din pai
elementari.

Definiie (Computer Science) Un algoritm este o


descriere precis i finit a unui proces care este
(a) dat ntr-un limbaj formal i
(b) const din pasi elementari i executabili pe
main.

Lect. Dr. Trimbitas Maria-Gabriela

Reprezentarea
algoritmilor

Descriere verbal
Grafic: Structograme, diagrame de flux, etc.
Pseudocod
Limbaj de programare
.
Teza lui Church Toate formele de
reprezentare ale algoritmilor sunt echivalente.

Alonzo Church a fost un matematician american i logician care a avut contribuii


majore n logica matematic i fundamentele teoretice ale informaticii.
Wikipedia
Born: June 14, 1903, Washington, D.C., United States
Died: August 11, 1995, Hudson, Ohio, United States
Books: Introduction to Mathematical Logic
Lect. Dr. Trimbitas Maria-Gabriela

Algoritmul lui Euclid


ca diagrama NassiShneiderman-...

i n Pascal
PROGRAM cmmdc (Input,Output);
VAR a,b: Integer;
BEGIN
ReadLn(a,b);
WHILE (a > 0) AND (b > 0) DO
IF a > b THEN
a := a-b;
ELSE b := b-a;
IF b=0 THEN
WriteLn(a)
ELSE WriteLn(b)
END.

Observatie: ?

Lect. Dr. Trimbitas Maria-Gabriela

Algoritmii lucreaz asupra datelor de intrare, genereaz date


intermediare, iar n final produc un rezultat (dat)
O structur de date este modul n care data este reprezentat n
interiorul masinii, n memorie sau pe disc (vezi i cursul BD)

Structurile de date determin ce pot s fac algoritmii i cu ce


cost. Mai precis: ct cost un anumit pas al unui algoritm
Complexitatea algoritmilor este strns legat de structurile de
date pe care ei le utilizeaz; att de strns ncat unii subsumeaz
ambele concepte sub termenul de algoritm.

Lect. Dr. Trimbitas Maria-Gabriela

10

I(nformaia) = D(ata) + S(emantica)


P(rogram) = D(ate) + A(lgoritm)
Date (atomicitatea):
elementare;
structurate.

Lect. Dr. Cioban Vasile

11

Tipuri de SD: (dpdv al memoriei i locului n memorie)


statice: articol (nregistrare), tablou, mulime, etc;

semistatice: stiv, coad, tabel de dispersie;


dinamice: list dinamic, arbore, graf;

Clasificarea SD (dpdv al abstractizrii/implementrii)


SD Logice
Descrierea legturilor ntre elementele tipului (ex: matrice,
stiv, coad, arbore, etc.)
SD Fizice:
Se refer la reprezentarea fizic n memorie a elementelor
domeniului n memorie.

Lect. Dr. Cioban Vasile

12

Stil n proiectarea SD
Un program poate rezolva corect o problem, dar poate fi un program
slab din multe puncte de vedere:
o are un timp de execuie relativ mare;
o utilizeaz spaiu de memorie excedentar;
o dificil de depanat, de citit, de modificat;
o greu reutilizabil sau nereutilizabil n alte proiecte (programe).
SD trebuie concepute astfel nct s nlture neajunsurile de mai sus;
3 reguli generale:
R1: Rafinarea pas cu pas (Stepwise refinement);
R2: Abstractizare:
o grupare unor componente n mod logic;
o s poat fi reutilizate de alte SD, sau alte programe;
o detaliile de implementare s fie amnate pn la codificare;
o separarea descrierii logice de implementare.
R3: Independen de limbaj.
Lect. Dr. Cioban Vasile

13

Exemplu rafinare: paii n abstractizarea (prin rafinare) unei stive de elemente de tipul TE
step 1: stiva de elemente de tipul TE
step 2: stiv cu alocarea dinamic a elementelor de tipul TE
step 3: stiv cu alocarea dinamic o obiectelor care reprezint elemente de tipul TE
Exemplu abstractizare
Versiunea 1
Nume = String[15];
Persoan =
Record
NumeFam,Prenume:Nume;
CodTelefon:
0..1000;
NrTelefon:
String[9];
Ziua:
1..31;
Luna:
1..12;
Anul:
1900..2100;
End;

Lect. Dr. Cioban Vasile

Versiunea 2
Nume = String[15];
TipTelefon =
Record
CodTelefon: 0..1000;
NrTelefon: String[9];
End;
DataCalend =
Record
Ziua:1..31;
Luna:1..12;
Anul:1900..2100;
End;
Persoana =
Record
NumeFam,Prenume: Nume;
Telefon:
TipTelefon;
DataNasterii: DataCalend;
End;
14

2. Complexiti

15

Observaii preliminare:
1. Afirmaiile despre complexitatea algoritmilor i a problemelor
trebuie s fie de regul independente de un anumit model de
main i anumite proprieti ale implementrii, ca i de
detaliile technologice
2. La studiul funciilor de complexitate nu intereseaz att de
mult evoluia exact a valorilor unei funcii f:N->R+ ci
tendina acesteia, comportamentul ei de cretere
(comportament asimptotic) atunci cnd crete argumentul

Lect. Dr. Trimbitas Maria-Gabriela

16

Reprezentri diferite pentru acelai algoritm (i programele sunt


reprezentri)
n plus: algoritmi diferii pentru aceeai problem
Scop: Compararea algoritmilor ntre ei (analiza complexitii)
Criterii: Timpul de execuie i spaiul de memorie
Complexitatea se exprim n funcie de mulimea i dimensiunea
datelor

Lect. Dr. Trimbitas Maria-Gabriela

17

Determinarea timpului de execuie


Posibiliti de msurare a eficienei unui algoritm:
1. Implementarea unui algoritm pe un calculator real i msurarea timpului
Dezavantaj: prea multe mrimi care influeneaz timpul, abstracie fcnd
de algoritmul nsui
2. Numrarea pailor de calcul care se efectueaz pentru un set de date de
intrare.
ntrebare: ce este un pas de calcul?
Model formal de calcul de exemplu main Turing sau RAM
programarea algoritmului ntr-un limbaj de programare artificial i
numrarea i evaluarea (ponderea) operaiilor
Dezavantaj: Efort mare, portabilitate incert
3. Numrarea operaiilor la nivel nalt (de exemplu numrul comparaiilor la
cutarea ntr-o list sau numrul de perechi de elemente care se interschimb
la sortare)
Dezavantaj: Evaluare prea grosolan
Lect. Dr. Trimbitas Maria-Gabriela

18

Vom folosi ca metod simpl de msurare timpul de execuie

Fie dat o problem de dimensiune n


De exemplu sortarea a n valori

Exist mai muli algoritmi pentru rezolvarea problemei


Care algoritm este mai rapid depinde de dimensiunea n a
problemei
Pentru valori foarte mari ale lui n, cel mai rapid algoritm va fi
ntotdeauna acela al crui timp de execuie crete cel mai puin n
funcie de n.

Lect. Dr. Trimbitas Maria-Gabriela

19

20
Prof. Dr. Hans Joachim Pflug

21
Prof. Dr. Hans Joachim Pflug

De regul nu suntem interesai de numrul exact de operaii ci de clase


de complexitate: cum se modific efortul de calcul, atunci cnd se
mrete volumul datelor de intrare cu un anumit factor?
Care este comportamentul calitativ al funciei de timp?

Pe noi ne intereseaza cum depinde o resursa consumata de un algoritm


de n (dimensiunea problemei) pentru o valoare mare a lui n. Pentru a
putea exprima aceasta, matematic corect, se folosesc simbolurile lui
Landau.

Lect. Dr. Trimbitas Maria-Gabriela

22

Simbolurile lui Landau - , , , o si


Definiie: g(n) este marginea asimptotic superioar a lui f(n), dac exist o constant c > 0 i
un n0 N, astfel nct pentru toi n n0 are loc f(n) cg(n)
Mulimea tuturor funciilor f(n), pentru care o funcie g(n) dat este margine asimptotic
superioar se noteaz cu(g(n)).
Analog se defineste marginea asimptotic inferioar, marginea asimptotic strns, margine
superioar tare, respectiv margine inferioar tare.
+

Definiie: Fie f i g funcii N R .


Marginea superioar:
(g(n)) = {f(n) | c > 0 n0 n n0 f(n) cg(n)}
Marginea inferioar:
(g(n)) = {f(n) | c > 0 n0 n n0 cg(n) f(n)}
Marginea strns (aceeai cretere):
(g(n)) = (g(n) (g(n)))
Margine superioar tare:
o(g(n)) = {f(n) | c > 0 n0 n n0 f(n) cg(n)}
Margine inferioar tare:
(g(n)) = {f(n) | c > 0 n0 n n0 cg(n) f(n)}
Atenie: Se folosete adesea n locul scrierii corecte f(n) O(g(n)) pentru marginea
asimptotic superioar, notaia neglijent f(n) = (g(n)).
Lect. Dr. Trimbitas Maria-Gabriela

23

Proprietile notaiilor asimptotice


Tranzitivitate:

Reflexivitate:

Simetrie:

Antisimetrie:

Lect. Dr. Trimbitas Maria-Gabriela

24

Notaia(g(n))

Notaia(g(n))

Exemplu:

Exemplu:

n2+1000n

f(n2)

g(n)=n2

Fie f(n) =
demonstrm c
cu
deci se caut c>0 i n0N astfel nct pentru toi nn0 f(n)cn2
f(n) = n2+1000n n2+1000n2=1001n2 => c=1001, n0=1

Fie aceeai funcie


f(n) = n2+1000n demonstrm c f(n2) cu g(n)=n2
deci se caut c>0 i n0N astfel nct pentru toi nn0 f(n)cn2
f(n) = n2+1000n 1n2 => c=1, n0=1

Lect. Dr. Trimbitas Maria-Gabriela

25

Notaia (g(n))

Din definiiile notaiilor asimptotice rezult c


f(n) = n2+1000n f(n2)

TEMA: S se demonstreze c f(n) = n2+1000n fo(n2log n)


Lect. Dr. Trimbitas Maria-Gabriela

26

O(g) este mulimea tuturor funciilor care cresc asimptotic cel mult la fel
de repede ca cg.
De exemplu:

Lect. Dr. Trimbitas Maria-Gabriela

27

La sume se impune termenul cu creterea cea mai rapid.

Demonstraie:

Lect. Dr. Trimbitas Maria-Gabriela

28

S-ar putea scrie i


f(n) = 2n+ 7n + 10 O(2n+ 7n + 10)
intereseaz ns numai comparaia cu funcii simple ca de
exemplu O(n), O(n),...
Clasa
1
log n
n
n2
n3
nk
n log n
2cn

Denumire
constant
logaritmic
linear
quadratic
cubic
polinomial
superlinear
exponential

n!

Factorial

Exemplu
Instructiuni elementare
Cautare binara
Minimum unui sir
Procedee simple de sortare
Inversarea matricelor
Programare Lineara
Procedee eficiente de sortare
brute-force search,
Backtracking
Permutari,Problema comisvoiajorului, Met.Kramer

Avem: O(1) O(n) ... O(n!)


Lect. Dr. Trimbitas Maria-Gabriela

29

Regul de baz:

Cea mai mic clas de complexitate (n notatia O) rezult din TA(n) prin:
o Extragerea termenului dominant(cel mai mare) i prin
o Renunarea la coeficieni
De exemplu:
T(n)=60n2+ 4n TO(n2);
T(n)=lg(n) + 1 TO(lg(n))=O(log(n)),
de ce?

Lect. Dr. Trimbitas Maria-Gabriela

30

(f) este mulimea tuturor funciilor asimptotice care cresc cel puin
la fel de repede ca i cg.
Exemplu:

deoarece

pentru

Lect. Dr. Trimbitas Maria-Gabriela

31

(g) Dac f(n) (g) i f(n) O(g), atunci f(n) (g) .

Exist o limit superioar c1i o limit inferioar c2, astfel nct din
punct de vedere asimptotic pentru toi n>n0) este adevrat:
c1g(n)f(n)c2g(n)
Exemplu:
f(n) = 2n+ 7n +10
=> f(n) (n) pentru n0 = 9

Demonstraie:
3n 2n+7n+10 2 n pentru n0= 9

Lect. Dr. Trimbitas Maria-Gabriela

32

Exemplu: Algoritm de tip Divide et impera


MergeSort

Procedure MergeSort (V,p,q)


if p q then
m=(p+q) div 2
MergeSort (V,p,m)
MergeSort (V,m+1,q)
Merge (V,p,m,q)
endif
EndProcedure

33

La algoritmul de sortare prin interclasare avem divizarea n 2 subsecvene de


lungime n/2; deci a=2, iar dimensiunea unei probleme este 1/2
dac p = q avem timp constant (1) (n=1, deci =1);
D(n) = (1), pentru c se determin indicele de mijloc al secvenei (p,q);
C(n) = (n), (pentru c interclasarea a 2 secvene de lungime p, respectiv
q d (p+q-1))
Avem deci:

(1),
n 1

sau
T(n) n
2T (1) (n), n 1

n final avem recurena

(1),
n 1

T(n) n
2T
(n), n 1
2

0,
n 1

T(n) n
2T
n, n 1
2

Rezolvat la seminar prin metoda iteraiei


34

Teorema master

35

Revenim la recurena obinut la MERGESORT

0,
n 1

T(n) n
2T
n, n 1
2

i aplicnd Teorema master avem a=b=2 => f(n)=(n), deci ne aflm n cazul 2
=> T(n) = (n log n)

Problem tratabil = problema care poate fi rezolvat printr-un algoritm cu


timp de execuie polinomial

Lect. Dr. Trimbitas Maria-Gabriela

36

Cazul cel mai nefavorabil, mediu i cel mai favorabil


La timpul de execuie deosebim:
cazul cel mai defavorabil (worstcase),
cazul mediu (averagecase) i
cazul cel mai favorabil (best case).
Cazul mediu este important atunci cnd, cazul cel mai favorabil i cazul cel
mai defavorabil sunt excepii foarte rare

Lect. Dr. Trimbitas Maria-Gabriela

37

Notaia O - are originea n lucrarea Die Elemente der


Zahlentheorie din anul 1892 a lui
Paul Gustav Heinrich Bachmann (1837 - 1920) .
Puin timp mai trziu, a utilizat-o i specialistul in Teoria
numerelor Edmund Landau (1877 -1938) i pe lng O a
considerat i o. Din aceast cauz notaia asimptotic este
denumit i Simbolurile lui Landau
Tot lui Landau i se datoreaz i notaia Z pentru numerele
ntregi.

Lect. Dr. Trimbitas Maria-Gabriela

38

Inc un exemplu de analiz a complexitii unui algoritm


Algoritmul standard pentru nmulirea a doua matrice

function MATMULT(A,B,l,m,n)
C = zeroes(l,n)
// zeroizare matrice rezultat C
for i = 1 to l
// ciclu dupa liniile lui C
for k = 1 to n
// ciclu dupa coloanele lui C
for j = 1 to m
// ciclu dupa coloanele A / liniile lui B
C(i,k) = C(i,k) + A(i,j) * B(j,k) // calculul sumei de produse
end
end
end
return C

Ordinea pentru cele trei ciluri for poate fi schimbat. Deoarece cele trei
cicluri sunt independente unele de altele, numrul operaiilor este de ordinul
O(lmn)
Ca urmare timpul de execuie pentru matrice ptratice (l=m=n) este cubic,
deci de ordinul O(n3)
Lect. Dr. Trimbitas Maria-Gabriela

39

Lect. Dr. Trimbitas Maria-Gabriela

40

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