compl alg pres

37
Complexitatea algoritmilor S ¸t. Ciobˆ ac˘ a, Dorel Lucanu Faculty of Computer Science Alexandru Ioan Cuza University, Ia¸ si, Romania [email protected], [email protected] PA 2015/2016 S ¸t. Ciobˆ ac˘ a, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 1 / 37

Upload: catalin-dragomirescu

Post on 08-Jul-2016

237 views

Category:

Documents


1 download

DESCRIPTION

Algoritmi

TRANSCRIPT

Complexitatea algoritmilor

St. Ciobaca, Dorel Lucanu

Faculty of Computer ScienceAlexandru Ioan Cuza University, Iasi, Romania

[email protected], [email protected]

PA 2015/2016

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 1 / 37

Outline

1 Problema rezolvata de un algoritm

2 Complexitatea unui algoritm

3 Complexitatea ın cazul cel mai nefavorabil

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 2 / 37

Problema rezolvata de un algoritm

Plan

1 Problema rezolvata de un algoritm

2 Complexitatea unui algoritm

3 Complexitatea ın cazul cel mai nefavorabil

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 3 / 37

Problema rezolvata de un algoritm

Problema computationala

O problema propusa pentru a fi rezolvata de un algoritm poate fireprezentata prin:

domeniul problemei

o pereche (input, output)

Notatie:p ∈ P ≡ p instanta (componenta input) a lui PP(p) ≡ rezultatul (componenta ouput a) lui P pentru p

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 4 / 37

Problema rezolvata de un algoritm

Exemplu: problema Platou 1/2

Domeniul problemei :

consideram secvente a = (a0, . . . , an−1) 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, . . . , an−1) de numere ıntregi de lungime nordonata crescator.

Output: Lungimea celui mai lung platou.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 5 / 37

Problema rezolvata de un algoritm

Exemplu: problema Platou 2/2

Perechea (input, output) reprezentata cu ajutorul predicatelor:

platou(a, i , j): (∀k)i ≤ k ≤ j =⇒ ai = akordonatCrescator(a): a0 ≤ . . . ≤ an−1

ordonatCrescator(a) =⇒ (platou(a, i , j) ⇐⇒ ai == aj)

Input: a == (a0, . . . , an−1) ∧ 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 ≡ preconditieoutput ≡ postconditie(preconditie, postconditie) ≡ specificatie

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 6 / 37

Problema rezolvata de un algoritm

Problema rezolvata de un algoritm

A rezolva o problema P daca:

(∀p ∈ P) (∃〈A, σp〉) a.ı. σp include structuri date ce descrie p;

〈A, σ〉 ⇒∗ 〈., σ′〉; si

σ′ include structuri de date ce descriu P(p).

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 7 / 37

Problema rezolvata de un algoritm

Problema rezolvata de un algoritm, mai formal

asertiunie φ: formula cu predicate descrisa cu variabilele care apar ınalgoritm

σ |= φ: 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 (∃σ′) a.ı. 〈A, σ〉 ⇒∗ 〈., σ′〉 si σ′ |= post

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 8 / 37

Problema rezolvata 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 (∃σ′) a.ı.〈A, σ〉 ⇒∗ 〈., σ′〉 si σ′ |= post

corectitudine partiala: (∀σ), daca σ |= pre si daca (∃σ′) a.ı.〈A, σ〉 ⇒∗ 〈., σ′〉, atunci σ′ |= post

Rezolvarea este echivalenta cu corectitudinea totala.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 9 / 37

Problema rezolvata de un algoritm

Algoritmul PlatouAlg

Pp. ca secventa a este reprezentata de tabloul a 7→ [a0 . . . an−1]

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;

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 10 / 37

Problema rezolvata de un algoritm

Relatia dintre PlatouAlg si specificarea problemei Platou

orice executie care pleaca din configuratia initiala:

〈PlatouAlg , n 7→ n a 7→ [a0, . . . , an−1]〉cu a0 ≤ · · · ≤ an−1 ∧ n ≥ 1 (i.e., satisface preconditia)

se opreste ın configuratia finala:

〈·, n 7→ n a 7→ 0 7→ a0 . . . n − 1 7→ an−1 i 7→ n lg 7→ q〉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)

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 11 / 37

Problema rezolvata de un algoritm

Cum demonstram corectitudinea?

Cum dovedim ca algoritmul PlatouAlg rezolva ıntr-adevar problemaPlatou?

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

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 12 / 37

Problema rezolvata 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

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 13 / 37

Problema rezolvata de un algoritm

Problema rezolvabila (calculabila)

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

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

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 14 / 37

Problema rezolvata 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.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 15 / 37

Problema rezolvata 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, vorexista afirmatii care nu pot fi demonstrate.

(Celebra teorema de incompletitudine alui Godel).

Cativa ani mai tarziu, Alan Turing a demonstrat acelsi lucru utilizandnotiunea de algoritm (masina Turing).

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 16 / 37

Problema rezolvata de un algoritm

Program universal

program (algoritm) universal:– intrare: un program (algoritm) A si o intrare x (echivalent, oconfiguratie 〈A, σx〉)– comportare: simuleaza activitatea lui A pentru intrarea x

Programele (algoritmii) pot fi intrari pentru alti algoritmi!

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 17 / 37

Problema rezolvata de un algoritm

Exemplu de problema nerezolvabila/nedecidabila

Problema opririi:Instance: O configuratie 〈A, σ0〉, unde A este un algoritm si σ0 codificareaunei intrari pentru A.Question: Executia care pleaca din configuratia initiala 〈A, σ0〉 este finita?

Teorema

Nu exista un algoritm care sa rezolve Problema opririi.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 18 / 37

Problema rezolvata 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;

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 19 / 37

Problema rezolvata de un algoritm

Ideea de demonstrare 2/2

Ce se ıntampla cand se apeleaza HaltsOnSelf(HaltsOnSelf)?

Executia lui HaltsOnSelf(HaltsOnSelf) nu se termina; rezulta caNewH(HaltsOnSelf) ıntoarce true, care implicaH(HaltsOnSelf,HaltsOnSelf) ıntoarce true. Contradictie.

Executia lui HaltsOnSelf(HaltsOnSelf) se termina si ıntoarce true;rezulta ca NewH(HaltsOnSelf) ıntoarce false, care implicaH(HaltsOnSelf,HaltsOnSelf) ıntoarce false. Contradictie din nou.

Rezolvarea teoremei de mai sus este strans legata de urmatorul paradoxlogic. “Exista un oras cu un barbier care barbiereste pe oricine ce nu sebarbiereste singur. Cine barbiereste pe barbier?”

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 20 / 37

Problema rezolvata 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

. . .

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 21 / 37

Problema rezolvata de un algoritm

Partial rezolvabil (calculabil, decidabil)

O problema de decizie este partial calculabila (semidecidabila) daca existaun algoritm care se opreste cu raspunsul ”DA” pentru toate intrarilepentru care raspunsul correct este ”DA”.

Este Problema opririi semidecidabila?

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 22 / 37

Complexitatea unui algoritm

Plan

1 Problema rezolvata de un algoritm

2 Complexitatea unui algoritm

3 Complexitatea ın cazul cel mai nefavorabil

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 23 / 37

Complexitatea unui algoritm

Timpul unei executii

Fie E = 〈A0, σ0〉 ⇒ · · · ⇒ 〈An, σn〉 o executie. Timpul consumat deaceasta executie este suma timpilor pasilor de executie:

timed(E ) =∑n−1

i=0 timed(〈Ai , σi 〉 ⇒ 〈Ai+1, σi+1〉)

unde d ∈ log , unif

Demo cu versiunea de Alk care calculeaza si timpii uniform si logaritmic.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 24 / 37

Complexitatea unui algoritm

Timpul necesar executiei unei instante

Algoritm determinist: ∀〈Ai , σi 〉 accesibila din configuratia initiala 〈A0, σ0〉,∃ cel mult o 〈A′, σ′〉 cu 〈Ai , σi 〉 ⇒ 〈A′, σ′〉.

Fie P o problema rezolvata de A.

∀p ∈ P exista un calcul unic Ep = 〈A, σp〉 ⇒ · · · .

Timpul necesar algoritmului A pentru a rezolva instanta p estetimed(A, p) = timed(Ep)

unde d ∈ log , unif

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 25 / 37

Complexitatea ın cazul cel mai nefavorabil

Plan

1 Problema rezolvata de un algoritm

2 Complexitatea unui algoritm

3 Complexitatea ın cazul cel mai nefavorabil

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 26 / 37

Complexitatea ın cazul cel mai nefavorabil

Dimensiunea unei instante

Dimensiunea unei stari σ:sized(σ) =

∑x7→v∈σ sized(v)

Dimensiunea unei configuratii:sized(〈A, σ〉) = sized(σ)

Fie P o problema rezolvata de A.

Dimensiumea lui p ∈ P:sized(p) = sized(〈A, σp〉) (= size(σp))

unde d ∈ log , unif .

St. Ciobaca, 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 sid ∈ log , unif .

Grupam instantele p ale problemei P ın clase de echivalenta: p si p′ suntın aceeasi clasa daca sized(p) = sized(p′).

Un numar ıntreg pozitiv n poate fi privit ca fiind clasa de ecivalenta ainstantelor de marime n.

Complexitatea timp ın cazul cel mai nefavorabil:TA,d(n) = maxtimed(A, p) | p ∈ P, sized(p) = n

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 28 / 37

Complexitatea ın cazul cel mai nefavorabil

Complexitatea spatiu

Fie E = 〈A0, σ0〉 ⇒ · · · ⇒ 〈An, σn〉 o executie si d ∈ log , unif .

Spatiul consumat de aceasta executie este dat de maximul dintredimensiunile configuratiilor din E :

spaced(E ) = maxni=0 sized(〈Ai , σi 〉)

Spatiul necesar algoritmului A pentru a rezolva instanta p estespaced(A, p) = spaced(Ep)

Complexitatea spatiu ın cazul cel mai nefavorabil este calculata ıntr-unmod similar complexitatii timp pentru cazul cel mai nefavorabil:

SA,d(n) = maxspaced(A, p) | sized(p) = n

St. Ciobaca, 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) = timed([[E ]](σp)) pentru p ∈ P cu sized(p) = n

A este o atribuire X = E ;TA,d(n) = TE ,d(n)

A este if (E) S1 else S2:TA,d(n) = maxTS1,d(n),TS2,d(n)+ TE ,d(n)

A o compunere secventiala S1 S2:TA,d(n) = TS1,d(n) + TS2,d(n)

St. Ciobaca, 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 sepoate calcula doar o aproximare

solutia 1 (o aproximare mai fidela):

se calculeaza numarul maxim de iteratii nMax

se calculeaza complexitatea ın cazul cel nefavorabil pentru fiecareiteratie, fie acestea T1, . . . ,TnMax

se ia TA,d(n) = T1 + . . . + TnMax

solutia 2 (approximare mai grosiera):

se calculeaza numarul maxim de iteratii nMax

se calculeaza complexitatea ın cazul cel nefavorabil pentru iteratia cutimpul (ın cazul cel nefavorabil) cel mai mare, fie acesta TitMax

se ia TA,d(n) = nMax × TitMax

St. Ciobaca, 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) // l is a linear list

s = s + l.at(i);

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 dimensiuneainstantei nse utilizeaza complexitatea ın cazul cel nefavorabil a algoritmuluiapelat, calculata cu dimensiunea argumentelor estimata

St. Ciobaca, 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 mainefavorabil

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)|

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 33 / 37

Complexitatea ın cazul cel mai nefavorabil

Exemplul 1

input: n, (a0, . . . , an−1), z numere ıntregi.

output: poz =

mini | ai = z daca i | ai = z 6= ∅,−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.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 34 / 37

Complexitatea ın cazul cel mai nefavorabil

Exemplul 2

input: n, (a0, . . . , an−1) numere ıntregi.output: max = maxai | 0 ≤ i ≤ n − 1.

max = a[0];

for (i = 1; i < n; i++)

if (a[i] > max)

max = a[i];

Discutia pe tabla.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 35 / 37

Complexitatea ın cazul cel mai nefavorabil

Exemplul 3

input: n, (a0, . . . , an−1) numere ıntregi.output: (ai0 , . . . , ain−1 ) unde (i0, . . . , in−1) 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.

St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 36 / 37

Complexitatea ın cazul cel mai nefavorabil

Exemplul 4

input: n, (a0, . . . , an−1), z numere ıntregi;secventa (a0, . . . , an−1) este sortata crescator,

output: poz =

k ∈ i | ai = z daca i | ai = z 6= ∅,−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.St. Ciobaca, D. Lucanu (FII - UAIC) Complexitatea algoritmilor PA 2015/2016 37 / 37