Upload
ngoanh
View
223
Download
2
Embed Size (px)
Citation preview
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://www.infoiasi.ro/~dlucanu/
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 recumoaş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
bonuscare, î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 sesiunile de restanţe şi extraordinare 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 binara
arbore binar de cautare
arbori echilibrati
• arbori AVL
Calcul asimptotic
clasele de functii
O(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)|} conventii
g(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))
expresii
O(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 0
i 0
while (i < m) do
i i+1
s 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
… ... … … …
Calculul unui algoritm (II)
configuratie = linie in tabel
instructiunea ce urmeaza a fi executata
starea memoriei = valorile curente ale variabilelor
relatia de tranzitie
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,
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 0
i 0
while (i < m) do
i i+1
s 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 + 2 ilog 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 sir
numarul de instante: ?
dimensiunea unei probleme
fiecarei instante p ii atasam o marime g(p)
definitia exacta: g(p) = lungimea reprezentarii lui p
in 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 i
timpul 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 secventialaA1
A2
TA1(n) + TA2(n)
if-then-elseif E
then A1
else A2
max(TA1(n) + TA2(n)) + TE(n)
while
while E do
A1
m *( TA1(n) + TE(n)), m = nr. max. de iteratii
Exemplu: cautarea intr-un tablou
i 0
while (x ≠ a[i] and i < n-1) do
i i+1
if (x = a[i])
then poz i
else poz -1
g(p) = n
operatii elementare: atribuire, adunare, comparatie
TA(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
atunci
TmedA(n) = i xiqi
Timpul de executie mediu
exemplu: cautarea intr-un tablou
valori 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-1
m [(p+q)/2]
while (s[m] != a && p < q) do
if (a < s[m])
then q m-1
else p m+1
m [(p+q)/2]
if (s[m] = a)
then return m
else 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 cautare
arbore 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.
operatii
cautare
inserare
stergere
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 echilibrati
C clasa de arbori echilibrati ( n t C) 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(v stg) h(v drp) 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