Documente Academic
Documente Profesional
Documente Cultură
2016
ovidiu.banias@aut.upt.ro
Scurtă prezentare
Analiza algoritmilor
Pointeri. Lucru pe biți
Stiva
Backtracking
Recursivitate
Divide at Impera
Greedy
Programare dinamică
Bibliografie selectivă
Cormen T.H., Leiserson C.E., Rivest R.R., Introducere în algoritmi, Agora, 2000
Ionescu C., et. al., Informatica pentru grupele de performanţă, Dacia Educaţional,
2004
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-
00sc-introduction-to-computer-science-and-programming-spring-2011/
http://videolectures.net/mit6046jf05_introduction_algorithms/
https://class.coursera.org/algo-004/lecture
Principii generale. Pași implementare
Scriere cod
Depanare
Testare
Principii generale.Identare/Notaţii cod/Comentare
Comentare
Stil de programare
Analiza algoritmilor
Problemă
exemple
2 metode
Căutare liniară
Algoritm: LINEARSEARCH
Algoritm: LINEARSEARCH
3.câte icomparații
← i+1 minim?
4.câte
end comparații
while maxim?
Algoritm: BINARYSEARCH
Se observă că:
A[li] ≤ A[(li+lf)/2] ≤ A[lf]
Index (i) 1 2 3 4 5 6 7 8 9 10
A[1..10] 3 7 12 21 25 26 27 29 37 39
li=1, lf=10
pas 1: k=[(li+lf)/2] = 5
Index (i) 6 7 8 9 10
k=8, (A[k]=29)<37→ A[8..10]
A[6..10] 26 27 29 37 39
Index (i) 6 7 8 9 10
k=9, A[k]=37→ OK
A[8..10] 26 27 29 37 39
http://www.infoarena.ro/blog/cautare-binara
Căutare binară
1. li ← 1; lf ← n;
3. k ← [(li + lf) / 2]
6. else li ← k+1
7. end while
8. return 0
n
după fiecare pas i, numărul de elemente se înjumătăţeşte: pas i → i −1
2
elemente
Ο limita sperioară
Ω limita inferioară
Notații asimptotice - O
Definiție:
Fie f ( n ) = 2 n 3 + 10 n 2 + 2 , ∀ n ≥ 1
( not )
f ( n ) ≤ 12 n 3 ⇒ complex. f ( n ) = O ( n 3 ),
pt. că ∃ n 0 = 1 şi c = 12 a.î. ∀ n ≥ n 0 , f ( n ) ≤ cg ( n ).
Notații asimptotice - O
( not ) ( not )
f (n), g (n) : Ν → R, complexitatea lui f (n) = O( g (n)) = g (n)
dacă ∃ n0 ∈ Ν şi c = const. a.î. ∀n ≥ n0 , f (n) ≤ cg (n).
Notații asimptotice – clasificare algoritmi
Ο( 1 ) = constant
O(log n) = logaritmic
O ( n) = liniar
O(n log n) = supraliniar
2
O(n ) = patratic
c
O(n ) = polinomial
n
O (c ) = exponential
O(n!) = factorial
c - constantă
Ordinul/rata de creştere a unui algoritm
și de complexitatea algoritmului
Rata de creştere
100
90
80
70
60
timp (ms)
log n
50 cn
40 nlog n
cn^2
30
cn^3
20
10
0
0 5 10 15 20 25 30
3 2
f (n) = n + n date de intrare (n)
f (n) = n logn + n + 3
cu cât n creşte cu atât scade importanţa termenilor de grad inferior
Ordinul/rata de creştere a unui algoritm
2 3 n
n O( log n ) O( n ) O( n log n ) O( n ) O( n ) O (2 )
(iii) atribuiri
Notații asimptotice - Ω, Θ
Definiție: fie f (n), g (n) : Ν → R
( not )
f ( n ) = Ω ( g ( n ))
dac ă ∃ n 0 ∈ Ν şi c = const . a.î. ∀ n ≥ n 0 ,
f ( n ) ≥ cg ( n ).
( not )
f (n) = Θ( g (n))
dacă ∃ n0 ∈ Ν şi c1 , c2 = const. a.î. ∀n ≥ n0 ,
c1 g (n) ≤ f (n) ≤ c2 g (n).
Complexitate P/NP/NP-complet
Algoritmi deterministici NP
Algoritmi nondeterministici
P
P = Polinomial
NP
complet
NP = Nondeterministic Polinomial
NP-complet P ≠ NP
Rezumat. Analiza algoritmilor
Notații asimptotice - O
Tipuri de algoritmi