Sunteți pe pagina 1din 6

ANEXA 1

LIMITELE ASIMPTOTICE ALE FUNCIILOR

Pentru a putea compara algoritmii din punctul de vedere al performanelor


avem nevoie de definirea unor indicatori ai complexitii. Acetia trebuie s permit
att o determinare ct mai corect a timpului de execuie al algoritmului, ct i o
simplificare a procesului de analiz.
n majoritatea cazurilor, analiza exact a complexitii este dificil i chiar
inutil. Nu avem nevoie de o valoare exact a timpului de execuie al unui algoritm, ci
doar de o estimare a acestuia, astfel nct algoritmul s poat fi ncadrat ntr-o clas de
complexitate.
Timpul de execuie al unui algoritm este definit ca numrul de operaii de baz
sau pai de calcul. Pentru simplitate se poate presupune c toate operaiile de baz se
execut n timp constant. Condiia impus n alegerea operaiei de baz este aceea de a
nu depinde de dimensiunea problemei.
Timpul de execuie este exprimat n general ca o funcie de dimensiunea
intrrii. Pot exista cazuri n care timpul de execuie depinde i de valorile efective ale
datelor de intrare, nu numai de volumul acestora. n aceste cazuri se va determina, n
funcie de scopul analizei algoritmului, timpul de execuie pentru cazul cel mai
defavorabil i eventual pentru cazul mediu.
Pentru analiza performanelor algoritmilor, adic a modului cum variaz
timpul de execuie atunci cnd crete dimensiunea intrrii, se folosesc limitele
asimptotice ale funciilor: limita asimptotic superioar, limita asimptotic inferioar
i ordinul exact al funciilor.
Limita asimptotic superioar. Fie funciile f, g : NR+. Funcia g(n) este
limita asimptotic superioar a funciei f(n) dac o constant c > 0 i o valoare
n0 0, astfel nct, pentru n n0, exist relaia f(n) cg(n). Se spune c funcia f(n)
este n ordinul lui g(n) sau g(n) limiteaz superior pe f(n). Se noteaz f(n) = O(g(n)).
Aceast clas de funcii permite descrierea comportrii unui algoritm n cazul
cel mai defavorabil. ntruct, de regul, intereseaz comportarea algoritmului pentru
date arbitrare de intrare, este suficient s specificm o limit superioar pentru timpul
de execuie. Notaia f(n) = O(g(n)) nseamn c f(n) crete asimptotic cel mult la fel de
repede ca g(n).

CALCUL PARALEL

Limita asimptotic inferioar. Fie funciile f, g : NR+. Funcia g(n) este


limita asimptotic inferioar a funciei f(n) dac o constant c > 0 i o valoare n0 0,
astfel nct n n0, exist relaia f(n) cg(n). Se noteaz f(n) = (g(n)).
Aceast notaie este folosit n special pentru a caracteriza comportarea
algoritmului n cazul cel mai favorabil. Notaia f(n) = (g(n)) nseamn c f(n) crete
asimptotic cel puin la fel de repede ca g(n).
Nici una dintre limitele asimptotice superioar i inferioar nu specific ct
este de strns limitarea.
Limitele asimptotice superioar i inferioar au proprietatea de antisimetrie,
adic f(n) = O(g(n)) implic g(n) = (f(n)).
Ordinul exact. Fie funciile f, g : NR+. Funcia f(n) este n ordinul exact al
funciei g(n) dac dou constante c1 > 0, c2 > 0 i o valoare n0 0, astfel nct,
pentru n n0, exist relaia c1g(n) f(nx) c2g(n). Se noteaz f(n) = (g(n)).
Din definiiile limitelor asimptotice ale
f(n) = (g(n)) i f(n) = O(g(n)) implic f(n) = (g(n)).

funciilor

rezult

Ordinul exact are proprietatea de simetrie: f(n)= (g(n)) implic g(n)= (f(n))
i este utilizabil numai atunci cnd funcia care caracterizeaz timpul de execuie este
unic.
Notaia (n) = O(g(n)) nseamn c (n) nu crete mai repede dect g(n), astfel
nct, pentru n suficient de mare (n n0) i o constant c aleas convenabil, (n)
rmne ntotdeauna sub c*g(n). Notaia f(n) = (g(n)) nseamn c f(n) crete cel
puin la fel de repede g(n), iar f(n) = (g(n)) nseamn c f(n) crete la fel de repede ca
i g(n) (Fig. A1.1).
(a): f(n) = O(g(n))

c*g(n)
f(n)

(b): f(n) = (g(n))

f(n)
c*g(n)

n0
n
n
Fig. A1.1 (a) Limita asimptotic superioar. (b) Limita asimptotic inferioar.
n0

Unii autori recomand pentru notaia de ordin: (n) O(g(n)) sau (n) este
n O(g(n)) dat fiind c O(g(n)) este o mulime de funcii. Semnul egal din notaia
(n) = O(g(n)) poate fi considerat un abuz de notaie, care sugereaz o simetrie a
instruciunii respective, simetrie care nu exist. De exemplu O(n) = O(n2) este
adevrat, dar O(n2) = O(n), nu este adevrat.
Notaia (n) O(g(n)) se bazeaz pe faptul c limitele asimptotice sunt
mulimi de funcii.

Anexa 1 Limitele asimptotice ale funciilor

ntra-adevar, pentru o funcie dat g(n), se poate defini clasa O(g(n)) a


algoritmilor ca totalitatea algoritmilor cu timpi de execuie caracterizai de o funcie
f(n) din mulimea O(g(n)) = { f(n) | ( c R+)( n N)( n n0) [f(n) cg(n)]}.
n continuare vom folosi totui notaia (n) = O(g(n)), dar cu grija necesar ca
aceast notaie s nu genereze erori de interpretare.
Aceleai observaii sunt valabile i pentru notaiile f(n) = (g(n)) i
f(n) = (g(n)).
Pentru analiza unui algoritm este util s se determine cea mai mic limit
asimptotic superioar (sau inferioar). Astfel, pentru pentru f(n) = 2n + 3, vom spune
c este n ordinul lui O(n), nu O(n2), (chiar dac afirmaia ar fi corect din punctul de
vedere al definiei).
Se pot defini funcii limite asimptotice ca expresii de dou sau mai multe
variabile. De exemplu:

f ( n, p ) = n 2 + p log p + np = O ( n 2 + p log p + np ) .

Proprietile limitelor asimptotice


(a) Reflexivitate:

f(n) = O(f(n))
f(n) = (f(n))
f(n) = (f(n))
(b) Tranzitivitate:

f(n) = (h(n)) i h(n) = (g(n)) f(n) = (g(n))


f(n) = (h(n)) i h(n) = (g(n)) f(n) = (g(n))
f(n) = (h(n)) i h(n) = (g(n)) f(n) = (g(n))
(c) Multiplicarea cu o constant k > 0:
f(n) = O(k*g(n)) f(n) = O(g(n))
f(n) = (k*g(n)) f(n) = (g(n))
f(n) = (k*g(n)) f(n) = (g(n))
Totui, pentru o analiz mai detaliat a comportrii funciilor, uneori poate fi
util s nu neglijm constantele multiplicative ale unor termeni.
(d) Suma funciilor:

O(f1(n) + f2(n)) = max (O(f1(n), O(f2(n)))

(f1(n) + f2(n)) = max ( (f1(n), (f2(n)))

(f1(n) + f2(n)) = max ((f1(n), (f2(n)))

Alegerea termenului maxim dintre O(f1(n)) i O(f2(n)) se face pe baza ordinii


de dominan a funciilor, definit n continuare.

CALCUL PARALEL

Ordinea de dominan a funciilor. g2(n)) domin pe g1(n)) i se scrie


g2(n)) > g1(n)), precum i O(g2(n)) > O(g1(n)), dac g2(n)/g1(n) este o funcie monoton
cresctoare de n.
Funciile folosite ca limite asimptotice pot avea rata (viteza) de cretere sublinear, linear i supralinear. n analiza complexitii, funciile cel mai frecvent
folosite sunt:
Funcii cu viteza de cretere sub-linear:
Constanta:
O(1)
Dublu logaritm:
O(log log n)
Logaritm:
O(log n)
Polinom (grad < 1)
O(nc), c < 1 (c este o constant)
Funcia cu viteza de cretere linear:
Polinom (grad 1):

O(n)

Funcii cu viteza de cretere supralinear:


Produs x*log x
O(n log n)
Polinom (grad > 1)
O(nc), c > 1 (c este o constant)
Exponenial:
O(2n)
Aceste funcii au fost prezentate n ordinea creterii dominanei: funcia
exponenial domin funcia polinomial, funcia polinomial domin funcia
logaritmic, funcia logaritmic domina funcia constant.
Relaia de dominan este tranzitiv. Dac funcia f2 domin funcia f1, i
funcia f1 domin funcia f0, atunci funcia f2 domin, de asemenea, funcia f0. Putem
scrie: O(1) < O(log n) < O(n) < O(n * log n) < O(n2) < O(nx3) < O(2nx).
n Fig. A1.2 a) i b) sunt date valorile funciilor importante n form numeric,
respectiv grafic, pentru diferite valori ale variabilei lor.

f(n)

Fig. A1.2-a Rata de cretere a funciilor n form numeric.

Anexa 1 Limitele asimptotice ale funciilor

f(n)

n
Fig. A1.2-b Rata de cretere a funciilor n form grafic.

Clasele de complexitate a algoritmilor. Teoria complexitii este o ramur a


tiinei calculatoarelor care ncearc s determine ct de greu sau ct de uor se poate
rezolva o problem de calcul.
n teoria complexitii, problemele se mpart n cteva clase de complexitate
n funcie de timpul necesar s fie rezolvate pe un sistem de calcul uniprocesor (mai
precis, pe o main Turing determinist).
Problemele ale cror timp de execuie este limitat superior de funcii
polinomiale (de dimensiunea n a problemei) se numesc probleme din clasa P i sunt
considerate rezolvabile (tractabile). Chiar pentru polinoame cu grad ridicat, care ar
putea necesita timpi de execuie de ani de zile pe cele mai rapide supercalculatoare, tot
exist sperana c ele vor fi rezolvate.
Problemele pentru care cel mai bun algoritm determinist are timp de execuie
exponenial sunt considerate ne-rezolvabile (netractabile). De exemplu, dac
rezolvarea unei probleme cu dimensiunea n a intrrii necesit un timp de execuie de
2n, atunci pentru n = 100, timpul de execuie pe un calculator de 1 GIPS ar fi de 400
miliarde de secole!
O problem cu timp de execuie exponenial, pentru care, fiind cunoscut o
soluie, corectitudinea acelei soluii se poate verifica n timp polinomial, aparine
clasei NP (non-deterministic polinomial).
Deoarece algoritmii determiniti sunt un caz special al algoritmilor
nedeterminiti, se tie c P NP (Fig.A1.3).

CALCUL PARALEL

NP: clasa problemelor rezolvabile prin


algoritmi nedeterminiti n timp
polinomial;

NP
NPC
P

P:

clasa problemelor rezolvabile prin


algoritmi determiniti n timp
polinomial;

NPC: clasa problemelor complet


nedeterministe.

Fig. A1.3 Conjectura relaiilor ntre clasele de complexitate NP, P i NPC.

Problemele din mulimea P sunt rezolvabile din punct de vedere


computaional, n timp ce problemele din mulimea {NP P} sunt nerezolvabile. Ceea
ce nu se cunoate nc, fiind o problem deschis n tiina calculatoarelor, este dac
P = NP sau P NP.
n momentul de fa, cei mai muli teoreticieni din domeniul tiinei
calculatoarelor cred c P NP. Aceast presupunere conduce ctre conjectura c
exist o subclas de probleme, numit clasa NP complet (nondeterministic complete NPC), astfel c:
NPC NP i NPC P = .