Sunteți pe pagina 1din 37

Complexitatea algoritmilor

St. Ciobaca, Dorel Lucanu


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

PA 2015/2016

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

1 / 37

Outline

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

2 / 37

Problem
a rezolvat
a de un algoritm

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

3 / 37

Problem
a rezolvat
a de un algoritm

Problema computationala

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


reprezentata prin:
domeniul problemei
o pereche (input, output)
Notatie:
p P p instanta (componenta input) a lui P
P(p) rezultatul (componenta ouput a) lui P pentru p

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

4 / 37

Problem
a rezolvat
a de un algoritm

Exemplu: problema Platou 1/2

Domeniul problemei:
consideram secvente a = (a0 , . . . , an1 ) de numere ntregi
segment a[i..j]: (ai , . . . , aj ), unde i j
daca i > j, a[i..j] este secventa vida
lungimea unui segment a[i..j] este j + 1 i
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.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

5 / 37

Problem
a rezolvat
a de un algoritm

Exemplu: problema Platou 2/2


Perechea (input, output) reprezentata cu ajutorul predicatelor:
platou(a, i, j): (k)i k j = ai = ak
ordonatCrescator (a): a0 . . . an1
ordonatCrescator (a) = (platou(a, i, j) ai == aj )
Input: a == (a0 , . . . , an1 ) ordonatCrescator (a).
Output: q Z
(0 i j < n)platou(a, i, j) q = j + 1 i
(0 k ` < n)platou(a, k, `) = q (` + 1 k).
input preconditie
output postconditie
(preconditie, postconditie) specificatie

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

6 / 37

Problem
a rezolvat
a de un algoritm

Problema rezolvata de un algoritm

A rezolva o problema P daca:


(p P) (hA, p i) a.. p include structuri date ce descrie p;
hA, i h., 0 i; si
0 include structuri de date ce descriu P(p).

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

7 / 37

Problem
a rezolvat
a de un algoritm

Problema rezolvata de un algoritm, mai formal

asertiunie : formula cu predicate descrisa cu variabilele care apar n


algoritm
|= : valorile variabilelor n satisfac
Exemplu: daca = x 7 3 y 7 5, atunci |= 2 x > y si 6|= x + y < 0.
P este specificata de (pre, post) (i.e., (preconditie, postconditie))
A rezolva P () cu |= pre ( 0 ) a.. hA, i h., 0 i si 0 |= post

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

8 / 37

Problem
a rezolvat
a de un algoritm

Rezolvare versus Corectitudine

A este corect A rezolva o problema specificata prin


(preconditie,postconditie)
Cele doua notiuni nu sunt chiar echivalente.
Exista doua tipuri de corectitudine:
corectitudine totala: (), daca |= pre atunci ( 0 ) a..
hA, i h., 0 i si 0 |= post
corectitudine partiala: (), daca |= pre si daca ( 0 ) a..
hA, i h., 0 i, atunci 0 |= post
Rezolvarea este echivalenta cu corectitudinea totala.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

9 / 37

Problem
a rezolvat
a de un algoritm

Algoritmul PlatouAlg

Pp. ca secventa a este reprezentata de tabloul a 7 [a0 . . . an1 ]


Un algoritm care rezolva problema Platou:
lg = 1;
i = 1;
while (i < n) {
if (a[i] == a[i - lg]) lg = lg+1;
i = i + 1;
}

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

10 / 37

Problem
a rezolvat
a de un algoritm

Relatia dintre PlatouAlg si specificarea problemei Platou

orice executie care pleaca din configuratia initiala:


hPlatouAlg , n 7 n a 7 [a0 , . . . , 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 q 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)

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

11 / 37

Problem
a rezolvat
a de un algoritm

Cum demonstram corectitudinea?


Cum dovedim ca algoritmul PlatouAlg rezolva ntr-adevar problema
Platou?
O posibila solutie:
- la nceputul si la sfarsitul buclei while:
lg reprezinta lungimea celui mai lung platou din segmentul a[0..i 1], i.e.
(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: invariantul si negatia conditiei (i n)
invariantul si i = n = postconditia
deci trebuie aratat ca si i n este invariant
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

12 / 37

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 subcazuri:
1.1 are loc platou(a, i0 , i) (i.e. a[i] == a[i - lg])
1.2 nu are loc platou(a, i0 , i)
2. cel mai lung platou din a[0..i 1] NU se termina n i 1

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

13 / 37

Problem
a rezolvat
a de un algoritm

Problema rezolvabila (calculabila)

O problema P este rezolvabila (calculabila) daca exista un algoritm A care


rezolva P.
O problema P este nerezolvabila (necalculabila) daca NU exista un
algoritm A care rezolva P.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

14 / 37

Problem
a rezolvat
a de un algoritm

Problema de decizie

Problema de decizie: raspunsul (outputul) este de forma DA sau NU


(echivalent, true sau false)
Reprezentarea unei probleme de decizie:
O problema decidabila este o problema de decizie rezolvabila.
O problema nedecidabila este o problema de decizie nerezolvabila.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

15 / 37

Problem
a rezolvat
a de un algoritm

Sunt toate problemele computationale rezolvabile


(decidabile)?

La nceputul secolului 20, matematicienii credeau ca da.


In 1931, Kurt Godel a socat dovedind ca aceasta este imposibil.
Oricat de puternic ar fi un sistem de rationament matematic, vor
exista afirmatii care nu pot fi demonstrate.
(Celebra teorema de incompletitudine alui G
odel).
Cativa ani mai tarziu, Alan Turing a demonstrat acelsi lucru utilizand
notiunea de algoritm (masina Turing).

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

16 / 37

Problem
a rezolvat
a de un algoritm

Program universal

program (algoritm) universal:


intrare: un program (algoritm) A si o intrare x (echivalent, o
configuratie hA, x i)
comportare: simuleaza activitatea lui A pentru intrarea x
Programele (algoritmii) pot fi intrari pentru alti algoritmi!

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

17 / 37

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 si 0 codificarea
unei intrari pentru A.
Question: Executia care pleaca din configuratia initiala hA, 0 i este finita?
Teorema
Nu exista un algoritm care sa rezolve Problema opririi.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

18 / 37

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.
Construim 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;
}
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

19 / 37

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?

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

20 / 37

Problem
a rezolvat
a de un algoritm

Alte exemple de probleme nedecidabile

Problema echivalentei programelor.


Totality: daca un program dat se opreste pentru toate intrarile.
Problema corectitudinii totale.
Problema a 10-a a lui Hilbert
...

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

21 / 37

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.
Este Problema opririi semidecidabila?

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

22 / 37

Complexitatea unui algoritm

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

23 / 37

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 d (E ) = i=0
time d (hAi , i i hAi+1 , i+1 i)
unde d {log , unif }
Demo cu versiunea de Alk care calculeaza si timpii uniform si logaritmic.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

24 / 37

Complexitatea unui algoritm

Timpul necesar executiei unei instante

Algoritm determinist: hAi , i i accesibila din configuratia initiala hA0 , 0 i,


cel mult o hA0 , 0 i cu hAi , i i hA0 , 0 i.
Fie P o problema rezolvata de A.
p P exista un calcul unic Ep = hA, p i .
Timpul necesar algoritmului A pentru a rezolva instanta p este
time d (A, p) = time d (Ep )
unde d {log , unif }

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

25 / 37

Complexitatea n cazul cel mai nefavorabil

Plan

Problema rezolvata de un algoritm

Complexitatea unui algoritm

Complexitatea n cazul cel mai nefavorabil

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

26 / 37

Complexitatea n cazul cel mai nefavorabil

Dimensiunea unei instante

Dimensiunea unei stari :


P
size d () = x7v size d (v )
Dimensiunea unei configuratii:
size d (hA, i) = size d ()
Fie P o problema rezolvata de A.
Dimensiumea lui p P:
size d (p) = size d (hA, p i) (= size(p ))
unde d {log , unif }.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

27 / 37

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 si


d {log , unif }.
Grupam instantele p ale problemei P n clase de echivalenta: p si p 0 sunt
n aceeasi clasa daca size d (p) = size d (p 0 ).
Un numar ntreg pozitiv n poate fi privit ca fiind clasa de ecivalenta a
instantelor de marime n.
Complexitatea timp n cazul cel mai nefavorabil:
TA,d (n) = max{time d (A, p) | p P, size d (p) = n}

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

28 / 37

Complexitatea n cazul cel mai nefavorabil

Complexitatea spatiu

Fie E = hA0 , 0 i hAn , n i o executie si d {log , unif }.


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

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

29 / 37

Complexitatea n cazul cel mai nefavorabil

Calcul complexitatii n cazul cel nefavorabil 1/3

A este o expresie E care nu include apeluri de functii (algoritmi):


TA,d (n) = time d ([[E ]](p )) pentru p P cu size d (p) = n
A este o atribuire X = E ;
TA,d (n) = TE ,d (n)
A este if (E ) S1 else S2 :
TA,d (n) = max{TS1 ,d (n), TS2 ,d (n)} + TE ,d (n)
A o compunere secventiala S1 S2 :
TA,d (n) = TS1 ,d (n) + TS2 ,d (n)

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

30 / 37

Complexitatea n cazul cel mai nefavorabil

Calcul complexitatii n cazul cel nefavorabil 2/3

A este o instructiune iterativa (e.g.,while, for): de multe ori se


poate calcula doar o aproximare
solutia 1 (o aproximare mai fidela):
se calculeaz
a num
arul maxim de iteratii nMax
se calculeaz
a complexitatea n cazul cel nefavorabil pentru fiecare
iteratie, fie acestea T1 , . . . , TnMax
se ia TA,d (n) = T1 + . . . + TnMax

solutia 2 (approximare mai grosiera):


se calculeaz
a num
arul maxim de iteratii nMax
se calculeaz
a complexitatea n cazul cel nefavorabil pentru iteratia cu
timpul (n cazul cel nefavorabil) cel mai mare, fie acesta TitMax
se ia TA,d (n) = nMax TitMax

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

31 / 37

Complexitatea n cazul cel mai nefavorabil

Calcul complexitatii n cazul cel nefavorabil 3/3


Atentie la liste, multimi, . . . :
s = 0;
for(i = 0; i < l.size(); ++i)
s = s + l.at(i);

// l is a linear list

s = emptySet;
forall x in a
// a is a set
if (x % 2 == 0) s = s U singletonSet(x);
Apel de functii (algoritmi):
se estimeaza dimensiunea argumentelor n functie de dimensiunea
instantei n
se utilizeaza complexitatea n cazul cel nefavorabil a algoritmului
apelat, calculata cu dimensiunea argumentelor estimata

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

32 / 37

Complexitatea n cazul cel mai nefavorabil

Calculul complexitatii n cazul cel nefavorabil n practica


deobicei numai costul uniform este calculat
trebuie precizata dimensiunea unei instante
numai o parte din operatii sunt considerate (e.g., comparari, atribuiri)
cel mai important (si uneori) dificil este identificarea cazului cel mai
nefavorabil
se calculeaza aproximatii ale lui TA,d (n) utilizand notatiile O(f (n)),
(f (n)),(f (n))
Reamintim:
O(f (n)) = {g (n) | (c > 0, n0 0)(n n0 )|g (n)| c |f (n)|}
(f (n)) = {g (n) | (c > 0, n0 0)(n n0 )|g (n)| c |f (n)|}
(f (n)) = {g (n) | (c1 , c2 > 0, n0 0)(n n0 )c1 |f (n)| |g (n)| c2 |f (n)|}

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

33 / 37

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.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

34 / 37

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.

S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

35 / 37

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.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

36 / 37

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.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC)

Complexitatea algoritmilor

PA 2015/2016

37 / 37

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