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
Top Related