Sunteți pe pagina 1din 8

Complexitate timp

Facultatea de Matematic i Informatic


Lecii de pregtire pentru admitere

2017
Algoritmi i complexitate

Enun
Algoritmi de rezolvare
Care algoritm este mai bun?
Datele de intrare
Forma datelor de intrare influeneaz performanele unui
algoritm
Implementare
Cum evalum un algoritm?
Timp de execuie. Timpul depinde de maina pe care ruleaz
programul. Ne trebuie o metod de evaluare care s nu depind
de main => Complexitate timp
Spaiu de execuie. De foarte multe ori la fel de important ca
timpul de execuie i n strns legtur cu acesta =>
Complexitate spaiu
Dimensiunea datelor de intrare

Valoarea M pentru care trebuie formulat rspunsul


Numr de elemente: vector cu N elemente
Dimensiunea propriu-zis a datelor: int, long, long long
Stabilim dimensiunea datelor de intrare dup un set de
variabile N1, N2 ,, Nk
Determinm complexitatea timp ca funcie de aceste
variabile
f(N1, N2 , , Nk)
Numrarea pas-cu-pas
C PASCAL
int result=0,N,M; var result,i,j,k,x,N,M:integer;
for (int i=0; i<N; i++) result:=0;
for (int j=i; j<N; j++) for i := 0 to n-1 do
{ for j := i to n-1 do
for (int k=0; k<M; k++) begin
{ for k := 0 to M-1 do
int x=0; begin
while (x<N) x:=0;
{ while x<N do
result++; begin
x+=3; inc(result);
} x:=x+3;
} end;
for (int k=0; k<2*M; k++) end;
if (k%7 == 4) result++; for k := 0 to 2*M-1 do
} if k mod 7 = 4 then inc(result);
end;

Calculai funcia de complexitate f(N,M) a programului de mai sus.


Definiii formale

Big-O
Spunem c f (N) este O(g(N)) dac exist c i N0 astfel nct:
pentru orice N > N0 avem f (N) < c*g(N)
Exemplu 1: dac f (N) = 3N(N 1)/2 + N = 1,5N2 0,5N, spunem
c f (N) este O(N2)
Big-
Spunem c f (N) este (g(N)) dac g(N) este O(f(N))
Big-
Spunem c f (N) este (g(N)) dac f (N) este O(g(N)) i g(N)
este O(f(N))

Spunem c un algoritm (sau un program) are complexitatea O(g(N))


dac funcia sa de complexitate f (N) este O(g(N)).
Programul prezentat anterior are complexitatea O(N3M).
Funcii uzuale de complexitate

f (N) este O(log N): complexitate logaritmic (nu conteaz baza!)


f (N) este O(N): complexitate liniar
f (N) este O(N2): complexitate ptratic
f (N) este O(N3): complexitate cubic
f (N) este O(Nk), k oarecare: complexitate polinomial
f (N) este O(2N): complexitate exponenial (nu conteaz baza!)

f (N) este O(1): complexitate constant


Alt exemplu
C PASCAL
int j=0,N,D; var i,j,N,D:integer;
for (int i=0; i<N; i++) j:=0;
{ for i := 0 to N-1 do
while((j<N-1)&&(A[i]-A[j]>D)) begin
j++; while (j<N-1)&&(A[i]-A[j]>D) do
if (A[i]-A[j] == D) inc(result);
return 1; if (A[i]-A[j] == D) then exit;
} end;

Calculai funcia de complexitate f(N) a programului de mai sus.


Bibliografie
Aceast prezentare este o prelucrare dup articolul
Computational Complexity, autor Michal Foriek (misof),
care se gsete pe Topcoder.

https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/

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