Sunteți pe pagina 1din 28

Structuri de date si algoritmi

SDA
Asis. univ. ing. Cornelia Melenti

Probleme organizatorice

Curs:

Joi, 14-16

Laborator:

Structura curs

Recapitulare PC: structuri de control


Structuri de date:

Liste, stive, cozi


Arbori, arbori binari, arbori binari de cautare, codificarea
Huffman
Grafuri
Multimi, dictionare, hash tables, cozi de prioritate
Arbori multicai, arbori rosu si negru, arbori echilibrati, AVL
Grafuri orientate: traversari
Grafuri neorientate: traversari, cost minim,

Metode de dezvoltare a algoritmilor

Structura curs

Metode de dezvoltare a algoritmilor si


analiza lor

Divide and conquer


Programare dinamica
Algoritmi greedy
Backtracking
Algoritmi de cautare
Sortare

Obiective curs

Familiarizarea cu proprietatile diversilor algoritmi si


structuri de date
Metode de comparare a algoritmilor si structurilor
de date
Studierea unor algoritmi specifici pentru anumite
structuri de date
Invatarea cum sa va creati proprii algoritmi si
structuri pentru rezolvarea problemelor

Evaluarea

Activitatea din timpul semestrului 30%

30% lab+colocviu

Examen scris 70%

Bibliografie

Ignat I., Ignat C., Structuri de date si algoritmi, UTPress, 2007


Aho, Hopcroft, Ullman. Data Structures and Algorithms,
Addison-Wesley, 427 pages, 1987.
Cormen, Leiserson, Rivest, (Stein): Introduction to Algorithms.
MIT Press / McGraw Hill, (2nd edition),1028 pages, 1990 (2002).
Preiss. Data Structures and Algorithms with object-Oriented
Design Patterns in C++, John Wiley and Sons,660 pages, 1999.
(see course web site)
Knuth. The Art of Computer Programing, Addison Wesley,three
volumes, reprinted several times.

Bibliografie

IGNAT Iosif, IGNAT Claudia-Lavinia - Structuri de date si algoritmi, 2007, Cota 527.366

IGNAT Iosif, IGNAT Claudia-Lavinia - Structuri de date si algoritmi : indrumator de


lucrari de laborator, 2001 Cota 506.016
JOLDOS Marius, IGNAT Iosif - Data structures and algorithms : laboratory guide, 2003
Cota 509.111
IGNAT Iosif, IGNAT Claudia-Lavinia - Programarea calculatoarelor : descrierea
algoritmilor si fundamentele limbajului C/C++ , 2002 Cota 508.311
CRAUS Mitica, BARSAN Corneliu - Structuri de date si algoritmi, 2002 Cota 507.305
CORMEN Thomas H., LEISERSON Charles E. , RIVEST Ronald R. - Introducere in
algoritmi, 2000 Cota 501.507
KNUTH Donald E. - Arta programarii calculatoarelor. Vol. 1: Algoritmi fundamentali, Vol
2, Vol 3 - Sortari, 2000 Cota 501.199/1
Aho, Hopcroft, Ullman. Data Structures and Algorithms, Addison-Wesley, 1987.
Preiss. Data Structures and Algorithms with object-Oriented Design Patterns in C++,
John Wiley and Sons,1999.

Notiuni de baza

1.

2.

Rezolvarea problemelor = obtinerea unei solutii


construirea unui model matematic cat mai exact si care
satisface cel mai bine cerintele problemei
Exprimarea solutiei in termenii acestui model
Algoritm: O metoda generala de rezolvare a unei probleme
date, care poate fi implementata pe un calculator.

1 problema -> mai multi algoritmi


Abu Ja`far Mohammed ibn Musa al-Khowarizmi (autor persan, sec. VIIIIX), a scris o carte de matematica cunoscuta in traducere latina ca
Algorithmi de numero indorum
In Evul Mediu, prin algoritm intelegeau o regula pe baza careia se efectuau
calcule aritmetice

Program: Implementarea particulara, intr-un anumit limbaj, a


unui algoritm

Rezolvarea unei probleme

Pasi in rezolvarea unei probleme


1.
2.
3.
4.
5.

Analiza
=> modelul (matematic)
Design
=> cod sursa
Implementarea => cod executabil
Testare
=> executie cu date de test
Lansare in functiune => executie cu date reale

Rezolvarea unei probleme

Analiza => modelul (matematic)

Modelul de date

Care sunt datele de intrare?


Ce voi obtine, ce urmaresc?

Modelul de date

Algoritmul

Ce metode matematice folosesc, care sunt operatiile


care se executa asupra datelor de intrare?
descrierea formala a problemei = algoritm

Rezolvarea unei probleme

Analiza => modelul (matematic)

Pasi in dezvoltarea unui algoritm


1.

2.
3.
4.

descriere algoritm (pseudocod, schema


logica)
Analiza corectitudinii
Analiza eficientei lui
Redefinire

Se repeta pasii 2-4 pana se obtine un algoritm destul de bun

Rezolvarea unei probleme

Analiza => modelul (matematic)

Metode de analiza

Structurata: (Ed. Gourdon, Cane)


Data Flow Diagram
Entity Relationship Diagram
State Transition Diagram
Functionala
Vision Document
Use Case:
Test Case

Rezolvarea unei probleme

Analiza structurata

Data Flow Diagram (diagrama fluxului de date)

Indica ce pachete de date se transmit intre modulele


aplicatiei

Entity Relationship Diagram (diagrama relatiilor intre


entitati)

Structura bazei de date

State Transition Diagram (diagrama de tranzitie a

starilor)

Indica starile sistemului, conditiile si actiunile care


trebuie intreprinse pentru a trece dintr-o stare in alta

Rezolvarea unei probleme

Analiza functionala

Vision Document prezinta specificatiile si cerintele


sistemului, cui se adreseaza, ce problema rezolva,
caracteristicile functionale si nefunctionale

Use Case specifica cazurile de utilizare a sistemului,


diagrame UML, workflow de baza si alternative

Test Case specifica modul de testare a aplicatiei


(bateriile de teste) si datele de testare

Rezolvarea unei probleme

Analiza => modelul (matematic)

Ex. Sortarea unei liste

Lista initiala: a1, a2, a3, , an


Lista sortata: a1, a2, , an, unde a1<a2< .<an
Metode de sortare:

Buble sort
Insertion Sort
Merge sort
Quicksort

Rezolvarea unei probleme

Design si implementare

Se alege cel mai adecvat limbaj de programare pentru


problema data

Testare cu date reale, conform cazurilor de utilizare


si testare definite in faza de analiza, pe platforma specificata

Lansare in functionare

Fazele de executie a unui program

Algoritm+date=program (cod sursa)


Cod sursa
Compilare
Cod obiect

TLA (alocarea memoriei)


Module din biblioteca

Linkeditare
Cod direct executabil

Date de intrare
Executie

Rezultate

Analiza eficientei unui algoritm

Resursele necesare

Timpul de executie (procesare)

Definitie: timp de executie al unui algoritm = nr. de pasi


executati de algoritm

Necesarul de memorie
Nr. de accesari ale suportului extern de memorare
Nr. de operatii aritmetice de baza
Traficul in retea

Analiza eficientei unui algoritm

Informal, T(n) timpul de rezolvare a unei probleme


de dimensiune n este

Formal:

O(log n) daca T(n) = c log2n


O( g(n) )
f(n) < c g(n) pentru c constant,
c > 0, si n > N

g(n) descrie cel mai dezavantajos caz de


instantiere a algoritmului
Ex.

n lg n + n = O (n2)

Analiza eficientei unui algoritm

Gradul
1
log n

Clasa de eficienta a algoritmului


Constant
Logaritmic

Liniar

n log n

n log n

n2

Quadratic

n3

Cubic

2n

Exponential

n!

factorial

Analiza eficientei din punct de


vedere al timpului de executie

Program = statement
Timpul de executie al programului

Prog = var = expr:

1 + Time(expr)
n times Time(Prog')

Prog = function call:

Time(expr2) for primitive operations

Prog = for i = 1 to n, do Prog:

1 + Time(expr1) +

Prog = array[expr]'':

1 + Time(expr)

Prog = expr1 op expr2:

Prog': Time(statement) + Time(Prog')

Time(function)

Prog = while(expr), do Prog' :

Time(expr) + Time(Prog') times

Concluzie: T(n) ~ copC(n)


unde n este input size, cop este timpul de executie pentru o operatie de baza, C(n) reprezinta
de cate ori se executa operatiile de baza

Algoritmi nerecursivi

Pasi in analiza algoritmilor nerecursivi

stabilirea parametrului n (dimensiunea intrarilor)


identificarea operatiilor de baza ale algoritmului
determinarea celui mai bun, cel mai
dezavantajos si mediu caz pentru intrarile de
ordin n
se calculeaza C(n) pentru buclele din algoritm
se simplifica acest calcul utilizand formule
standard

Algoritmi nerecursivi

(1)
(2)
(3)
(4)
(5)
(6)

type int_array=array[1..n] of integer;


procedure bubble(var a:int_array); {sortare crescatoare}
var i,j,temp:integer;
begin
for i:=1 to n-1 do
for j:=n downto i+1 do
if a[j-1]>a[j] then begin
temp:=a[j-1];
a[j-1]:=a[j];
a[j]:=temp
end
end; {bubble}

Timpii de rulare pentru instructiunile de asignare (4),(5) si (6) sint O(1), deci pentru secventa (4)-(6), timpul
este O(max(1,1,1))=O(1).
Pentru instructiunea if-then (3), timpul este suma dintre cel pentru evaluarea conditiei, O(1) si cel al secventei
ce se executa la conditie adevarata, tot O(1), calculat mai sus, deci O(1), acesta fiind deci si timpul pentru o
iteratie a instructiunii for (2).
Pentru cele n-i iteratii ale lui for (2), timpul de executie este O((n-i)*1)=O(n-i).
Pentru instructiunea for (1), avind n-1 iteratii, timpul de executie este:
S(i=1,n-1)(n-i)=(n-1)+(n-2)+...+(n-n+1)=n^2/2-n/2,
deci este O(n^2).

Algoritmi recursivi

Pasi in analiza algoritmilor recursivi

stabilirea parametrului n (dimensiunea intrarilor)


identificarea operatiilor de baza ale algoritmului
determinarea celui mai bun, cel mai
dezavantajos si mediu caz pentru intrarile de
ordin n
se stabileste relatia de recursivitate si conditiile
initiale pentru C(n) precum si numarul de apeluri
recursive
Se estimeaza ordinul de magnitudine a solutiei

Algoritmi recursivi - exemplu

Inmultirea ruseasca axb, T(a)

Algoritmi recursivi - exemplu

a=1, T(1) =1
a>1, T(a) = 1 + [log a]

A numar par
A impar

T(a) = c1+T(a/2)
T(a) = c1 + T([a/2])

Algoritmi recursivi - exemplu

Inmultirea ruseasca axb


45

19

19

22

38

11

76

76

152

152

304

608

608
855

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