Sunteți pe pagina 1din 41

Tehnici de Proiectarea si Analiza

Algoritmilor
Dorel Lucanu
Bibliografie
T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introduction to
Algorithms, MIT Press, 1990

T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introducere in
algoritmi, Libris Agora, 2000

D. Lucanu, M. Craus :
Proiectarea algoritmilor, Polirom 2008




Pagina web a cursului:
https://fmse.info.uaic.ro/pages/17/
Organizare curs
! Modul I (primele sapte saptamani, D. Lucanu)
" Model de calcul. Complexitatea algoritmilor.
" Complexitatea problemelor. Exemple: sortarea, c!utarea.
" Structuri avansate pentru c!utare. Arbori AVL, 2-3 arbori.
" Paradigma program!rii dinamice. Problema rucsacului
" Paradigma program!rii dinamice. Problema distan"ei de
editare.
" Probleme NP-complete.
" Algoritmi de aproximare.
! Modul II (ultimele sapte saptamani, L. Ciortuz)
"
Evaluare
! Modul 1 (primele 7 saptamani)
" Minim 50% prezenta la seminar (inclusiv seminariile cu
cele doua teste >= minim 4 prezente)
" Minim 6 puncte la testul de la seminar + bonus
activitate (minim 6 din 23) (capacitatea de a rezolva
algorimic o problem! simpl!)
" Minim 10 puncte la testul din saptamana a 8-a sau in
sesiunea de restanta (minim 10 din 30) (n"elegerea la
nivel de baz! a conceptelor de algoritm, problem!
rezolvat! de algoritm, evaluarea unui algoritm)
" Minim 23 puncte in total: (prezente + test seminar +
bonus + test curs) (minim 23 din 58)
! In sesiunea de restante se poate da numai modulul
nepromovat
Introducere
! modelul de calcul
! masuri de complexitate timp si spatiu
! complexitatea in cazul cel mai nefavorabil
Ce este un algoritm?
Introducere
Ce este un algoritm
Nu exista o denit ie standard pentru nout iunea de algorithm.
Cambridge Dictionary:
A set of mathematical instructions that must be followed in a xed order, and that,
especially if given to a computer, will help to calculate an answer to a mathematical
problem.
Schneider and Gersting 1995 (Invitation for Computer Science):
An algorithm is a well-ordered collection of unambiguous and eectively computable
operations that when executed produces a result and halts in a nite amount of time.
Gersting and Schneider 2012 (Invitation for Computer Science, 6nd
edition):
An algorithm is ordered sequence of instructions that is guaranteed to solve a specic
problem.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 4 / 51
Ce este un algoritm?
Introducere
Ce este un algoritm?
Wikipedia:
In mathematics and computer science, an algorithm is a step-by-step procedure for
calculations. Algorithms are used for calculation, data processing, and automated
reasoning.
An algorithm is an eective method expressed as a nite list of well-dened instructions
for calculating a function. Starting from an initial state and initial input (perhaps
empty), the instructions describe a computation that, when executed, proceeds through
a nite number of well-dened successive states, eventually producing output and
terminating at a nal ending state. The transition from one state to the next is not
necessarily deterministic; some algorithms, known as randomized algorithms, incorporate
random input.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 5 / 51
Ingredientele de baza: model de calcul, problema rezolvata
Introducere
Ingredientele de baza: model de calcul, problema rezolvata
Toate denit iile au ceva n comun:
datele/informat ia si procesarea acestora/acesteia n pasi. Acestea
sunt descrise n general de un model de calcul.
Un model de calcul este format din:
memorie - modul de reprezentare a datelor
instruct iuni
sintaxa - descrie sintactic pasii de procesare
semantica - descrie pasii de procesare realizat i de execut ia unei
instruct iuni; n general este data de o relat ie de tranzit ie peste
congurat ii (sistem tranzit ional)
un algoritm trebuie sa produca un rezultat, adica un algoritm trebuie
sa rezolve o problema.
O problema este n general reprezentata de o pereche (input,output),
unde input reprezinta descrierea datelor de intrare (instant a) iar
output descrierea datelor de iesire (rezultatul).
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 6 / 51
Cum descriem un algoritm?
Introducere
Cum descriem un algoritm?
informal: limbaj natural
formal
notat ie matematica (masini Turing, lambda-calcul (Church), funct ii
recursive, . . . )
limbaje de programare: imperative de nivel inalt, de nivel jos,
declarative (e.g., programare funct ionala, programare logica). Acesta
poate si un model informal daca nu exista o semnatica formala
pentru limbaj.
semiformal
pseudo-cod: combina notat ia formala a limbajelor de prgramare cu
limbajul natural
notat ie graca: scheme logice, automate (state machines), diagrame
de activitat i
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 7 / 1
De ce nevoie de formalizare?
Introducere
De ce nevoie de formalizare?
nainte de secolul 20 matematicienii au utilizat not iunea de algoritm
doar la nivel intuitiv
n 1900, David Hilbert, la Congresul matematicienilor din Paris, a
formulat 23 de probleme ca provocari ale secolului care ncepea
problema a 10-a cerea gasirea unui proces care sa determine daca un
polinom cu cefeicient i ntregi are o radacina ntreaga
Hilbert nu a pronunt at termenul de algoritm
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 8 / 51
De ce nevoie de formalizare?
Introducere
De ce nevoie de formalizare?
problema a 10-a a lui Hilbert este nerezolvabila, i.e. nu exista un
algoritm care avand la intrare un polinom p, decide dacaa p are
radacina ntreaga
acest fapt nu se poate demonstra avand doar not iunea intuitiva de
algoritm
pentru a demonstra ca nu exista algoritm care rezolva o problema, e
necesar de o not iune formala
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 9 / 51
Formalizarea notiunii de algoritm
Introducere
Formalizarea not iunii de algoritm
abia n 1936 Alonso Church si Alan Turing au denit formal, ecare
independent, not iunea de de lagoritm
Church a utilizat notatt ia cunoscuta acum sub numele de
lambda-calcul (-calcul)
Turing a denit modelul de calcul care acum este cunoscut sub
numele de masini Turing
cele doua modele de calcul sunt echivalente
n 1970 Yuri Matijasevic a aratat ca nu exista algoritm care sa testeze
daca un polinom dat are radacina ntreaga sau nu (rezultaul se
bazraza pe munca anterioara depusa de Martin Davis, Hilary Putnam,
si Julia Robinson)
de atunci au aparut multe alte modele echivalente cu masinile Turing
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 10 / 51
Teza Church-Turing
Introducere
Teza Church-Turing
Turing a armat (Teza lui Turing) ca orice funct ie a carei valoare poate
obt inuta printr-o metoda efectiva (?), poate calculta de mo masina Turing.
Forma cea mai accesibila formulata de Turing:
LCMs [logical computing machines: Turings expression for Turing machines] can
do anything that could be described as rule of thumb or purely mechanical.
(Turing 1948)
Teza lui Church:
A function of positive integers is eectively calculable only if recursive.
Modelul de calcul al funct iilor recursive a fost denite de de Godel si Herbrand
(1932-1934) si este echivalent cu lambda-calculul (Kleene, Church, 1936).
Kleene (1967) este cel care a introdus termenul de Teza Church-Turing:
So Turings and Churchs theses are equivalent. We shall usually refer to them
both as Churchs thesis, or in connection with that one of its . . . versions which
deals with Turing machines as the Church-Turing thesis.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 11 / 51
Nivelul de formalizare
Introducere
Nivelul de formalizare
Care este cel mai potrivit limbaj formal de prezentare a algoritmilor?
masinile Turing, lambda-calcululu, funct iile recursive au avantajul ca
sunt usor de denit matematic, dar sunt greu de utilizat n practica
limbajele de programare sunt usor de utilizat n practica dar dicil de
manevrat n demonstrat ii datorita detaliilor de implementare
cel mai simplu limbaj de programare echivalent cu masinile Turing:
modelul de memorie: mult ime de variabile ce pot lua valori ntregi
instruct iuni: goto condit ionala si necondit ionala, incrementarea si
decrementarea variabilelor
este cunoscut sub numele de counting machines
o variant structurata (modelul programelor while):
modelul de memorie: mult ime de variabile ce pot lua valori ntregi
instruct iuni: atribuirea, if, while, si compunerea secvent iala
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 12 / 51
Limbajul utilizat la curs (partial)
Limbajul Alk Expresii si instruct iuni
Expresii: sintaxa
Notat ia Backus-Naur
syntax Exp ::= Id
| Int
| Exp "+" Exp
| Exp "*" Exp
...
| Exp "&&" Exp
| Exp "||" Exp
...
| Id "(" Exps ")"
...
syntax Exps ::= List{Exp,","}
Varianta recursiva
un identicator (nume de variabila)
este espresie
un numar ntreg este expresie
daca E
1
si E
2
sunt expresii atunci
E
1
+ E
2
este expresie
daca E
1
si E
2
sunt expresii atunci
E
1
* E
2
este expresie
. . .
dacaa E
1
, . . . , E
n
este o lista de
expresii sI F un identicator (nume
de funct ie)
. . .
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 29 / 51
Expresii
Limbajul utilizat la curs (partial)
Instructiuni
Limbajul Alk Expresii si instruct iuni
Instruct iuni: sintaxa
syntax Stmt ::= Exp "=" Exp ";"
| Exp ";"
| "{" "}"
| "{" Stmts "}"
| "while" "(" Exp ")" Stmt
| "return" Exps ";"
| Exp "(" Ids ")" "{" Stmts "}"
| "if" "(" Exp ")" Stmt "else" Stmt
| "if" "(" Exp ")" Stmt
...
syntax Stmts ::= List{Stmt,""}
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 30 / 51
Configuratii
Limbajul Alk Expresii si instruct iuni
Congurat ii
O congurat ie este o pereche hsecvent a-de-activitat i, starei
O activitate poate expresie ce urmeaza a evaluata, o instruct iune ce
urmeaza a executata, secvent a de instruct iuni, . . .
Exemple:
hx = x + 1; y = y + 2 * x;, x 7 7 y 7 12i
hx = x + 1; yy = y + 2 * x;, x 7 7 y 7 12i
hx + 1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
hx y + 1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 31 / 51
Pasi de executie
Limbajul Alk Expresii si instruct iuni
Pasi de execut ie
Un pas de execut ie este denit ca o tranzit ie ntre congurat ii:
hS, i hS
0
,
0
i
daca si numai daca
executand prima activitate din lista curenta de activitat i S n starea
obt inem lista de activitat i S
0
, ce urmeaza a executata n continuare, si o
noua stare
0
Pasii de execut ie sunt clasicat i n doua categorii:
structurali - rearanjeaza codul pentru execut ie; presupunem ca acesti
pasi au costul timp zero
computat ionali - executa operat ii care modica congurat ia; acesti
pasi au un cost nenul, care depinde de operat ia executata si de
marimea operanzilor
Pasii de execut ie sunt descrisi prin reguli hS, i hS
0
,
0
i, unde S.S
0
, si

0
sunt termeni cu variabile.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 32 / 51
Secventializarea pasilor de executie
Limbajul Alk Expresii si instruct iuni
Secvent ializarea pasilor de execut ie
Se considera o relat ie S
1
yS
2
cu semnicat ia activitatea S
1
se executa nainte
de activitatea S
2
.
activitate = evaluarea unei expresii, execut ia unei instruct iuni, act iune
auxiliaraa,. . .
Ordinea de execut ie se poate deni prin reguli de heating/cooling:
E
1
+ E
2
E
1
y + E
2
(heating)
E
1
+ E
2
E
2
yE
1
+ (heating)
I
1
y + E
2
I
1
+ E
2
(cooling)
I
2
yE
1
+ E
1
+ I
2
(cooling)
(pentru o expresie-suma, se evalueaza mai ntai argumentele si apoi suma)
. . .
if E S
1
else S
2
E y if S
1
else S
2
(heating)
B y if S
1
else S
2
if B S
1
else S
2
(cooling)
(pentru instrct iunea if se evalueaza mai ntai expresia care trebuie sa dea ca
rezultat o valoare booleana)
. . .
Presupunere: pasii de execut ie generat i de regulile de heating/cooling sunt
structurali, deci au costul zero.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 33 / 51
Evaluarea operatorilor
Limbajul Alk Expresii si instruct iuni
Evaluarea expresiilor
Deoarece subexpresiile (argumentele) sunt deja evaluate datorita regulilor
de heating/cooling, trebuie reguli doar pentru evaloarea operatorilor:
hI
1
+ I
2
yS, i hI
1
+
Int
I
2
yS, i
hI
1
* I
2
yS, i hI
1

Int
I
2
yS, i
. . .
hB
1
|| B
2
yS, i hB1
1

Bool
B2
2
yS, i
hB
1
&& B
2
yS, i hB1
1

Bool
B2
2
yS, i
. . .
Costul unei tranzit ii data de regula de mai sus este costul operat iei din
partea dreapta. Exemplu:
time(hI
1
+ I
2
yS, i hI
1
+
Int
I
2
yS, i) = time(I
1
+
Int
I
2
)

In consecint a, ecare pas de execut ie va avea doua costuri timp: uniform


si logaritmic.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 34 / 51
Costul operatiilor
Limbajul Alk Operat ii
Scalari

Intregi:
Operat ie time(Operat ie)
Cost uniform Cost logaritmic
a +
Int
b O(1) O(max(log a, log b))
a
Int
b O(1)
O(log a log b)
O(max(log a, log b)
1.545
)
. . .
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 23 / 51
Fiecare operatie are un cost:
Calcul asimptotic (reamintire)
! clasele de functii
O(f(n)) = {g(n) | (!c > 0, n
0
)("n # n
0
) |g(n)| $ c|f(n)|}
#(f(n)) = {g(n) | (!c > 0, n
0
)("n # n
0
) |g(n)| # c|f(n)|}
$(f(n)) = {g(n) | (!c
1
,c
2
> 0, n
0
)("n # n
0
)
c
1
|f(n)| $ |g(n)| $ c
2
|f(n)|}
! conventii
g(n) = O(f(n)) in loc de g(n) % O(f(n))
O(g(n)) = O(f(n)) in loc de O(g(n) & O(f(n))
! expresii
O(f
1
(n)) + O(f
2
(n)) = {g
1
(n) + g
2
(n)| g
1
(n) % O(f
1
(n)),
g
2
(n) % O(f
2
(n))}
! exemplu
O(n log n) + O(n
2
) = O(n
2
)
Evaluarea variabilelor (Citirea din memorie)
Limbajul Alk Expresii si instruct iuni
Evaluarea expresiilor
variabila: x
informal : variabila x se nlocuieste cu valoare ei din componenta stare
a congurat iei curente
formal : hx yS, {x 7 v}i hv yS, {x 7 v}i
cost uniform: O(1), cost logaritmic: O(log v)
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 35 / 51
Semantica atribuirii
Limbajul Alk Expresii si instruct iuni
Instruct iuni: semantica
atribuirea: x = e;
informal : se evalueaza e si rezultatul este atribuit ca noua valoare a
variabilei x
formal : evaluarea mai ntai a lui e se face prin reguli de
heating/cooling:
hx = e; yS, i he yx = ; yS, i
hv yx = ; yS, i hx = v; yS, i
Execut ia propriuzisa a atribuirii:
hx = v; yS, {x 7 }i hS, {x 7 v}i
cost uniform: O(1), cost logaritmic: O(log v)
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 36 / 51
Semanticele instructiunilor if si while
Limbajul Alk Expresii si instruct iuni
Instruct iuni: semantica
if: if (e) then S else S
0
informal : se evalueaza e; daca rezultatul obt inut este true, atunci se executa
S, altfel se executa S
0
formal : evaluarea mai ntai a lui e se face prin reguli de heating/cooling
descrise pe slide-ul 33; Semantica controlului dat de if:
hif (true) then S else S
0
yS
00
, i hS yS
00
, i
hif (false) then S else S
0
yS
00
, i hS
0
yS
00
, i
cost uniform: O(1), cost logaritmic: O(1)
while: while (e) S
informal : se evalueaza e; daca rezultatul obt inut este true, atunci se executa
S, dupa care se evalueaza din nou e si . . . ; altfel execut ia instruct iunii se
termina
formal : se exprima cu ajutorul lui if:
hwhile (e) S yS
0
, i
hif (e) { S ; while (e) S } else { } yS
0
, i
Ca si pentru reguille de heating/cooling, costul tranzit iei obt inute prin
aplicarea acestei reguli este considerat 0 (pas structural).
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 37 / 51
Semantica compunerii secventiale si blocului
Limbajul Alk Expresii si instruct iuni
Instruct iuni: semantica
compunerea secvent iala: S
1
; S
2
informal : se execta mai ntai S
1
apoi S
2
formal :
hS
1
; S
2
yS
0
, i hS
1
yS
2
yS
0
, i
bloc : {S}
informal : se execta instruct iunile dintre acolade
formal :
h{S} yS
0
, i hS yS
0
, i
Ca si pentru reguille de heating/cooling, costul tranzit iei obt inute prin
aplicarea acestor reguli este considerat 0 (pas structural).
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 38 / 51
Apelul de functie
Limbajul Alk Expresii si instruct iuni
Apelul de funct ie
Operat ie mai complexa ce include mai multe activitat i:
se evalueaza argumentele actuale
legarea parametrilor formali la valorile date de argumentele actuale
(parametrii funct iei devin variabile cu vlaorile date de evaluarea
argumentelor actuale)
salvarea starii curente n lista de actvitat i
construirea starii de start pentru execut ia corpului funct iei formata
din variabilele globale, parametrii si variabilele locale ale funct iei
dupa execut ia corpului funct iei, se restaureaza starea de dinainte de
apel
Funct iile sunt memorate ca variabile speciale
f 7 (parametri@{corpul funct iei})
Presupunere: costul unui apel este suma dintre costul evaluarii
argumentelor actuale si costul execut iei corpului funct iei.
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 39 / 51
Exemplu de executie
Limbajul Alk Expresii si instruct iuni
Exemplu de execut ie
hx y + 1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
h7 y + 1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
h7 + 1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
h7 +
Int
1 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i =
h8 yx = ; yy = y + 2 * x;, x 7 7 y 7 12i
hx = 8; yy = y + 2 * x;, x 7 7 y 7 12i
hy = y + 2 * x;, x 7 8 y 7 12i
. . .
- pas structural
- pas computat ional
cost uniform: 3
cost logaritmic: log 7 + log 7 + log 8
D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2013/2014 40 / 51
Problema
Problema rezolvata de un algoritm
Problema
O problema propusa pentru a rezolvata de un algoritm poate
reprezentata printr-o pereche (input, output), unde input descrie date de
intrare (o instant a) iar output descrie datele de iesire (raspunsul).
Exemplu (problema Platou):
Input: O secvent a a = (a
0
, . . . , a
n1
) de numere ntregi de lungime n
ordonata crescator. Un segment al secevent ei a[i ..j ], i j , este secvent a
(a
i
, . . . , a
j
). Lungimea unui segnent a[i ..j ] este j + 1 i , Un platou este
un segment cu toate elementele egale.
Output: Lungimea celui mai lung platou.
Notat ie: prin p P notam faptul ca p este instant a (componenta input) a
problemei p si prin P(p) rezultatul (componenta ouput).
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 4 / 18
Problema rezolvata de un algoritm
Problema rezolvata de un algoritm
Problema rezolvata de un algoritm
Spunem ca un algoritm A rezolva o problema P daca:
pentru orice instant a p a lui P, exista o congurat ie hA,
p
i astfel
ncat
p
include structuri date ce descrie p;
execut ia lui A din congurat ia init iala hA,
p
i se termina ntr-o
congurat ie h,
0
i; si

0
include structuri de date ce descriu P(p).
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 5 / 18
Problema rezolvata de un algoritm
Problema rezolvabila
O problema P este rezolvabila daca exista un algoritm A care rezolva P.
O problema P este nerezolvabila daca NU exista un algoritm A care
rezolva P.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 8 / 18
Exemplu: algoritm pentru problema platoului
Problema rezolvata de un algoritm
Algoritmul PlatouAlg
Presupunem ca secvent a a este reprezentata de tabloul
a 7 {0 7 a
0
. . . n 1 7 a
n1
}. Un algoritm propus pentru a rezolva
problema Platou este:
lg = 1;
i = 1;
while (i < n) {
if (a[i] == a[i -lg]) lg = lg+1;
i = i + 1;
}
Congurat ia init iala: hPlatouAlg, n 7 n a 7 {0 7 a
0
, . . . n 1 7 a
n1
}i
Congurat ia nala:
h, n 7 n a 7 {0 7 a
0
. . . n 1 7 a
n1
i 7 n lg 7 `}i
si ` reprezinta lungimea celui mai lung platou din a.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 6 / 18
Probleme de decizie
Problema rezolvata de un algoritm
Problema de decizie
O problema de decizie este o problema P la care raspunsul este de forma
DA sau NU (echivalent, true sau false). Mai precis, pentru orice
instant a p P, P(p) {DA, NU} (P(p) {true, false}).
O problema de decizie este reprezentata n general printr-o pereche
(instant a, ntrebare).
O problema decidabila este o problema de decizie rezolvabila.
O problema nedecidabila este o problema de decizie nerezolvabila.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 9 / 18
Timpul unei executii
Complexitatea unui algoritm
Timpul unei execut ii
Fie E = hA
0
,
0
i hA
n
,
n
i o execut ie. Timpul consumat de
aceasta execut ie este suma timpilor pasilor de execut ie:
time(E) =
P
n1
i =0
time(hA
i
,
i
i hA
i +1
,
i +1
i)
Reamintim ca timpul de execut ie al unui pas time(hA
i
,
i
i hA
i +1
,
i +1
i)
a fost precizat cand s-au descris evaluarile expresiilor si semantica
instruct iunilor. Reamintim ca exista doua versiuni pentru time, uniform si
logaritmic, ceea ce implica doua versiuni pentru time(E).
Demo cu versiunea de Alk care calculeaza si timpii uniform si logaritmic.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 12 / 18
Timpul necesar executiei unei instante
Complexitatea unui algoritm
Timpul necesar execut iei unei instant e
Un algoritm determinist este un algoritm A cu proprietatea ca pentru orice
congurat ie hA
i
,
i
i accesibila dintr-o congurat ie init iala hA
0
,
0
i (i.e.,
hA
0
,
0
i

hA
i
,
i
i) exista cel mult of congurat ie succesoare, i.e., cel
mult un hA
0
,
0
i cu proprietatea hA
i
,
i
i hA
0
,
0
i.
Fie P o problema, p o instant a a lui P si A un algoritm determinist care
rezolva P. Execut ia hA,
p
i este unica (deoarece A este determinist)
si nita (deoarece A rezolva P); notam aceasta execut ie cu E
p
.
Timpul necesar algoritmului A pentru a rezolva instant a p este
time(A, p) = time(E
p
)
Mai sus avem doua deninit ii: una pentru cazul costului uniform si una
pentru cazul costului logaritmic.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 13 / 1
Calculul timpului de executie: exemplu
s ' 0
i ' 0
while (i < m) {
i ' i+1
s ' s + i
}
nr. de biti pentru reprez. lui m este
n = [log m] + 1
luam m = 2
n-1

presupunem ca op. i < m si i ' i+1
se executa fiecare in timpul log i
prespunem ca op. s ' s + i se
executa in timpul log s
rezulta un timp de calcul
T
A
(p) = 2 + 2(
i
log i + (
i
log i*(i+1)/2 =
2 + 2log m! + log (m!)
2
/(2
m
) =
2 + 4log m! log 2
m
=
2 + 4 $(m log m ) m =
$(m log m) =
$(n 2
n
)
timp de calcul exponential!?
Inconvenientul de a lucra cu instante
! numarul de instante poate fi foarte mare (sau chiar
nemarginit
" exemplu: determinarea maximului dintr-un sir
" numarul de instante: ?
! expresia functiei care da timpul poate fi una foarte
complexa
! de aceea se prefera sa se compare instantele in clase a.i.
executiile instantelor din acceasi clasa sa fie cat de cat
comparabile
! vom pune doua instante in aceeasi clasa daca au aceeasi
dimensiune
Dimensiunea unei configuratii
Complexitatea n cazul cel mai nefavorabil
Dimensiunea unei congurat ii
Dimensiunea unei congurat ii este data de dimensiunea memoriei (facem
abstract ie de componenta activitat i de executat):
size(hA, i) = size()
Dimensiunea unei memorii este suma lungimilor reprezentarilor valorilor
variabilelor variabilelor:
size() =
P
x7v
size(v)
Dimensiunea valorilor:
scalari
ntregi: size(i ) = [log
2
i ] + 1
booleni: size(b) = 1
siruri: size(s) = numarul de caractere din sirul s
tablouri: size(A) =
P
i 7a
i
A
size(a
i
)
liste cons: size(()) = 0, size(V, (L)) = size(V) + size(L)
structuri: size(S) =
P
f7vS
size(v)
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 15 / 18
Dimensiunea unei instante a unei probleme
Complexitatea n cazul cel mai nefavorabil
Dimensiunea unei instant e a unei probleme
Fie P o problema, p o instant a a lui P si A un algoritm care rezolva P.
Dimensiunea lui p este dimensiunea reprezentarii sale n congurat ia
init iala:
size(p) = size(hA,
p
i)(= size(
p
))
Pe tabla: calculul dimensiunii a unei instant e a problemei Tablou.
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 16 / 18
Timpul de executie in cazul cel mai nefavorabil
Complexitatea n cazul cel mai nefavorabil
Complexitatea timp n cazul cel mai nefavorabil
Fie P o problema si A un algoritm determinist care rezolva P.
Grupam instant ele p ale problemei P n clase de echivalent a: p si p
0
sunt
n aceeasi clasa daca size(p) = size(p
0
).
Complexitatea timp n cazul cel mai nefavorabil este timpul dat de
execut ia cu timpul cel mai mare peste congurat iile init iale date de
instant ele din aceeasi clasa de echivalent a:
T
A
(n) = max{time(A, p) | size(p) = n}
Numarul ntreg pozitiv n poate privit ca ind clasa de ecivalent a a
instant elor de marime n.
De fapt mai sus avem doua deninit ii: una pentru cazul costului uniform si
una pentru cazul costului logaritmic.

In practica vom considera doar cazul costului uniform.


D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 17 / 18
Complexitatea spatiu
Complexitatea n cazul cel mai nefavorabil
Complexitatea spat iu
Fie E = hA
0
,
0
i hA
n
,
n
i o execut ie.
Spat iul consumat de aceasta execut ie este dat de maximul dintre
dimensiunile congurat iilor din E:
space(E) = max
n
i =0
size(hA
i
,
i
i)}
Spat iul necesar algoritmului A pentru a rezolva instant a p este
space(A, p) = space(E
p
)
Complexitatea spat iu n cazul cel mai nefavorabil este calculata ntr-un
mod similar complexitat ii timp pentru cazul cel mai nefavorabil:
S
A
(n) = max{space(A, p) | size(p) = n}
D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2013/2014 18 / 18
Calculul timpului de executie in cazul cel mai nefavorabil
! atribuire
x = E
T
E
(n) (de multe ori o constanta)
! compunerea secventiala
A1
A2
T
A1
(n) + T
A2
(n)
! if-then-else
if (E) A1 else A2
max(T
A1
(n) , T
A2
(n)) + T
E
(n)
! while
while (E) {
A1
}
m *( T
A1
(n) + T
E
(n)), m = nr. max. de iteratii

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