Sunteți pe pagina 1din 32

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
condiii
prezenta, activitate seminar, 2 teste scrise (sapt 8, 15-16)
criterii
minim 50% prezen la seminar
media la seminar: minim 4
media la cele 2 teste: minim 4
media finala: minim 5
testele scrise: vor include ntrebri din materia parcursa de la
ultimul test/inceput semestru pana in saptamana care se da testul
Pentru stdenii care refac disciplina, se poate recunoate oricare
dintre cele dou componente in urmatoarele conditii:
dac punctajul este >= minimul pentru promovare
punctajul la testul scris se recunoaste numai dupa
promovarea componentei seminar
Evaluare
bonusuri: orice soluie original sau investigarea de
subiecte strns legate de tematica cursului poate aduce un
bonus care, n condiii de realizri semnificative, poate
echivala una sau chiar ambele teme
formula notei finale
10% prezenta + 30% activitate seminar + 30% test scris I
+ 30% test scris II + bonusuri
n sesiunea de restane se va da doar un singur test scris
din toata materia. Punctajul de la seminar va fi cel obinut
n timpul semestrului.
Exista exact doua examene la care se poate promova
disciplina: cele din sesiunile din iarna (semestrul in
care se tine disciplina)
Participarea la concursul MS Imagine Cup (individual)
conduce la obtinerea de note foarte bune
Introducere
clasele O(f(n)), O(f(n)), O(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, n
0
)(n > n
0
) |g(n)| s c|f(n)|}
(f(n)) = {g(n) | (-c > 0, n
0
)(n > n
0
) |g(n)| > c|f(n)|}
(f(n)) = {g(n) | (-c
1
,c
2
> 0, n
0
)(n > n
0
)
c
1
|f(n)| s |g(n)| s c
2
|f(n)|}
conventii
g(n) = O(f(n)) in loc de g(n) e O(f(n))
O(g(n)) = O(f(n)) in loc de O(g(n) _ O(f(n))
expresii
O(f
1
(n)) + O(f
2
(n)) = {g
1
(n) + g
2
(n)| g
1
(n) e O(f
1
(n)),
g
2
(n) e O(f
2
(n))}
exemplu
O(n log n) + O(n
2
) = O(n
2
)
Modelul de calcul
comp_model.pdf
demo with the K tool
the web page of K : www.kframeworg.org
K tool online: https://fmse.info.uaic.ro/tools/
examples/alg
subiect de lucrare de licenta: dezvoltarea unei aplicatii care sa
fie suport pentru cursul de algoritmi
editor pentru programe, executia programelor utilizand
semantica K a limbajului algoritmic, familiarizarea cu K si
imbogatirea limbajului algoritmic, suport pentru estimarea
timpului de executie in cazul cel mai nefavorabil
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

...

starea
memoriei
pas de
calcul
Calculul unui algoritm (II)
configuratie = linie in tabel
instructiunea ce urmeaza a fi executata
starea 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: c
0
=> c
1
=> ... => c
n
c
0
configuratie initiala
c
n
configuratie finala
calcul infinit: c
0
=> c
1
=> ... => c
n
=> ...
Complexitatile timp si spatiu ale programelor
Fie
P o problema, p e P instanta (intrare),
A un algoritm pentru P,
c
0
=> c
1
=> ... => c
n
calculul generat de instanta p
timpul unui calcul
t(c
i
) timpul necesar pentru c
i
=> c
i+1
T
A
(p) =
i=0,n-1
t(c
i
)
spatiul unui calcul
s(c
i
) spatiul din c
i
S
A
(p) = max
i=0,n
s(c
i
)
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 = 2
n-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
T
A
(p) = 2 + 2
i
log i +
i
log i*(i+1)/2 =
2 + 2log m! + log (m!)
2
/(2
m
) =
2 + 4log m! log 2
m
=
2 + 4 (m log m ) m =
(m log m) =
(n 2
n
)
timp de calcul exponential!?
spatiul
S
A
(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
T
A
(n) = sup{T
A
(p) | p e P, g(p) = n}
S
A
(n) = sup{S
A
(p) | p e P, g(p) = n}
in general t(c
i
) este greu de precizat si depinde de marimile
valorilor variabilelor din instructiunea i
timpul de executie = o forma simplificata pentru t(c
i
)
operatii elementare (adunare, inmultire etc)
fiecare operatie elementara se executa intr-o unitate
de timp
t(c
i
) = numarul operatiilor elementare din
instructiunea din c
i
ce analizam = ce operatii elementare consideram
Calculul timpului de executie in cazul cel mai nefavorabil
atribuire
x E
T
E
(n) (de multe ori o constanta)
compunerea secventiala
A1
A2
T
A1
(n) + T
A2
(n)
if-then-else
if E
then A1
else A2
max(T
A1
(n) , T
A2
(n)) + T
E
(n)
while
while E do
A1
m *( T
A1
(n) + T
E
(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
T
A
(n) = 1 + (n-1)*6
S
A
(n) = n + 2
Timpul de executie mediu
functia de de masurare a timpului ca variabila aleatoare
experienta = executia programului
rezultatul experientei = timpul (spatiul) executiei
T
A
(p)
timpul de executie mediu = media variabilei aleatoare
T
med
A
(n) = M({T
A
(p) | p e P, g(p) = n})
daca
valorile pentru T
A
(p) sunt x
0
, x
1
, x
2
,
probabilitatea cu care se obtine x
i
este q
i
atunci
T
med
A
(n) =
i
x
i
q
i
Timpul de executie mediu
exemplu: cautarea intr-un tablou
valori posibile pentru T
A
(p) :
x
i-1
= 1 + i*6, i = 1,2,...,n
probabilitatea cu care se obtine x
i
q = probabilitatea ca x sa apara un tablou
q
i
= probabilitatea ca x sa apara pe pozitia i = q/n
T
med
A
(n) =
i=1,n
(1+i*6)*(q/n) + (1+(n-1)*6)*(1-q)
Sortarea rapida (Quicksort)
in cazul cel mai nefavorabil: O(n
2
)
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 T
A
(n) =
O(f(n))
P are complexitatea timp in cazul cel mai nefavorabil
(f(n)) daca orice algoritm A care rezolva P are T
A
(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 optimpentru P daca P are complexitatea
(T
A
(n)).
Complexitatea problemelor
Algoritmi de sortare bazati pe comparatii
sortare prin insertie: O(n
2
)
sortare rapida: O(n
2
)
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 20
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 21
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 22
Sortare: numar minim de comparatii
numarul minim in cazul cel mai nefavorabil
S(n) = min
t
max
t
h(t, t)
unde h(t, t) este inaltimea in t a nodului t
2
S(n)
> n! S(n) > log (n!) = O(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 2
h-1
n < 2
h
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
echivalent: parcurgerea inordine listeaza elementele crescator
operatii
cautare
inserare
stergere
Degenerarea cautarii binare in cautare liniara
30 50
40
10
0
20
30 50
40
20
30 50
40 0
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 (nteC) t are n noduri
h(t) = O(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)(s 1
Lema
t AVL-echilibrat t echilibrat (i.e., h(t) = O(log n)).
Arbori AVL
Teorema
Clasa arborilor AVL-echilibrati este O(log n) stabila.
algoritmul de inserare
nodurile au memorate si factorii de echilibrare (e {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
A
B
B
C
C
D
D