Sunteți pe pagina 1din 36

Complexitatea algoritmilor

Dorel Lucanu
Faculty of Computer Science
Alexandru Ioan Cuza University, Iasi, Romania
dlucanu@info.uaic.ro

PA 2014/2015

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

1 / 36

Anunt

Seminar grupa speciala: marti, ora 18, C308.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

2 / 36

Outline

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

3 / 36

Problem
a rezolvat
a de un algoritm

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

4 / 36

Problem
a rezolvat
a de un algoritm

Problema

O problema propusa pentru a fi rezolvata de un algoritm poate fi


reprezentata prin:
domeniul problemei - descrie conceptele ce apar n descrierea
problemei si relatiile dintre acestea
o pereche (input, output), unde input descrie date de intrare (o
instanta) iar output descrie datele de iesire (raspunsul).
Daca domeniul este subnteles sau cunoscut atunci se poate renunta la
descrierea lui.
Notatie: prin p P notam faptul ca p este instanta (componenta input) a
problemei P si prin P(p) rezultatul (componenta ouput).

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

5 / 36

Problem
a rezolvat
a de un algoritm

Exemplu: problema Platou 1/2

Domeniul problemei: Fiind data o secventa a = (a0 , . . . , an1 ) de numere


ntregi, un segment a[i..j] al seceventei a este secventa (ai , . . . , aj ), unde
i j. Daca i > j putem presupune ca segmentul a[i..j] este secventa vida.
Lungimea unui segnent a[i..j] este j + 1 i. Un platou este un segment cu
toate elementele egale.
Input: O secventa a = (a0 , . . . , an1 ) de numere ntregi de lungime n
ordonata crescator.
Output: Lungimea celui mai lung platou.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

6 / 36

Problem
a rezolvat
a de un algoritm

Exemplu: problema Platou 2/2


De multe ori perechea (input, output) poate fi reprezentata, cu ajutorul
predicatelor:
platou(a, i, j) are loc daca si numai daca a[i..j] este platou:
(k)i k j = a[i] = a[k]; daca tabloul este ordonat, atunci
platou(a, i, j) este echivalent cu a[i] == a[j];
ordonatCrescator (a) are loc daca si numai daca a[0] . . . a[n 1];
Input: a = (a0 , . . . , an1 ) astfel ncat ordonatCrescator (a).
Output: q astfel ncat
(0 i j < n)platou(a, i, j) q = j + 1 i
(0 k ` < n)platou(a, k, `) = q (` + 1 k).
Formalizate cu formule din logica de ordinul I, componenta input se mai
numeste preconditie, componenta output se numeste postconditie iar
perechea (preconditie, postconditie) se numeste specificatie.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

7 / 36

Problem
a rezolvat
a de un algoritm

Problema rezolvata de un algoritm

Spunem ca un algoritm A rezolva o problema P daca:


pentru orice instanta p a lui P, exista o configuratie hA, p i astfel
ncat p include structuri date ce descrie p;
executia care pleaca din configuratia initiala hA, p i se termina ntr-o
configuratie finala h, 0 i, scriem hA, i h., 0 i; si
0 include structuri de date ce descriu P(p).
Observatie.
Definitia de mai sus presupune ca A este determinist, astfel ca exista o
unica executie care pleaca din p . Instructiunile Alk studiate pana acum
sunt deterministe. Vom discuta mai tarziu de programe nedeterministe.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

8 / 36

Problem
a rezolvat
a de un algoritm

Problema rezolvata de un algoritm, mai formal

Presupunem ca asertiune sunt descrise cu variabilele care par n


algoritm.
Notam cu |= faptul ca valorile variabilelor n satisfac .
Exemplu: daca = x 7 3 y 7 5, atunci |= 2 x > y si 6|= x + y < 0.
A rezolva P, specificata de (pre, post) daca pentru orice stare , daca
|= pre atunci exista 0 astfel ncat hA, i h., 0 i si 0 |= post.
Perechea (pre, post) reprezinta specificatia (preconditie,postconditie).
instanta p P:

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

9 / 36

Problem
a rezolvat
a de un algoritm

Rezolvare versus Corectitudine


Daca un algoritm A rezolva o problema specificata prin
(preconditie,postconditie), se mai spune ca algoritmul A este corect
(relativ la specificatia (preconditie,postconditie)).
Cele doua notiuni nu sunt chiar echivalente.
Exista doua tipuri de corectitudine:
corectitudine totala: pentru orice stare , daca |= pre atunci exista 0
astfel ncat hA, i h., 0 i si 0 |= post.
corectitudine partiala: pentru orice stare , daca |= pre si daca exista 0
astfel ncat hA, i h., 0 i, atunci 0 |= post.
La corectitudinea totala trebuie dovedita si terminarea executiei, la cea
partiala se cere ca starea finala sa satisfaca postconditia numai n cazurile
cand executia care pleaca din se termina.
Rezolvarea este echivalenta cu corectitudinea totala.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

10 / 36

Problem
a rezolvat
a de un algoritm

Algoritmul PlatouAlg

Presupunem ca secventa a este reprezentata de tabloul


a 7 {0 7 a0 . . . n 1 7 an1 }. 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;
}

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

11 / 36

Problem
a rezolvat
a de un algoritm

Relatia dintre PlatouAlg si specificarea problemei Platou

Ca sa aratam ca PlatouAlg rezolva Platou, va trebui sa aratam ca orice


executie care pleaca din configuratia initiala:
hPlatouAlg , n 7 n a 7 {0 7 a0 , . . . n 1 7 an1 }i
cu a0 an1 n 1 (i.e., satisface preconditia)
se opreste n configuratia finala:
h, n 7 n a 7 {0 7 a0 . . . n 1 7 an1 } i 7 n lg 7 qi
si ` reprezinta lungimea celui mai lung platou din a:
(0 i j < n)platou(a, i, j) q = j + 1 i
(0 k ` < n)platou(a, k, `) = q (` + 1 k)
(i.e., satisface postconditia)

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

12 / 36

Problem
a rezolvat
a de un algoritm

Cum demonstram corectitudinea?


Com dovedim ca algoritmul PlatouAlg rezolva ntr-adevar problema
Platou?
O posibila solutie:
- se arata ca la nceputul si la sfarsitul buclei while are loc proprietatea lg
reprezinta lungimea celui mai lung platou din segmentul a[0..i 1]
(0 i0 j0 < i)platou(a, i0 , j0 ) lg = j0 + 1 i0
(0 k ` < i)platou(a, k, `) = lg (` + 1 k)
- aceasta prorietate se numeste invariant de bucla
- la sfarsitul buclei while are loc invariantul si negatia conditiei (i n);
daca aratam ca si i n este invariant, atunci la sfarsitul buclei while vom
avea i = n si invariantul devine exact postconditia.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

13 / 36

Problem
a rezolvat
a de un algoritm

Cum demonstram invariantul?


Distingem doua cazuri:
1. j0 = i 1 (cel mai lung platou din a[0..i 1] se termina n i 1).
Distingem doua cazuri:
1.1 are loc platou(a, i0 , i), platoul a[i0 ..j0 ] se mareste cu o unitate si a[i0 ..i]
devine cel mai lung platou din a[0..i] (de ce?); de aceea lg este
incrementat;
1.2 nu are loc platou(a, i0 , i), adica a[i 1] < a[i]; cel mai lung platou din
a[0..i 1] va fi si cel mai lung platou din a[0..i]; de aceea lg nu se
modifica;
2. cel mai lung platou din a[0..i 1] NU se termina n i 1. Rezulta ca
lungimea platoului care se termina n i 1 este < lg, de unde lungimea
platoului care se termina n i este lg; de aceea lg nu se modifica.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

14 / 36

Problem
a rezolvat
a de un algoritm

Alt exemplu: problema celebritatii


Descriere neformala:
Se considera o colectivitate formata din n persoane. O celebritate este o
persoana care este cunoscuta de oricare alta persoana si nu cunoaste pe
nimeni. Problema consta n a scrie un program care sa determine daca
exista o celebritate n cadrul colectivitatii prin ntrebari de forma:
Persoana i cunoaste persoana j?. Programul va pune unu mar cat mai
mic de ntrebari (e posibil cel mult 3 n ntrebari).
Se remarca cerinta de performanta.
Exercitiu.
Sa se formalizeze problema ca o pereche (preconditie,postconditie), sa se
scrie un algoritm care rezolva problema, sa se demonstreze ca algoritmul
rezolva corect problema.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

15 / 36

Problem
a rezolvat
a 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 2014/2015

16 / 36

Problem
a rezolvat
a 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
instanta p P, P(p) {DA, NU} (P(p) {true, false}).
O problema de decizie este reprezentata n general printr-o pereche
(instance, question) (sau (instanta, 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 2014/2015

17 / 36

Problem
a rezolvat
a de un algoritm

Sunt toate problemele rezolvabile (decidabile)?

La nceputul secolului 20, matematicienii credeau ca da.


In 1931, Kurt Godel a socat dovedind ca aceasta este imposibil. El a
demonstrat ca daca avem un sistem destul de puternic si cu o comportare
bine-definita ce include rationamentul matematic, atunci vor exista
afirmatii care nu pot fi demonstrate ca fiind adevarate cu acest sistem,
chiar daca n realitate ele sunt adevarate. (celebra teorema de
incompletitudine alui Godel).
Cativa ani mai tarziu, Alan Turing a demonstrat acelsi lucru utilizand
notiunea de algoritm (masina Turing).

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

18 / 36

Problem
a rezolvat
a de un algoritm

Program universal

Pornind de la ideea de masina Turing universala, putem defini notiunea de


program (algoritm) universal: acesta are la intrare un program (algoritm)
A si o intrare x (echivalent cu avand la intare configuratia hA, x i),
simuleaza activitatea lui A pentru intrarea x (plecand din configuratia
hA, x i).
Programele (algoritmii) pot fi intrari pentru alti algoritmi!

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

19 / 36

Problem
a rezolvat
a de un algoritm

Exemplu de problema nerezolvabila/nedecidabila

Problema opririi:
Instance: O configuratie hA, 0 i, unde A este un algoritm.
Question: Executia care pleaca din configuratia initiala hA, 0 i este finita?
Teorema
Nu exista un algoritm care sa rezolve Problema opririi.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

20 / 36

Problem
a rezolvat
a de un algoritm

Ideea de demonstrare 1/2


Prin reducere la absurd. Presupunem ca exista un algoritm H care rezolva
problema opririi. Un apel al algoritmului H pentru intrarea A, x este notat
prin H(A, x).
Construin un alt aloritm, care apeleaza H:
NewH(A) {
if H(A, A) return true;
else return false;
}
si un alt program care apeleaza NewH:
HaltsOnSelf (A) {
if NewH(A) while (true) { }
else return false;
}
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

21 / 36

Problem
a rezolvat
a de un algoritm

Ideea de demonstrare 2/2

Ce se ntampla cand se apeleaza HaltsOnSelf(HaltsOnSelf)?


Executia lui HaltsOnSelf(HaltsOnSelf) nu se termina; rezulta ca
NewH(HaltsOnSelf) ntoarce true, care implica
H(HaltsOnSelf,HaltsOnSelf) ntoarce true. Contradictie.
Executia lui HaltsOnSelf(HaltsOnSelf) se termina si ntoarce true;
rezulta ca NewH(HaltsOnSelf) ntoarce false, care implica
H(HaltsOnSelf,HaltsOnSelf) ntoarce false. Contradictie din nou.
Rezolvarea teoremei de mai sus este strans legata de urmatorul paradox
logic. Exista un oras cu un barbier care barbiereste pe oricine ce nu se
barbiereste singur. Cine barbiereste pe barbier?

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

22 / 36

Problem
a rezolvat
a de un algoritm

Alte exemple de problme nedecidabile

Problema echivalentei programelor.


Totality: daca un program dat se opreste pentru toate intrarile.
Problema corectitudinii totale.
...

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

23 / 36

Problem
a rezolvat
a de un algoritm

Partial rezolvabil (calculabil, decidabil)

O problema de decizie este partial calculabila (semidecidabila) daca exista


un algoritm care se opreste cu raspunsul DA pentru toate intrarile
pentru care raspunsul correct este DA.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

24 / 36

Complexitatea unui algoritm

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

25 / 36

Complexitatea unui algoritm

Timpul unei executii

Fie E = hA0 , 0 i hAn , n i o executie. Timpul consumat de


aceasta executie este suma timpilor pasilor de executie:
Pn1
time(E ) = i=0
time(hAi , i i hAi+1 , i+1 i)
Reamintim ca timpul de executie al unui pas time(hAi , i i hAi+1 , i+1 i)
a fost precizat cand s-au descris evaluarile expresiilor si semantica
instructiunilor. 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 2014/2015

26 / 36

Complexitatea unui algoritm

Timpul necesar executiei unei instante


Un algoritm determinist este un algoritm A cu proprietatea ca pentru orice
configuratie hAi , i i accesibila dintr-o configuratie initiala hA0 , 0 i (i.e.,
hA0 , 0 i hAi , i i) exista cel mult of configuratie succesoare, i.e., cel
mult un hA0 , 0 i cu proprietatea hAi , i i hA0 , 0 i.
Fie P o problema, p o instanta a lui P si A un algoritm determinist care
rezolva P. Executia hA, p i este unica (deoarece A este determinist)
si finita (deoarece A rezolva P); notam aceasta executie cu Ep .
Timpul necesar algoritmului A pentru a rezolva instanta p este
time(A, p) = time(Ep )
Mai sus avem doua defininitii: una pentru cazul costului uniform si una
pentru cazul costului logaritmic.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

27 / 36

Complexitatea n cazul cel mai nefavorabil

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

28 / 36

Complexitatea n cazul cel mai nefavorabil

Dimensiunea unei configuratii


Dimensiunea unei configuratii este data de dimensiunea memoriei (facem
abstractie de componenta program de executat):
size(hA, i) = size()
Dimensiunea unei memorii este suma lungimilor reprezentarilor valorilor
variabilelor variabilelor:
P
size() = x7v size(v )
Dimensiunea valorilor:
scalari
ntregi: size(x) = [log2 x] + 1 (logaritmic), size(x) = 1 (uniform)
booleni: size(b) = 1
siruri: size(s) = numarul de caractere din sirul s
P
tablouri: size(A) = i7ai A size(ai )
liste cons: size(()) = 0, size(V , (L)) = size(V ) + size(L)
P
structuri: size(S) = f7v S size(v )
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

29 / 36

Complexitatea n cazul cel mai nefavorabil

Dimensiunea unei instante a unei probleme

Fie P o problema, p o instanta a lui P si A un algoritm care rezolva P.


Dimensiunea lui p este dimensiunea reprezentarii sale n configuratia
initiala:
size(p) = size(hA, p i)(= size(p ))
Pe tabla: calculul dimensiunii a unei instante a problemei Tablou.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

30 / 36

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 instantele p ale problemei P n clase de echivalenta: 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
executia cu timpul cel mai mare peste configuratiile initiale date de
instantele din aceeasi clasa de echivalenta:
TA (n) = max{time(A, p) | p P, size(p) = n}
Numarul ntreg pozitiv n poate fi privit ca fiind clasa de ecivalenta a
instantelor de marime n.
De fapt mai sus avem doua defininitii: 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 2014/2015

31 / 36

Complexitatea n cazul cel mai nefavorabil

Complexitatea spatiu

Fie E = hA0 , 0 i hAn , n i o executie.


Spatiul consumat de aceasta executie este dat de maximul dintre
dimensiunile configuratiilor din E :
space(E ) = maxni=0 size(hAi , i i)}
Spatiul necesar algoritmului A pentru a rezolva instanta p este
space(A, p) = space(Ep )
Complexitatea spatiu n cazul cel mai nefavorabil este calculata ntr-un
mod similar complexitatii timp pentru cazul cel mai nefavorabil:
SA (n) = max{space(A, p) | size(p) = n}

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

32 / 36

Complexitatea n cazul cel mai nefavorabil

Exemplul 1

input:
output:

n, (a0 , .(
. . , an1 ), z numere ntregi.
min{i | ai = z} dac
a {i | ai = z} =
6 ,
poz =
1
altfel.

i = 0;
while (a[i] != z) and (i < n-1)
i = i+1;
if (a[i] == z) poz = i;
else poz = -1;
Discutia pe tabla.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

33 / 36

Complexitatea n cazul cel mai nefavorabil

Exemplul 2

input:
output:

n, (a0 , . . . , an1 ) numere ntregi.


max = max{ai | 0 i n 1}.

max = a[0];
for (i = 1; i < n; i++)
if (a[i] > max)
max = a[i];
Discutia pe tabla.

D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

34 / 36

Complexitatea n cazul cel mai nefavorabil

Exemplul 3
input:
output:

n, (a0 , . . . , an1 ) numere ntregi.


(ai0 , . . . , ain1 ) unde (i0 , . . . , in1 ) este o permutare
a sirului (0, . . . , n 1) si aij aij+1 , j {0, . . . , n 2}.

for (k = 1; k < n; k++) {


temp = a[k];
i = k - 1;
while (i >= 0 and a[i] > temp) {
a[i+1] = a[i];
i = i-1;
}
a[i+1] = temp;
}
Discutia pe tabla.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

35 / 36

Complexitatea n cazul cel mai nefavorabil

Exemplul 4
input:
output:

n, (a0 , . . . , an1 ), z numere ntregi;


secvent(
a (a0 , . . . , an1 ) este sortata crescator,
k {i | ai = z} dac
a {i | ai = z} =
6 ,
poz =
1
altfel.

istg = 0;
idr = n - 1;
while (istg <= idr ) {
imed = (istg + idr) / 2;
if (a[imed] == z)
return imed
else if (a[imed] > z)
idr = imed-1;
else
istg = imed + 1;
}
return -1
Discutia pe tabla.
D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2014/2015

36 / 36

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