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: http://portal.info.uaic.ro/curs/tpaa/default.aspx
Evaluare
condiţii
activitate seminar, temele din timpul semestrului, testul scris criterii
minim 50% prezenţă la seminar
media la teme: minim 5
nota la test: minim 4 teme: vor fi 2 teme (aprox. sapt 5,10) a căror rezolvare va fi
prezentată sub formă de referat invidual testul scris: se va da pe in ultima saptamana şi va include
întrebări din toată materia Pentru stdenţii care refac disciplina, se poate recunoaşte oricare
dintre cele două componente, dacă punctajul este >= minimul pentru promovare
Evaluare
bonusuri: orice soluţie originală sau investigarea de subiecte strâns legate de tematica cursului poate aduce un bonus care, în condiţii de realizări semnificative, poate echivala una sau chiar ambele teme
formula notei finale
10% activitate seminar + 40% teme + 50% test scris + bonusuri
Temele pentru verificarea pe parcurs vor fi afişate pe pagină şi anunţate prin email.
În sesiunea de restanţe se va da doar testul scris. Punctajul de la teme va fi cel obţinut în timpul semestrului.
Refacerea temelor e posibila numai in anul urmator impreuna cu refacerea disciplinei
Curs 1
clasele O(f(n)), (f(n)), (f(n)) masuri de complexitate timp si spatiu complexitatea in cazul cel mai nefavorabil complexitatea medie complexitatea problemelor
problema sortarii cautare
cautare binaraarbore binar de cautare arbori echilibrati
• arbori AVL
Calcul asimptotic
clasele de functiiO(f(n)) = {g(n) | (c > 0, n0)(n n0) |g(n)| c|f(n)|}Ω(f(n)) = {g(n) | (c > 0, n0)(n n0) |g(n)| c|f(n)|}Θ(f(n)) = {g(n) | (c1,c2 > 0, n0)(n n0) c1|f(n)| |g(n)| c2|f(n)|}
conventiig(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))
expresiiO(f1(n)) + O(f2(n)) = {g1(n) + g2(n)| g1(n) O(f1(n)),
g2(n) O(f2(n))} exemplu
O(n log n) + O(n2) = O(n2)
Calculul unui algoritm (I)
s 0i 0while (i < m) do
i i+1s s + i
pas instructiunea s i m
1 s 0 - - 7
2 i 0 0 - 7
3 i < m 0 0 7
4 i i+1 0 0 7
5 s s + i 0 1 7
6 i < m 1 1 7
7 i i+1 1 1 7
8 s s + i 1 2 7
9 i < m 3 2 7
… ... … … …
starea memoriei
pas de calcul
Calculul unui algoritm (II)
configuratie = linie in tabelinstructiunea ce urmeaza a fi executatastarea memoriei = valorile curente ale variabilelor
relatia de tranzitie (trecerea de la o linie la alta in tabel)
c | c' executarea instructiunii din c peste starea memoriei din c produce c'
calcul finit: c0 | c1 | ... | cn
c0 configuratie initiala
cn configuratie finala
calcul infinit: c0 | c1 | ... | cn | ...
Complexitatile timp si spatiu ale programelor
Fie
P o problema, p P instanta (intrare),
A un algoritm pentru P,
c0 | c1 | ... | cn calculul generat de instanta p
timpul unui calcul t(ci) timpul necesar pentru ci | ci+1
TA(p) = ∑i=0,n-1t(ci)
spatiul unui calcul
s(ci) spatiul din ci
SA(p) = maxi=0,n s(ci)
Complexitatea timp si spatiu
s 0i 0while (i < m) do
i i+1s s + i
• nr. de biti pentru reprez. lui m este n = [log m] + 1
• luam m = 2n-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 TA(p) = 2 + 2ilog i + ilog i*(i+1)/2 =
2 + 2log m! + log (m!)2/(2m) = 2 + 4log m! – log 2m = 2 + 4 Θ(m log m ) – m = Θ(m log m) = Θ(n 2n)
• timp de calcul exponential!?• spatiul SA (p) = n + n + 2n
Dimensiunea unei probleme
inconvenientul de a lucra cu instante:P: determinarea maximului dintr-un sirnumarul de instante: ?
dimensiunea unei problemefiecarei instante p ii atasam o marime g(p)definitia exacta: g(p) = lungimea reprezentarii lui pin practica g(p) reprezinta
• numarul elementelor dintr-un vector/multime
• numarul de varfuri ale unui (di)graf
• numarul de muchii/arce ale unui graf/digraf
• etc
Timpul de executie si spatiul in cazul cel mai nefavorabil
TA(n) = sup{TA(p) | p P, g(p) = n}
SA(n) = sup{SA(p) | p P, g(p) = n}
in general t(ci) este greu de precizat si depinde de marimile valorilor variabilelor din instructiunea itimpul de executie = o forma simplificata pentru t(ci)
• operatii elementare (adunare, inmultire etc)
• fiecare operatie elementara se executa intr-o unitate de timp
• t(ci) = numarul operatiilor elementare din instructiunea din ci
ce analizam = ce operatii elementare consideram
Calculul timpului de executie in cazul cel mai nefavorabil
atribuire x E
TE(n) (de multe ori o constanta) compunerea secventiala
A1 A2
TA1(n) + TA2(n) if-then-else
if Ethen A1else A2
max(TA1(n) , TA2(n)) + TE(n) while
while E doA1
m *( TA1(n) + TE(n)), m = nr. max. de iteratii
Exemplu: cautarea intr-un tablou
i 0while (x ≠ a[i] and i < n-1) do
i i+1if (x = a[i]) then poz ielse poz -1
g(p) = noperatii elementare: atribuire, adunare, comparatieTA(n) = 1 + (n-1)*6
SA(n) = n + 2
Timpul de executie mediu
functia de de masurare a timpului ca variabila aleatoare experienta = executia programului rezultatul experientei = timpul (spatiul) executiei
TA(p)
timpul de executie mediu = media variabilei aleatoare
TmedA(n) = M({TA(p) | p P, g(p) = n})
daca valorile pentru TA(p) sunt x0, x1, x2, …
probabilitatea cu care se obtine xi este qi
atunciTmed
A(n) = i xiqi
Timpul de executie mediu
exemplu: cautarea intr-un tablouvalori posibile pentru TA(p) :
xi-1 = 1 + i*6, i = 1,2,...,n
probabilitatea cu care se obtine xi
• q = probabilitatea ca x sa apara un tablou
• qi = probabilitatea ca x sa apara pe pozitia i = q/n
• TmedA(n) = ∑i=1,n (1+i*6)*(q/n) + (1+(n-1)*6)*(1-q)
Sortarea rapida (Quicksort)in cazul cel mai nefavorabil: O(n2)medie: O(n log n)
Complexitatea problemelor
P are complexitatea timp in cazul cel mai nefavorabil O(f(n)) daca exista un algoritm A care rezolva P si TA(n) = O(f(n))
P are complexitatea timp in cazul cel mai nefavorabil Ω(f(n)) daca orice algoritm A care rezolva P are TA(n) = Ω(f(n))
P are complexitatea timp in cazul cel mai nefavorabil Θ(f(n)) daca are atat complexitatea O(f(n)) cat si complexitatea Ω(f(n))
A este algoritm optim pentru P daca P are complexitatea Θ(TA(n)).
Complexitatea problemelor
Algoritmi de sortare bazati pe comparatii
sortare prin insertie: O(n2)
sortare rapida: O(n2)
sortarea sistematica (heapsort): O(n log n)
sortarea prin interclasare: O(n log n)
Problema sortarii are complexitatea in cazul cel mai
nefavorabil O(n log n)
Exista algoritmi de sortare mai performanti?
Dorel Lucanu Proiectarea algoritmilor 19
Modelul arborilor de decizie pentru sortare
operatia de baza: a[i] ? a[j] (pp. a[i] a[j]) constructia arborelui de decizie (recursiv)
nodul curent = comparatia curenta i?j (repr. a[i] ? a[j]) subarborele sting include comparatiile ce se efectueaza
daca a[i] < a[j] subarborele drept include comparatiile ce se efectueaza
daca a[i] > a[j] nodurile pe frontiera sunt etichetate cu permutari calcul: drum de la radacina la frontiera care respecta
constructia arbore de decizie pentru sortare = arbore decizie care
rezolva problema sortarii (orice calcul se opreste intr-un nod etichetat cu o permutare care ordoneaza elementele secventei de intrare)
Dorel Lucanu Proiectarea algoritmilor 20
Arborele de decizie pentru sortare: exemplu (insertSort)
0?1
1?2
0?2
0?2
1?2
0,1,2 1,0,2
0,2,1 2,0,1 1,2,0 2,1,0
<
<
<
<
<
>
>
>
>
>
Dorel Lucanu Proiectarea algoritmilor 21
Sortare: numar minim de comparatii
numarul minim in cazul cel mai nefavorabil
S(n) = mint max h(t, )
unde h(t, ) este inaltimea in t a nodului
2S(n) n! S(n) log (n!) = (n log n)Teorema:
Problema sortarii are complexitatea Ω(n log n) in modelul arborilor de decizie pentru sortare (algoritmilor de sortare bazati pe comparatii)
Radixsort si sortarea prin numarare au complexitatea O(n). Contrazic teorema de mai sus?
NU, deoarece nu fac parte din modelul arb. de decizie
Cautare in liste liniare - complexitate
Tip de date Implementare Cautare Inserare Stergere
Lista liniara
Tablouri O(n) O(1) O(n)
Liste inlantuite O(n) O(1) O(1)
Lista liniara ordonata
Tablouri O(log n) O(n) O(n)
Liste inlantuite O(n) O(n) O(1)
Cautare binara – aspect static - algoritm
function Poz(s, n, a)begin
p 0; q n-1m [(p+q)/2]while (s[m] != a && p < q) do
if (a < s[m])then q m-1else p m+1m [(p+q)/2]
if (s[m] = a)then return melse return -1;
end
Arborele binar asociat cautarii binare
T(p,q)m
T(p,m-1) T(m+1,q)
T = T(0,n-1)
n = 6
1 3 5
4
2
0
Cautare binara statica - complexitate
Lema
Daca 2h-1 ≤ n < 2h atunci inaltimea lui T este h.
Teorema
Timpul de executie pentru cazul cel mai nefavorabil pentru cautarea binara statica este O(log n).
Cautare binara: aspect dinamic – structura de date
arbore binar de cautarearbore binar cu proprietatea ca pentru orice nod v, valorile
memorate in subarborele la stinga lui v
< valoarea din v
<
valorile memorate in subarborele la dreapta lui v
echivalent: parcurgerea inordine listeaza elementele crescator operatii
cautareinserarestergere
Degenerarea cautarii binare in cautare liniara
30 50
40
10
0
20
30 50
40
20
30 50
400
20
30
40
20
30
40
20
35
30
40
20
35
32
elimina(10) elimina(0) elimina(50)
insereaza(35) insereaza(32)
Clase de arbori O(log n)-stabile
arbori echilibratiC clasa de arbori echilibrati (ntC) t are n noduri
h(t) (log n) clase O(log n)-stabile
C clasa O(log n)-stabila daca:
• C clasa de arbori echilibrati
• operatiile de inserare si eliminare se realizeaza in timpul O(log n) si in urma realizarii acestor operatii se obtin arbori ce apartin clasei C.
Arbori AVL
un arbore binar de cautare t este un arbore AVL-echilibrat daca pentru orice virf v,
h(vstg) h(vdrp) 1 Lema
t AVL-echilibrat t echilibrat (i.e., h(t) (log n)).
Arbori AVL
Teorema
Clasa arborilor AVL-echilibrati este O(log n) stabila.algoritmul de inserare
• nodurile au memorate si factorii de echilibrare ( {1, 0, 1})
• se memoreaza drumul de la radacina la nodul adaugat intr-o stiva (O(log n))
• se parcurge drumul memorat in stiva in sens invers si se actualizeaza factorii de echilibrare; nodurile dezichilibrate se reechilibeaza cu una dintre operatiile: rotatie stinga/dreapta simpla/dubla (O(log n)).
Rotatii
x
y x
y
A
A
B B
C
C
Rotatie dreapta simpla
Rotatie dreapta dubla
x
y
z
x
y
z
A
AB
BC
C
D
D