Sunteți pe pagina 1din 48

Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor

Proiectarea algoritmilor
Algorimi, probleme, performant e
Mitica Craus
Univeristatea Tehnica Gheorghe Asachi din Ias
,
i
1/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cuprins
Introducere
Algoritmi
Tipuri de date
Programe
Limbaj algoritmic
Variabile
Instruct iuni
Subprograme
Execut ia programelor
Algoritmi si probleme
Not iunea de problema
Problemele de decizie
Problema rezolvata de un algoritm
Probleme nedecidabile
Evaluarea algorimilor
Timp si spatiu
Cazul favorabil si nefavorabil
Cazul mediu
Calcul asimptotic
2/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Algoritmi
Un algoritm este o secvent a nita de operat ii (pasi) care, atunci cand este
executata, produce o solut ie corecta pentru o problema precizata.
Tipul operat iilor si ordinea lor n secvent a respecta o logica specica.
Algoritmii pot descrisi n orice limbaj, pornind de la limbajul natural pana la
limbajul nativ al unui calculator specic.
Un limbaj al carui scop unic este cel de a descrie algoritmi se numeste limbaj
algoritmic.
Limbajele de programare sunt exemple de limbaje algoritmice.
3/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Tipuri de date
Un tip de date consta dintr-o mult ime de entitat i (componente) de tip data
(informat ie reprezentabila n memoria unui calculator), numita si domeniul tipului, si
o mult ime de operat ii peste aceste entitat i.
Convenim sa grupam tipurile de date n trei categorii:
tipuri de date elementare, n care entitat ile sunt indivizibile;
tipuri de date structurate de nivel jos, n care entitat ile sunt structuri relativ simple
obt inute prin asamblarea de date elementare sau date structurate, iar operat iile sunt
denite la nivel de componenta;
tipuri de date structurate de nivel nalt, n care componentele sunt structuri mai
complexe, iar operat iile sunt implementate de algoritmi proiectat i de catre utilizatori.
Primele doua categorii sunt dependente de limbaj.
Tipurile de nivel nalt pot descrise ntr-o maniera independenta de limbaj.
Un tip de date descris ntr-o maniera independenta de reprezentarea valorilor si
implementarea operat iilor se numeste tip de date abstract.
4/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Programe
Pasii unui algoritm si ordinea logica a acestora sunt descrise cu ajutorul
instruct iunilor.
O secvent a de instruct iuni care act ioneaza asupra unor structuri de date precizate se
numeste program.
Memoria este reprezentata ca o secvent a de celule (locat ii), ecare celula avand
asociata o adresa si putand memora (stoca) o data de un anumit tip (gura 1).
712
lungime integer
a
Figura 1 : Memoria
5/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Variabile
Accesul la memorie este realizat cu ajutorul variabilelor.
O variabila este caracterizata de:
un nume cu ajutorul caruia variabila este referita,
o adresa care desemneaza o locat ie de memorie si
un tip de date care descrie natura datelor memorate n locat ia de memorie asociata
variabilei.
Daca n plus adaugam si data memorata la un moment dat n locat ie, atunci
obt inem o instant a a variabilei.
O variabila este reprezentata grac ca n gura 2.a. Atunci cand tipul se subnt elege
din context, vom utiliza reprezentarea scurta sugerata n 2.b.
Convenim sa utilizam fontul type writer pentru notarea variabilelor si fontul
mathnormal pentru notarea valorilor memorate de variabile.
b)
lungime lungime 712 integer 712
a)
Figura 2 : Variabila
6/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea atribuire
Sintaxa:
variabila expresie
unde variabila este numele unei variabile, iar expresie este o expresie corect
formata, de acelasi tip cu variabila.
Semantica:
1. Se evalueaza expresie si rezultatul obt inut se memoreaza n locat ia de memorie
desemnata de variabila.
2. Valorile tuturor celorlalte variabile raman neschimbate.
Atribuirea este singura instruct iune cu ajutorul careia se poate modica memoria.
O reprezentare intuitiva a efectului instruct iunii de atribuire este data n gura 3.
b) Dupa atribuirea "a <- a*b"
a
5
b
-2
a -10 b
-2
a) Inainte de atribuire
Figura 3 : Atribuirea
7/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea if
Sintaxa:
if expresie
then secvent a-instruct iuni
1

else secvent a-instruct iuni


2

unde expresie este o expresie care prin evaluare da rezultat boolean, iar
secvent a-instruct iuni
i
, i = 1, 2, sunt secvent e de instruct iuni scrise una sub alta si
aliniate corespunzator.
Partea else este facultativa.
Daca partea else lipseste si secvent a-instruct iuni
1
este formata dintr-o singura
instruct iune, atunci instruct iunea if poate scrisa si pe un singur rand.
Semantica:
1. Se evalueaza expresie.
2. Daca rezultatul evaluarii este true, atunci se executa secvent a-instruct iuni
1
, dupa
care execut ia instruct iunii if se termina;
3. daca rezultatul evaluarii este false, atunci se executa secvent a-instruct iuni
2
dupa
care execut ia instruct iunii if se termina.
8/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea while
Sintaxa:
while expresie do
secvent a-instruct iuni
unde expresie este o expresie care prin evaluare da rezultat boolean, iar
secvent a-instruct iuni este o secvent a de instruct iuni scrise una sub alta si aliniate
corespunzator.
Semantica:
1. Se evalueaza expresie.
2. Daca rezultatul evaluarii este true, atunci se executa secvent a-instruct iuni, dupa
care se reia procesul ncepand cu pasul 1.
3. Daca rezultatul evaluarii este false, atunci execut ia instruct iunii while se termina.
9/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea for
Sintaxa:
for variabila expresie
1
to expresie
2
do
secvent a-instruct iuni
sau
for variabila expresie
1
downto expresie
2
do
secvent a-instruct iuni
unde variabila este o variabila de tip ntreg, expresie
i
, i = 1, 2, sunt expresii care
prin evaluare dau valori ntregi, secvent a-instruct iuni este o secvent a de instruct iuni
scrise una sub alta si aliniate corespunzator.
Semantica:
Instruct iunea
for i e
1
to e
2
do
S
simuleaza execut ia urmatorului
program:
i e
1
temp e
2
while (i temp) do
S
i succ(i)
/* succ(i) ^ntoarce
succesorul num arului ^ntreg i */
Instruct iunea
for i e
1
downto e
2
do
S
simuleaza execut ia urmatorului program:
i e
1
temp e
2
while (i temp) do
S
i pred(i)
/* pred(i) ^ntoarce
predecesorul num arului ^ntreg i */
10/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea for each
Sintaxa:
for each variabila mult ime do
secvent a-instruct iuni
unde variabila este o variabila de tip T , mult ime este o mult ime nita de valori din
T , secvent a-instruct iuni este o secvent a de instruct iuni scrise una sub alta si aliniate
corespunzator.
Semantica:
Instruct iunea
for each x T do
S
simuleaza execut ia urmatorului program:
while (T ,= / 0) do
x un element din T
S
T T {x}
11/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Instruct iunea repeat
Sintaxa:
repeat
secvent a-instruct iuni
until expresie
unde expresie este o expresie care prin evaluare da rezultat boolean, iar
secvent a-instruct iuni este o secvent a de instruct iuni scrise una sub alta si aliniate
corespunzator.
Semantica:
Instruct iunea
repeat
S
until e
simuleaza execut ia urmatorului program:
S
while (not e) do
S
12/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Except ii
Sintaxa:
throw mesaj
unde mesaj este un sir de caractere (un text).
Semantica:
Execut ia programului se opreste si este asat textul mesaj. Cel mai adesea, throw
este utilizata mpreuna cu if:
if expresie then throw mesaj
Obt inerea rezultatului true n urma evaluarii expresiei are ca semnicat ie aparit ia unei
except ii, caz n care execut ia programului se opreste.
Un exemplu de except ie este cel cand procedura new nu poate aloca memorie pentru
variabilele dinamice:
new(p)
if (p = NULL) then throw memorie insuficienta
13/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Subprograme
Limbajul nostru algoritmic este unul modular, unde un modul este identicat de un
subprogram.
Exista doua tipuri de subprograme: proceduri si funct ii.
14/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Proceduri
Interfat a dintre o procedura si modulul care o apeleaza este realizata numai prin
parametri si variabilele globale.
Apelul unei proceduri apare ca o instruct iune separata.
Forma generala a unei proceduri este:
procedure nume(lista-parametri)
secvent a-instruct iuni
end
Lista parametrilor este opt ionala. Consideram ca exemplu o procedura care
interschimba valorile a doua variabile:
procedure swap(x, y)
aux x
x y
y aux
end
Permutarea circulara a valorilor a trei variabile a, b, c se face apeland de doua ori
procedura swap:
swap(a, b)
swap(b, c)
15/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Funct ii.


In plus fat a de proceduri, o funct ie ntoarce o valoare asociata cu numele funct iei.
Apelul unei funct ii poate participa la formarea de expresii.
Forma generala a unei funct ii este:
function nume(lista-parametri)
secvent a-instruct iuni
return expresie
end
Lista parametrilor este opt ionala.
Valoarea ntoarsa de funct ie este cea obt inuta prin evaluarea expresiei.
O instruct iune return poate aparea n mai multe locuri n denit ia unei funct ii si
execut ia ei implica terminarea evaluarii funct iei.
Consideram ca exemplu o funct ie care calculeaza maximul dintre valorile a trei
variabile:
function max3(x, y, z)
temp x
if (y > temp) then temp y
if (z > temp) then temp z
return temp
end
Are sens sa scriem 2*max3(a, b, c) sau max3(a, b, c) < 5.
16/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Comentarii
Comentariile sunt notate n mod similar cu limbajul C, utilizand combinat iile de
caractere tt /* si */.
Comentariile au rolul de a introduce explicat ii suplimentare privind descrierea
algoritmului:
procedure absDec(x)
if (x > 0) /* testeaza daca x este pozitiv */
then x x-1 /* decrementeaza x */
else x x+1 /* incrementeaza x */
end
17/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Execut ia programelor
Intuitiv, o execut ie a unui program
consta n succesiunea de pasi elementari
determinat i de execut iile instruct iunilor
ce compun programul.
Convenim sa utilizam not iunea de
calcul pentru execut ia unui program.
Exemplu:
x 0
i 1
while (i < 10) do
x x*10+i
i i+2
Calculul descris de acest program ar
putea reprezentat de tabelul din
dreapta.
Pasul Instruct iunea i x
0 x 0
1 i 1 0
2 1<10 1 0
3 x x*10+i 1 0
4 i i+2 1 1
5 3<10 3 1
6 x x*10+i 3 1
7 i i+2 3 13
8 5<10 5 13
9 x x*10+i 5 13
10 i i+2 5 135
11 7<10 7 135
12 x x*10+i 7 135
13 i i+2 7 1357
14 9<10 9 1357
15 x x*10+i 9 1357
16 i i+2 9 13579
17 11<10 11 13579
18 11 13579
18/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Congurat ii
O congurat ie c include instruct iunea curenta (starea programului) si starea
memoriei (valorile curente ale variabilelor din program).
Relat ia c
i 1

-
c
i
are urmatoarea semnicat ie:
Prin execut ia instruct iunii din c
i 1
, se transforma c
i 1
n c
i
.


In exemplul anterior, o congurat ie este reprezentata de o linie n tabel.
Calculul este notat formal printr-o secvent a c
0

-
c
1

-

-
c
18
.
c
0
se numeste congurat ie init iala, iar c
18
congurat ie nala.
Pot exista si calcule innite. Exemplu:
Instruct iunea
while (true) do
i i+1
genereaza un calcul innit.
19/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Algoritmi si probleme
Not iunile de algoritmi, programe si probleme sunt diferite si trebuie nt eles bine care
sunt relat iile dintre ele.
Un algoritm exprima o modalitate de a obt ine solut ia unei probleme specice.
Descrierea algoritmului ntr-un limbaj algoritmic se face prin intermediul unui
program.
Toate not iunile denite pentru program sunt extinse n mod natural la algoritm.
Astfel, putem vorbi despre execut ia (calculul) unui algoritm, congurat ie init iala, etc.
20/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Not iunea de problema
O problema are doua componente: domeniul, care descrie elementele ce intervin n
problema si relat iile dintre aceste elemente si o cerint a de determinare a unor
elemente ce au o anumita proprietate sau o ntrebare despre proprietat ile anumitor
elemente.


In funct ie de scopul urmarit, exista mai multe moduri de a formaliza o problema.
Vom utiliza numai doua dintre ele.
Intrare/Iesire.
Putem formaliza problema rezolvata de algoritm ca o pereche (Intrare, Iesire).
Componenta Intrare descrie datele de intrare, iar componenta Iesire descrie datele de
iesire.
Un exemplu simplu de problema reprezentata astfel este urmatorul:
Intrare: Un numar ntreg pozitiv x.
Iesire: Cel mai mare numar prim mai mic decat sau egal cu x.
Problema de decizie.
Este un caz particular de problema cand iesirea este de forma
/
DA
/
sau
/
NU
/
.
O astfel de problema este reprezentata ca o pereche (Instant a,

Intrebare) unde
componenta Instant a descrie datele de intrare, iar componenta

Intrebare se refera, n
general, la existent a unui obiect sau a unei proprietat i.
Un exemplu tipic l reprezinta urmatoarea problema:
Instant a: Un numar ntreg pozitiv x.

Intrebare: Este x numar prim?


21/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problemele de decizie
Problemele de decizie sunt preferate atat n teoria complexitat ii, cat si n teoria
calculabilitat ii datorita reprezentarii foarte simple a iesirilor.
Orice problema admite o reprezentare sub forma de problema de decizie, indiferent
de reprezentarea sa init iala.
De obicei, pentru reprezentarea problemelor de decizie se considera o mult ime U , iar
o instant a este de forma R U , x U si ntrebarea de forma x R?.
Problema din exemplul anterior poate reprezentata astfel:
Instant a: P= mult imea numerelor prime ( PZ), x Z
+
.

Intrebare: x P?
22/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problema rezolvata de un algoritm
Un algoritm A rezolva o problema P n sensul corectitudinii totale daca pentru orice
instant a p, calculul unic determinat de congurat ia init iala ce include p este nit si
congurat ia nala include iesirea P(p)
Un algoritm A rezolva o problema P n sensul corectitudinii part iale daca pentru
orice instant a p pentru care calculul unic determinat de congurat ia init iala ce
include p este nit, congurat ia nala include iesirea P(p).
Ori de cate ori spunem ca un algoritm A rezolva o problema P vom nt elege de fapt
ca A rezolva o problema P n sensul corectitudinii totale.
O problema P este rezolvabila daca exista un algoritm care sa o rezolve n sensul
corectitudinii totale. Daca P este o problema de decizie, atunci spunem ca P este
decidabila.
O problema de decizie P este semidecidabila sau part ial decidabila daca exista un
algoritm A care rezolva P n sensul corectitudinii part iale astfel ncat calculul lui A
este nit pentru orice instant a p pentru care raspunsul la ntrebare este
/
DA
/
.
O problema P este nerezolvabila daca nu este rezolvabila, adica nu exista un
algoritm care sa o rezolve n sensul corectitudinii totale. Daca P este o problema de
decizie, atunci spunem ca P este nedecidabila.
23/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Probleme nedecidabile
Pentru a arata ca o problema este decidabila este sucient sa gasim un algoritm care
sa o rezolve. Mai complicat este cazul problemelor nedecidabile.


In legatura cu acestea din urma se pun, n mod resc, urmatoarele ntrebari:
Exista probleme nedecidabile?
Cum putem demonstra ca o problema nu este decidabila?
Raspunsul la prima ntrebare este armativ. Un exemplu de problema nedicidabila
este problema opririi.
Problema opririi:
Notam cu U mult imea perechilor de forma A, x unde A este un algoritm si x este o
intrare pentru A, iar R este submult imea formata din acele perechi A, x pentru care
calculul lui A pentru intrarea x este nit.
Daca notam prin A(x) (a se citi A(x) = true) faptul ca A, x R, atunci problema
opririi poate scrisa astfel:
Instant a: Un algoritm A, x Z

Intrebare: A(x)?
24/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Evaluarea algorimilor
Evaluarea algorimilor din punctul de vedere al performant elor obt inute de acestia n
rezolvarea problemelor este o etapa esent iala n procesul de decizie a utilizarii
acestora n aplicat ii.
La evaluarea (estimarea) algoritmilor se pune n evident a consumul celor doua
resurse fundamentale: timpul de execut ie si spat iul de memorare a datelor.


In funct ie de prioritat ile alese, se aleg limite pentru resursele timp si spat iu.
Algoritmul este considerat eligibil daca consumul celor doua resurse se ncadreaza n
limitele stabilite.
25/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Timp si spatiu
Fie P o problema si A un algoritm pentru P.
Fie c
0

-
A
c
1

-
A
c
n
un calcul nit al algoritmului A.
Notam cu t
A
(c
i
) timpul necesar obt inerii congurat iei c
i
din c
i 1
, 1 i n, si cu
s
A
(c
i
) spat iul de memorie ocupat n congurat ia c
i
, 0 i n.
Fie A un algoritm pentru problema P, p P o instant a a problemei P si
c
0

-
c
1

-

-
c
n
calculul lui A corespunzator instant ei p.
Timpul necesar algoritmului A pentru rezolvarea instant ei p este:
T
A
(p) =
n

i =1
t
A
(c
i
)
Spat iul (de memorie) necesar algoritmului A pentru rezolvarea instant ei p este:
S
A
(p) = max
0i n
s
A
(c
i
)
26/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Marimea unei instant e
Asociem unei instant e p P o marime g(p), care este un numar natural, pe care o
numim marimea instant ei p.
De exemplu, g(p) poate suma lungimilor reprezentarilor corespunzand datelor din
instant a p.
Daca reprezentarile datelor din p au aceeasi lungime, atunci se poate considera g(p)
egala cu numarul datelor.
Daca p consta dintr-un tablou atunci se poate lua g(p) ca ind numarul de elemente
ale tabloului.
Daca p consta dintr-un polinom se poate considera g(p) ca ind gradul polinomului
(= numarul coecient ilor minus 1).
Daca p este un graf se poate lua g(p) ca ind numarul de varfuri, numarul de muchii
sau numarul de varfuri + numarul de muchii etc.
27/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cazul favorabil si nefavorabil
Fie A un algoritm pentru problema P.
Spunem ca A rezolva P n timpul T
fav
A
(n) daca:
T
fav
A
(n) = inf

T
A
(p) [ p P, g(p) = n

Spunem ca A rezolva P n timpul T


A
(n) daca:
T
A
(n) = sup

T
A
(p) [ p P, g(p) = n

Spunem ca A rezolva P n spat iul S


fav
A
(n) daca:
S
fav
A
(n) = inf

S
A
(p) [ p P, g(p) = n

Spunem ca A rezolva P n spat iul S


A
(n) daca:
S
A
(n) = sup

S
A
(p) [ p P, g(p) = n

Funct ia T
fav
A
(S
fav
A
) se numeste timpul de execut ie al algoritmului (spat iul utilizat de
algoritmul) A pentru cazul cel mai favorabil
Funct ia T
A
(S
A
) se numeste timpul de execut ie al algoritmului (spat iu utilizat de
algoritmul) A pentru cazul cel mai nefavorabil.
28/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problema cautarii unui element ntr-o secvent a de numere ntregi
Problema P
1
Intrare: n, (a
0
, . . . , a
n1
), z numere ntregi.
Iesire: poz =

mini [ a
i
= z dac a i [ a
i
= z ,= / 0,
1 altfel.
Presupunem ca secvent a (a
0
, . . . , a
n1
) este memorata n tabloul (a[i] [ 0 i n1).
Algoritmul A
1
descris de urmatorul program rezolva P
1
:
/* algoritmul A
1
*/
i 0
while (a[i] ,= z) and (i < n-1) do
i i+1
if (a[i] = z)
then poz i
else poz -1
29/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problema cautarii unui element ntr-o secvent a de numere ntregi -
continuare
Consideram ca dimensiune a problemei P
1
numarul n
al elementelor din secvent a n care se cauta.
Deoarece suntem n cazul cand toate datele sunt
memorate pe cate un cuvant de memorie, vom
presupune ca toate operat iile necesita o unitate de
timp.
Cazul cel mai favorabil este obt inut cand a
0
= z si se
efectueaza trei comparat ii si doua atribuiri. Rezulta
T
fav
A
1
(n) = 3+2 = 5.
Cazul cel mai nefavorabil se obt ine cand
z , a
0
, . . . , a
n1
sau z = a[n1], n acest caz ind
executate 2n+1 comparat ii si 1+(n1) +1 = n+1
atribuiri. Rezulta T
A
1
(n) = 3n+2.
Pentru simplitatea prezentarii, nu au mai fost luate n
considerare operat iile and si operat iile de adunare si
scadere.
Spat iul utilizat de algoritm, pentru ambele cazuri, este
n+7 (tabloul a, constantele 0, 1 si -1, variabilele i,
poz, n si z).
/* algoritmul A
1
*/
i 0
while (a[i] ,= z) and (i < n-1) do
i i+1
if (a[i] = z)
then poz i
else poz -1
30/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problema determinarii elementului de valoare maxima dintr-o secvent a de
numere ntregi
Problema P
2
Intrare: n, (a
0
, . . . , a
n1
) numere ntregi.
Iesire: max = maxa
i
[ 0 i n1.
Presupunem ca secvent a (a
0
, . . . , a
n1
) este memorata n tabloul (a[i] [ 0 i n1).
Algoritmul A
2
descris de urmatorul program rezolva P
2
:
/* algoritmul A
2
*/
max a[0]
for i 1 to n-1 do
if (a[i]>max)
then max a[i]
31/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Problema determinarii elementului de valoare maxima dintr-o secvent a de
numere ntregi - continuare
Dimensiunea problemei P
2
este n, numarul elementelor din
secvent a n care se cauta maximul. Vom presupune si n acest
caz ca toate operat iile necesita o unitate de timp.
Cazul cel mai favorabil este obt inut cand a
0
este elementul de
valoare maxima. Se efectueaza n+n1 = 2n1 comparat ii si
1+n atribuiri. Rezulta T
fav
A
1
(n) = 2n1+1+n = 3n.
Cazul cel mai nefavorabil se obt ine in situat ia n care tabloul
este ordonat crescator (pentru ca de ecare data instruct iunea
if se executa pe ramura then, adica se face si comparat ie si
atribuire).

In acest caz numarul comparat iilor este 2n1 si cel
al atribuirilor este 2n. Rezula T
A
2
(n) = 2n1+2n = 4n1.
Dimensiunea memoriei utilizate de algoritm este n+5 (tabloul
a, constanta 1, variabilele i, n si z), n ambele cazuri.
/* algoritmul A
2
*/
max a[0]
for i 1 to n-1 do
if (a[i] > max)
then max a[i]
32/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Sortarea prin inserare
Problema P
3
Intrare: n, (a
0
, . . . , a
n1
) numere ntregi.
Iesire: (a
i
0
, . . . , a
i
n1
) unde (i
0
, . . . , i
n1
) este o permutare a sirului
(0, . . . , n1) si a
i
j
a
i
j +1
, j 0, . . . , n2.
Presupunem din nou ca secvent a (a
0
, . . . , a
n1
) este memorata n tabloul (a[i] [ 0 i n1).
Algoritmul sortarii prin inserare considera ca n pasul k, elementele a[0..k-1] sunt sortate
crescator, iar elementul a[k] va inserat, astfel ncat, dupa aceasta inserare, primele
elemente a[0..k] sa e sortate crescator.
Inserarea elementului a[k] n secvent a a[0..k-1] presupune:
1. memorarea elementului ntr-o variabila temporara;
2. deplasarea tuturor elementelor din vectorul a[0..k-1] care sunt mai mari decat a[k],
cu o pozit ie la dreapta (aceasta presupune o parcurgere de la dreapta la stanga);
3. plasarea lui a[k] n locul ultimului element deplasat.
Algoritmul A
3
care rezolva P
3
este descris de urmatorul program:
/* algoritmul A
3
*/
for k 1 to n-1 do
temp a[k]
i k-1
while (i 0 and a[i] > temp) do
a[i+1] a[i]
i i-1
a[i+1] temp
33/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Sortarea prin inserare - continuare
Dimensiunea problemei P
3
este data de numarul n al
elementelor din secvent a ce urmeaza a sortata.
Presupunem si aici ca toate operat iile necesita o
unitate de timp.
Cazul cel mai favorabil este obt inut cand elementele
secvent ei sunt sortate crescator.

In aceasta situat ie
se efectueaza n+2(n1) comparat ii si n+3(n1)
atribuiri. Rezulta T
fav
A
1
(n) = 3n2+4n3 = 6n5.
Cazul cel mai nefavorabil este dat de situat ia n care
deplasarea (la dreapta cu o pozit ie n vederea
inserarii) se face de la nceputul tabloului, adica sirul
este ordonat descrescator. Estimarea timpului de
execut ie pentru cazul cel mai nefavorabil este
umatoarea: numarul de comparat ii este
n+2(2+3+ +n) = n+n(n+1) 2 = n
2
+2n2,
iar cel al atribuirilor este
n+3(n1) +2(1+2+ +n1) =
4n3+(n1)n = n
2
+3n3. Adunand, avem
T
A
3
(n) = (n
2
+2n2) +(n
2
+3n3) = 2n
2
+5n5.
Spat iul este n+5 (tabloul a, constantele 0 si 1,
variabilele i, temp, n si z).
/* algoritmul A
3
*/
for k 1 to n-1 do
temp a[k]
i k-1
while (i 0 and a[i] > temp) do
a[i+1] a[i]
i i-1
a[i+1] temp
34/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cautarea binara
Reconsideram problema cautarii unui element ntr-un tablou, dar cu presupunerea
suplimentara ca tabloul este ordonat.
Problema P
4
Intrare: n, (a
0
, . . . , a
n1
), z numere ntregi;
secvent a (a
0
, . . . , a
n1
) este sortata crescator,
adica a
i
a
i +1
, i 0, . . . , n2.
Iesire: poz =

k i [ a
i
= z dac a i [ a
i
= z ,= / 0,
1 altfel.
Esent a cautarii binare consta n compararea elementului cautat cu elementul din
mijlocul zonei de cautare si n cazul n care elementul cautat nu este egal cu acesta,
se restrange cautarea la subzona din stanga sau din dreapta, n funct ie de rezultatul
compararii.
Daca elementul cautat este mai mic decat cel din mijlocul zonei de cautare, se alege
subzona din stanga, altfel subzona din dreapta. Init ial, zona de cautare este tabloul
a.
Convenim sa notam cu i
stg
indicele elementului din stanga zonei de cautare n
tablou, i
dr
indicele elementului din dreapta zonei de cautare n tablou.
35/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cautarea binara - continuare
Algoritmul cautarii binare (A
4
)este descris de subprogramul urmator:
/* algoritmul A
4
*/
function cautareBinara(a,n,z)
i
stg
0
i
dr
n-1
while (i
stg
i
dr
) do
i
med
i
stg
+i
dr
|/2
if (a[i
med
]=z)
then return i
med
else if (a[i
med
]>z)
then i
dr
i
med
-1 /* se cauta in stanga */
else i
stg
i
med
+1 /* se cauta in dreapta */
return -1
end
36/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cautarea binara - continuare
Dimensiunea problemei P
4
este data de dimensiunea n a secvent ei n care se face
cautarea. Si de aceasta data presupunem ca toate operat iile necesita o unitate de
timp.
Calculul timpului de execut ie al algoritmului consta n determinarea numarului de
execut ii ale blocului de instruct iuni asociat cu instruct iunea while. Se observa ca,
dupa ecare iterat ie a buclei while, dimensiunea zonei de cautare se njumatat este.
Cazul cel mai favorabil este obt inut cand a
n1
2
| = z si se efectueaza doua
comparat ii si trei atribuiri. Rezulta T
fav
A
4
(n) = 2+3 = 5.
Cazul cel mai nefavorabil este n situat ia n care vectorul a nu cont ine valoarea
cautata. Pentru simplitate, se considera n = 2
k
, unde k este numarul de
njumatat iri. Rezulta k = log
2
n si printr-o majorare, T
A
4
(n) c log
2
n+1, unde c
este o constanta, c 1.
Spat iul necesar execut iei algoritmului A
4
este n+7 (tabloul a, constantele 0 si -1,
variabilele i
stg
, i
dr
, i
med
, n si z).
37/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cazul mediu
Timpii de execut ie pentru cazul cel mai favorabil nu ofera informat ii relevante despre
ecient a algoritmului.
Mult mai semnicative sunt informat iile oferite de timpii de execut ie n cazul cel mai
nefavorabil: n toate celelalte cazuri algoritmul va avea performant e mai bune sau
cel put in la fel de bune.
Pentru evaluarea timpului de execut ie nu este necesar ntotdeauna sa numaram
toate operat iile.


In exemplele anterioare, observam ca operat iile de atribuire (fara cea init iala) sunt
precedate de comparat ii.
Putem numara numai comparat iile, pentru ca numarul acestora determina numarul
atribuirilor.
Putem sa mergem chiar mai departe si sa numaram numai comparat iile ntre z si
componentele tabloului.
Uneori, numarul instant elor p cu g(p) = n pentru care T
A
(p) = T
A
(n) sau T
A
(p)
are o valoare foarte apropiata de T
A
(n) este foarte mic.
Pentru aceste cazuri, este preferabil sa calculam comportarea n medie a algoritmului.
38/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Cazul mediu - continuare
Pentru a putea calcula comportarea n medie este necesar sa privim marimea T
A
(p)
ca ind o variabila aleatoare (o experient a = execut ia algoritmului pentru o instant a
p, valoarea experient ei = durata execut iei algoritmului pentru instant a p) si sa
precizam legea de repartit ie a acestei variabile aleatoare.
Comportarea n medie se calculeaza ca ind media acestei variabile aleatoare
(consideram numai cazul timpului de execut ie):
T
med
A
(n) = M(T
A
(p) [ p P g(p) = n)
Daca mult imea valorilor variabilei aleatoare T
A
(p) = x
1
, . . . este nita sau
numarabila (T
A
(p) = x
1
, . . . , x
i
. . . si probabilitatea ca T
A
(p) = x
i
este p
i
, atunci
media variabilei aleatoare T
A
(timpul mediu de execut ie) este:
T
med
A
(n) =

i
x
i
p
i
39/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Exemplu de calcul al timpului pentru cazul mediu
Consideram problema P
1
denita anterior.
Mult imea valorilor variabilei aleatoare T
A
(p) este 3i +2 [ 1 i n.
Legea de repartit ie:
Facem urmatoarele presupuneri: probabibilitatea ca z a
0
, . . . , a
n1
este q si
probabilitatea ca z sa apara prima data pe pozit ia i 1 este
q
n
(indicii i candideaza cu
aceeasi probabilitate pentru prima aparit ie a lui z). Rezulta ca probabilitatea ca
z , a
0
, . . . , a
n1
este 1q.
Probabilitatea ca T
A
(p) = 3i +2 (poz = i 1) este
q
n
, pentru 1 i < n, iar
probabilitatea ca T
A
(p) = 3n+2 este p
n
=
q
n
+(1q) (probabilitatea ca poz = n1
sau ca z , a
0
, . . . , a
n1
).
40/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Exemplu de calcul al timpului pentru cazul mediu - continuare
Timpul mediu de execut ie este:
T
med
A
(n) =
n

i =1
p
i
x
i
=
n1

i =1
q
n
(3i +2) +(
q
n
+(1q)) (3n+2)
=
3q
n

n

i =1
i +
q
n
n

i =1
2+(1q) (3n+2)
=
3q
n

n(n+1)
2
+2q +(1q) (3n+2)
=
3q (n+1)
2
+2q +(1q) (3n+2)
= 3n
3nq
2
+
3q
2
+2
Pentru q = 1 (z apare totdeauna n secvent a) avem T
med
A
(n) =
3n
2
+
7
2
si pentru
q =
1
2
avem T
med
A
(n) =
9n
4
+
11
4
.
41/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Calcul asimptotic


In practica, atat T
A
(n), cat si T
med
A
(n) sunt dicil de evaluat. Din acest motiv se
cauta, de multe ori, margini superioare si inferioare pentru aceste marimi.
Urmatoarele clase de funct ii sunt utilizate cu succes n stabilirea acestor margini:
O(f (n)) = g(n) [ (c > 0, n
0
0)(n n
0
)[g(n)[ c [f (n)[
(f (n)) = g(n) [ (c > 0, n
0
0)(n n
0
)[g(n)[ c [f (n)[
(f (n)) = g(n) [ (c
1
, c
2
> 0, n
0
0)(n n
0
)c
1
[f (n)[ [g(n)[ c
2
[f (n)[
Cu notat iile O, si se pot forma expresii si ecuat ii. Consideram numai cazul O,
celelalte tratandu-se similar.
Expresiile construite cu O pot de forma:
O(f
1
(n)) op O(f
2
(n))
unde

oppoate +, , etc. si noteaza mult imile:


g(n) [ (g
1
(n), g
2
(n), c > 0, n
0
0)
[(n)g(n) = g
1
(n) op g
2
(n)] [(n n
0
)g
1
(n) cf
1
(n) g
2
(n) cf
2
(n)]
De exemplu:
O(n) +O(n
2
) = g(n) = g
1
(n) +g
2
(n) [ (n n
0
)g
1
(n) cng
2
(n) cn
2

42/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Calcul asimptotic - continuare
Utilizand regulile de asociere si prioritate, se obt in expresii de orice lungime:
O(f
1
(n)) op
1
O(f
2
(n)) op
2

Orice funct ie f (n) poate gandita ca o notat ie pentru mult imea cu un singur
element f (n) si deci putem alcatui expresii de forma:
f
1
(n) +O(f
2
(n))
ca desemnand mult imea:
f
1
(n) +g(n) [ g(n) O(f
2
(n)) =
f
1
(n) +g(n) [ (c > 0, n
0
> 1)(n n
0
)g(n) c f
2
(n)
Peste expresii consideram formule de forma:
expr 1 = expr 2
cu semnicat ia ca mult imea desemnata de expr 1 este inclusa n mult imea desemnata
de expr 2.
43/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Calcul asimptotic - Exemplu de formule
nlogn+O(n
2
) = O(n
2
)
Justicare:
(c
1
> 0, n
1
> 1)(n n
1
)nlogn c
1
n
2
, g
1
(n) O(n
2
) implica
(c
2
> 0, n
2
> 1)(n n
2
)g
1
(n) c
2
n
2
c si de aici
(n n
0
)g(n) = nlogn+g
1
(n) nlogn+c
2
n
2
(c
1
+c
2
)n
2
, unde
n
0
= maxn
1
, n
2
.
De remarcat nesimetria ecuat iilor: part ile stanga si cea din dreapta joaca roluri
distincte.
Ca un caz particular, notat ia g(n) = O(f (n)) semnica, de fapt, g(n) O(f (n)).
44/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Calculul timpului asimptotic de execut ie pentru cazul cel mai nefavorabil
Un algoritm poate avea o descriere complexa si deci evaluarea sa poate pune unele
probleme.
Deoarece orice algoritm este descris de un program, n continuare consideram A o
secvent a de program.
Regulile prin care se calculeaza timpul de execut ie sunt date n funct ie de structura
lui A:
A este o instruct iune de atribuire. Timpul de execut ie a lui A este egal cu timpul
evaluarii expresiei din partea dreapta.
A este forma A
1
A
2
Timpul de execut ie al lui A este egal cu suma timpilor de execut ie
ai algoritmilor A
1
si A
2
.
A este de forma if e then A
1
else A
2
. Timpul de execut ie al lui A este egal cu
maximul dintre timpii de execut ie ai algoritmilor A
1
si A
2
la care se aduna timpul
necesar evaluarii expresiei e.
A este de forma while e do A
1
. Se determina cazul n care se executa numarul maxim
de iterat ii ale buclei while si se face suma timpilor calculat i pentru ecare iterat ie.
Daca nu este posibila determinarea timpilor pentru ecare iterat ie, atunci timpul de
execut ie al lui A este egal cu produsul dintre timpul maxim de execut ie al algoritmului
A
1
si numarul maxim de execut ii ale buclei A
1
.
45/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Timp polinomial
Theorem (1)
Daca g este o funct ie polinomiala de grad k, atunci g = O(n
k
).
Demonstrat ie.
Presupunem g(n) = a
k
n
k
+a
k1
n
k1
+ +a
1
n+a
0
.
Efectuand majorari n membrul drept, obt inem:
g(n) [a
k
[ n
k
+[a
k1
[ n
k1
+ +[a
1
[ n+[a
0
[ < n
k
([a
k
[ +[a
k1
[ +[a
0
[)

c
< n
k
c
pentru n > 1 g(n) < c n
k
, cu n
0
= 1.
Deci g = O(n
k
).
46/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor
Clasicarea algoritmilor
Urmatoarele incluziuni sunt valabile n cazul notat iei O:
O(1) O(logn) O(log
k
n) O(n) O(n
2
) O(n
k+1
) O(2
n
)
Pentru clasicarea algoritmilor cea mai utilizata totat ie este O.
Cele mai cunoscute clase sunt:
A [ T
A
(n) = O(1) = clasa algoritmilor constant i;
A [ T
A
(n) = O(logn) = clasa algoritmilor logaritmici;
A [ T
A
(n) = O(log
k
n)= clasa algoritmilor polilogaritmici;
A [ T
A
(n) = O(n) = clasa algoritmilor liniari;
A [ T
A
(n) = O(n
2
) = clasa algoritmilor patratici;
A [ T
A
(n) = O(n
k
) = clasa algoritmilor polinomiali;
A [ T
A
(n) = O(2
n
) = clasa algoritmilor exponent iali.
Cu notat iile de mai sus, doi algoritmi, care rezolva aceeasi problema, pot
comparat i numai daca au timpii de execut ie n clase de funct ii (corespunzatoare
notat iilor O, si ) diferite. De exemplu, un algoritm A cu T
A
(n) = O(n) este mai
ecient decat un algoritm A
/
cu T
A
/ (n) = O(n
2
).
Daca cei doi algoritmi au timpii de execut ie n aceeasi clasa, atunci compararea lor
devine mai dicila pentru ca trebuie determinate si constantele cu care se nmult esc
reprezentant ii clasei.
47/ 48
Introducere Limbaj algoritmic Execut ia programelor Algoritmi si probleme Evaluarea algorimilor

Incadrarea algoritmilor n clasele lor


Putem acum ncadra algoritmii prezentat i n exemplele anterioare n clasele lor.
Pentru algoritmul ce rezolva problema P
1
(cautarea unui element ntr-o secvent a de
numere), T
A
1
(n) = 3n+2. Deci, timpul de execut ie al acestui algoritm pentru cazul
cel mai nefavorabil este n clasa O(n).
Pentru problema P
2
(cautarea ntr-un sir a elementului de valoare maxima),
T
A
2
(n) = 1+2(n1). Timpul de execut ie a algoritmului ce rezolva aceasta
problema pentru cazul cel mai nefavorabil este n clasa O(n).


In cazul problemei P
3
(sortarea prin inserare), T
A
3
(n) = 3(n1) +3n(n1)/2.
Rezulta ca timpul de execut ie al algoritmului respectiv este n clasa O(n
2
).
Pentru problema P
4
(cautarea binara) nu se poate aplica teorema 1. Deoarece
T
A
4
(n) log
2
n+1, timpul de execut ie al acestui algoritm este n clasa O(log
2
n).
Baza logaritmului se poate ignora deoarece: log
a
x = log
a
blog
b
x si log
a
b este o
constanta, deci ramane O(logn), adica o funct ie logaritmica.
48/ 48