Sunteți pe pagina 1din 29

Curs Algorithm si structuri de date- 2010-2011 -

1
Conf. dr. Joia Daniela
ALGORITM 1

PROBLEMA ALGORITM 2

ALGORITM 3
Care este cel mai BUN?
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
2
Joia Daniela
De ce depinde?

EFICIEN
ALGORITM

TIMP DE RULARE SPAIU DE MEMORIE

NUMAR
TIMPDE
DEOPERATII
EXECUIE (N SEC) ?
EFECTUATE DE ALGORITM
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
3
Joia Daniela
Analiza unui algoritm se face independent de
calculatorul pe care va fi rulat sau de limbajul
n care va fi scris.

Analiza unui algoritm presupune estimarea


numrului de operaii efectuate
spaiului de memorie necesar rulrii algoritmului.

= complexitatea algoritmului
La analiza unui algoritm trebuie determinat
dimensiunea problemei n funcie de care se
determin ordinul de complexitate a alg.
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
4
Joia Daniela
Probl 1:

S se calculeze suma 1+2+...+n, n intreg poz.

Dimensiunea probl: n
Date de intrare: n

O singur clas de valori de intrare.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


5
Joia Daniela
suma = 0
for i = 1, n
suma = n * (n + 1) / 2 suma = suma + i
endfor

Operaii efectuate: *, Operaii efectuate:


+, / +, atribuiri
Clase de valori de
Clase de valori de intrare: 1
intrare: 1 Nr. operaii:
Nr. operaii: n adunari + (n+1)
3 atribuiri = 2*n+1
ALGORITM 1 ALGORITM 2

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


6
Joia Daniela
suma = 0 Nr. operaii:
for i = 1, n 1 atribuire si
for j = 1, i
suma = suma + 1 Pt fiecare i:
endfor i adunari + i atribuiri
endfor

Operaii efectuate: 1+2+...+n adunari


+, atribuiri + 1+2+...+n atribuiri
Clase de valori de Nr. total operatii:
intrare: 1 2*n(n+1)/2 +1 =
n2 +n +1
ALGORITM 3

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


7
Joia Daniela
Probl 2:

S se determine cel mai mare element al unei liste.

Dimensiunea probl: nr de elemente ale listei

(l notm cu n)
Date de intrare: n i elementele listei
x[1],x[2],..., x[n]

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


8
Joia Daniela
max = x[1]
for i = 2, n
if max < x[i] then max = x[i]
endif
endfor
write max

Operaii efectuate: comparatii, atribuiri


Putem determina exact nr de comparatii?
DA
n-1
Putem determina exact nr de atribuiri?
DEPINDE DE VALORILE DE INTRARE
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
9
Joia Daniela
O clasa posibila: Lista de intrare este in
ordine strict crescatoare:
x[1] < x[2]<...< x[n]
Nr. atribuiri:
n
O alta clasa posibila: Lista de intrare este in
ordine strict descrescatoare:
x[1] > x[2]>...> x[n]
Nr. atribuiri:
1
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
10
Joia Daniela
Este aceasta din urma singura situatie in care
se face doar o atribuire?
NU
Pentru orice lista pentru care
x[1] = cel mai mare element
se va efectua o singura atribuire.
Cele doua cazuri fac parte din aceeasi clasa
de valori de intrare pentru ca pp efectuarea
aceluiasi nr de operatii.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


11
Joia Daniela
Clasa 1: Valori de intrare pentru care se
execut o singur instruciune de atribuire
de tipul max = x[i],
Clasa 2: Valori de intrare pentru care se
execut 2 instruciuni de atribuire de
tipul max = x[i],
...
Clasa n: Valori de intrare pentru care se
execut n instruciuni de atribuire de tipul
max = x[i].

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


12
Joia Daniela
Cel mai bun caz =
cazul in care se fac cele mai putine operatii

Cel mai rau caz =


cazul in care se fac cele mai multe operatii

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


13
Joia Daniela
Cel mai bun caz =
1 atribuire deci nr. total operatii = n
(1 atrib +n-1 comp)

Cel mai rau caz =


n atribuiri deci nr. total operatii = 2n -1
(1 atrib +n-1 comp)

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


14
Joia Daniela
Timp minim = timpul de executie in cazul cel
mai bun
Timpul maxim = timpul de executie in cazul
cel mai rau.
Timpul mediu de executie = media aritmetica
a timpilor de executie corespunzatori tuturor
cazurilor posibile.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


15
Joia Daniela
Timp minim = n
Timpul maxim = 2n -1
Timpul mediu de executie =

n(n 1) 1
n
n 1 i n 1
1
n 2 (3n 1) 1
n
i 1 2

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


16
Joia Daniela
o functie care depinde de marimea
problemei de rezolvat si care este
direct proportionala cu timpul de
executie.

examineaza modul de crestere a


timpului de executie in cazul
cresterii dimensiunii problemei
(cand aceasta este f. mare -> infinit)
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
17
Joia Daniela
Alg A este mai eficient decat Alg B
daca rata de crestere a algoritmului A este
mai mic dect rata de crestere a
algoritmului B

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


18
Joia Daniela
Se calculeaza intai nr de operatii.
Timp mediu = (3n-1)/2 creste ca si n (direct
proportional)

Rata de crestere = n
Algoritmul este de ordin O(n).
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
19
Joia Daniela
Timp = 3

Rata de crestere = 1
Alg 1 este de ordin O(1) adica independent
de dimensiunea probl.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


20
Joia Daniela
Timp = 2n+1 creste ca si n

Rata de crestere = n
Alg 1 este de ordin O(n).
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
21
Joia Daniela
Timp = n2 +n +1 creste ca si n2

Rata de crestere = n2
Alg 1 este de ordin O(n2).
Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.
22
Joia Daniela
Algoritm 1 Algoritm 2 Algoritm 3

Complexitatea O(1) O(n) O(n2)


alg

Cel mai eficient alg este alg 1.


Dar daca nu stim formula ??
Alg 2.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


23
Joia Daniela
Algoritmii pot avea rate de crestere de
ordine: 1, n, n2, n3, log n, 2n , n! si altele.
Tabelul urmator ne arata cum se comporta
cateva functii de crestere pentru valori
crescatoare ale lui n.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


24
Joia Daniela
Fie f si g functii de n, n natural, spunem ca
f(n) este mult mai mare decat g(n)
si scriem f(n) >> g(n)
daca f(n) este mult mai mare decat g(n)
pentru valori mari ale lui n adica daca f(n)
creste mult mai repede decat g(n) cand n
creste.
Spunem ca f(n) este mult mai mic decat g(n)
si scriem f(n) << g(n) daca g(n) creste mult
mai repede decat f(n) cand n creste.

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


25
Joia Daniela
n >> 1
n2 >>n >>1

Tabelul ne arata
1 << log n << n << n log n << n2 << n3 << 2n
<< n!

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


26
Joia Daniela

Exemple:
2n2+ n+3 >> 10n +9
2n >> 2 n3 +n+7
n << n!

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


27
Joia Daniela
Definitie: f(n) este de ordin g(n), si notam, f(n) =
O(g(n)), daca exista c >0, c real si exista N
natural astfel incat |f(n)| <= c|g(n)| pt orice n
>= N.
Definitie echivalenta:

Exemple: Se poate demonstra ca


f(n) = 4n+3 = O(n),
f(n) = 2n2+6n+3 = O(n2),
f(n) = 4 = O(1).

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


28
Joia Daniela
Pentru fiecare dintre perechile de functii
f(n) si g(n), avem fie f(n) = O(g(n)) or g(n) =
O(f(n)), dar nu amandoua cazurile in
acelasi timp. Determinati care din cele
doua relatii este adevarata pentru
urmatoarele functii:
f(n) = (n2 n) /2, g(n) = 6n
f(n) = n + 2 sqrt(n) , g(n) = n2
f(n) = n + n log n, g(n) = n

Curs Algorithm si structuri de date- 2010-2011 - Conf. dr.


29
Joia Daniela

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