Sunteți pe pagina 1din 44

Algoritmi si Structuri de Date

AlgStrDat 1 / 16
Bibliografie

1. D.E. Knuth :Tratat de programarea calculatoarelor, vol. I si III


2. T. H. Cormen, C. E. Leiserson, R. L. Rivest: Introduction to
Algorithms, The MIT Press, 1990
Cormen, Leiserson, Rivest, Stein - CLRS2
3. N. Wirth: Algorithms + Data Structures = Programs, Prentice Hall
Inc., 1976
4. A. V. Aho, J. E. Hopcroft, J. D. Ullman: Data Structures and
Algorithms, Addison-Wesley Publ. Comp., 1983
5. Sedgewick
6. Dasgupta, Papadimitriou, Vazirani

AlgStrDat 2 / 16
Algoritmi

AlgStrDat 3 / 16
Algoritmi

Structuri de Date

AlgStrDat 3 / 16
Algoritmi

Structuri de Date

Algorithms + Data Structures = Programs


Niklaus Wirth, 1976

AlgStrDat 3 / 16
Algoritmi

Corectitudine
se opreste
relatia input/output dorita

AlgStrDat 4 / 16
Algoritmi

Corectitudine
se opreste
relatia input/output dorita

Performanta
Masura a costurilor
I timp (viteza)
I spatiu

AlgStrDat 4 / 16
Algoritmi

Corectitudine
se opreste
relatia input/output dorita

Performanta
Masura a costurilor
I timp (viteza)
I spatiu

Mai bine?
Se poate mai bine?

AlgStrDat 4 / 16
Algoritmi

Corectitudine
se opreste
relatia input/output dorita

Performanta
Masura a costurilor
I timp (viteza)
I spatiu

Mai bine?
Se poate mai bine?

AlgStrDat 4 / 16
2 Mari Probleme

Sortarea
Input Un vector (a1 , a2 , , an )
Output (a10 , a20 , , an0 ) a.i. a10 a20 an0

AlgStrDat 5 / 16
2 Mari Probleme

Sortarea
Input Un vector (a1 , a2 , , an )
Output (a10 , a20 , , an0 ) a.i. a10 a20 an0

Cautarea
Input O multime {a1 , a2 , , an } si o valoare x
Output Este x {a1 , a2 , , an } ? Yes sau No

AlgStrDat 5 / 16
Sortarea

AlgStrDat 6 / 16
Sortarea prin insertie

AlgStrDat 7 / 16
Sortarea prin insertie
Sortarea prin insertie (directa)
void InsDir (int A[], int n)
{ //sortare prin insertie directa a vectorului A[1..n]
for (i = 2; i <= n; i + +)
{
x = A[i];
//se cauta locul valorii x n destinatie
j = i 1;
while ( (j > 0) && (x < A[j]) )
{
A[j + 1] = A[j];
j ;
}
//inserarea lui x la locul lui
A[j + 1] = x;
}
}
AlgStrDat 7 / 16
Sortarea prin insertie
Comparatii
Cmin = 1 + 1 + + 1 = n 1
Cmax = 2 + 3 + + n = n (n + 1)/2 1 = (1/2)n2 + (1/2)n 1
Cmediu = (1/2)(2 + 3 + + n) = (1/2)Cmax = (1/4)n2 + (1/4)n 1/2

AlgStrDat 8 / 16
Sortarea prin insertie
Comparatii
Cmin = 1 + 1 + + 1 = n 1
Cmax = 2 + 3 + + n = n (n + 1)/2 1 = (1/2)n2 + (1/2)n 1
Cmediu = (1/2)(2 + 3 + + n) = (1/2)Cmax = (1/4)n2 + (1/4)n 1/2

Ce inseamna cazul mediu?

AlgStrDat 8 / 16
Sortarea prin insertie
Comparatii
Cmin = 1 + 1 + + 1 = n 1
Cmax = 2 + 3 + + n = n (n + 1)/2 1 = (1/2)n2 + (1/2)n 1
Cmediu = (1/2)(2 + 3 + + n) = (1/2)Cmax = (1/4)n2 + (1/4)n 1/2

Ce inseamna cazul mediu?

Mutari
Mmin = 2 + 2 + + 2 = 2(n 1)
Mmax = 3 + 4 + + (n + 1) = (n + 1) (n + 2)/2 3 =
(1/2)n2 + (3/2)n 2
Mmediu = Cmediu + 2(n 1) = (1/4)n2 + (9/4)n 5/2

AlgStrDat 8 / 16
Sortarea prin insertie
Comparatii
Cmin = 1 + 1 + + 1 = n 1
Cmax = 2 + 3 + + n = n (n + 1)/2 1 = (1/2)n2 + (1/2)n 1
Cmediu = (1/2)(2 + 3 + + n) = (1/2)Cmax = (1/4)n2 + (1/4)n 1/2

Ce inseamna cazul mediu?

Mutari
Mmin = 2 + 2 + + 2 = 2(n 1)
Mmax = 3 + 4 + + (n + 1) = (n + 1) (n + 2)/2 3 =
(1/2)n2 + (3/2)n 2
Mmediu = Cmediu + 2(n 1) = (1/4)n2 + (9/4)n 5/2

la pasul/iteratia i, avem Mi = Ci + 1.

AlgStrDat 8 / 16
Performanta
Comparatii
Cmin = n 1
Cmax = (1/2)n2 + (1/2)n 1
Cmediu = (1/4)n2 + (1/4)n 1/2

AlgStrDat 9 / 16
Performanta
Comparatii
Cmin = n 1
Cmax = (1/2)n2 + (1/2)n 1
Cmediu = (1/4)n2 + (1/4)n 1/2

Timp de rulare T (n) - masurat in comparatii


Exista un timp minim de rulare
Exista un timp maxim de rulare
Cmin = n 1 T (n) (1/2)n2 + (1/2)n 1 = Cmax

AlgStrDat 9 / 16
Performanta
Comparatii
Cmin = n 1
Cmax = (1/2)n2 + (1/2)n 1
Cmediu = (1/4)n2 + (1/4)n 1/2

Timp de rulare T (n) - masurat in comparatii


Exista un timp minim de rulare
Exista un timp maxim de rulare
Cmin = n 1 T (n) (1/2)n2 + (1/2)n 1 = Cmax

Timp de rulare T (n) - masurat in alte operatii


Comparatii + Mutari
Cmin + Mmin T (n) Cmax + Mmax
3(n 1) T (n) (1/2)n2 + (3/2)n 2

AlgStrDat 9 / 16
Performanta
Comparatii
Cmin = n 1
Cmax = (1/2)n2 + (1/2)n 1
Cmediu = (1/4)n2 + (1/4)n 1/2

Timp de rulare T (n) - masurat in comparatii


Exista un timp minim de rulare
Exista un timp maxim de rulare
Cmin = n 1 T (n) (1/2)n2 + (1/2)n 1 = Cmax

Timp de rulare T (n) - masurat in alte operatii


Comparatii + Mutari
Cmin + Mmin T (n) Cmax + Mmax
3(n 1) T (n) (1/2)n2 + (3/2)n 2
Fiecare linie de cod - in timp cst...
AlgStrDat 9 / 16
Margini superioare (si inferioare)... notatia asimptotica
Timp de rulare T (n) - margine superioara
T (n) (1/2)n2 + (3/2)n 2
T (n) = O(n2 )

AlgStrDat 10 / 16
Margini superioare (si inferioare)... notatia asimptotica
Timp de rulare T (n) - margine superioara
T (n) (1/2)n2 + (3/2)n 2
T (n) = O(n2 )

Timp de rulare T (n) - margine inferioara


3(n 1) T (n)
T (n) = (n)

AlgStrDat 10 / 16
Margini superioare (si inferioare)... notatia asimptotica
Timp de rulare T (n) - margine superioara
T (n) (1/2)n2 + (3/2)n 2
T (n) = O(n2 )

Timp de rulare T (n) - margine inferioara


3(n 1) T (n)
T (n) = (n)

abuz de notatie !!!

AlgStrDat 10 / 16
Margini superioare (si inferioare)... notatia asimptotica
Timp de rulare T (n) - margine superioara
T (n) (1/2)n2 + (3/2)n 2
T (n) = O(n2 )

Timp de rulare T (n) - margine inferioara


3(n 1) T (n)
T (n) = (n)

abuz de notatie !!!


... folositor

AlgStrDat 10 / 16
Margini superioare (si inferioare)... notatia asimptotica
Timp de rulare T (n) - margine superioara
T (n) (1/2)n2 + (3/2)n 2
T (n) = O(n2 )

Timp de rulare T (n) - margine inferioara


3(n 1) T (n)
T (n) = (n)

abuz de notatie !!!


... folositor

Timp de rulare T (n) in cazul c. m. nefavorabil


T (n) = aCmax + b (exista cst a, b > 0)
T (n) = (n2 )
AlgStrDat 10 / 16
Notatia asimptotica

comportarea lui T (n) cind n

AlgStrDat 11 / 16
Notatia asimptotica

comportarea lui T (n) cind n

Formal
f : N R+

AlgStrDat 11 / 16
Notatia asimptotica

comportarea lui T (n) cind n

Formal
f : N R+ (f asimptotic pozitiva)

O(g ) := {f | c > 0, n0 a.i. 0 f (n) cg (n) for all n n0 }

AlgStrDat 11 / 16
Notatia asimptotica

comportarea lui T (n) cind n

Formal
f : N R+ (f asimptotic pozitiva)

O(g ) := {f | c > 0, n0 a.i. 0 f (n) cg (n) for all n n0 }

(g ) := {f | c > 0, n0 a.i. 0 cg (n) f (n) for all n n0 }

AlgStrDat 11 / 16
Notatia asimptotica

comportarea lui T (n) cind n

Formal
f : N R+ (f asimptotic pozitiva)

O(g ) := {f | c > 0, n0 a.i. 0 f (n) cg (n) for all n n0 }

(g ) := {f | c > 0, n0 a.i. 0 cg (n) f (n) for all n n0 }

(g ) :=
{f | c1 , c2 > 0, n0 a.i. 0 c1 g (n) f (n) c2 g (n) for all n n0 }

AlgStrDat 11 / 16
Notatia asimptotica

comportarea lui T (n) cind n

Formal
f : N R+ (f asimptotic pozitiva)

O(g ) := {f | c > 0, n0 a.i. 0 f (n) cg (n) for all n n0 }

(g ) := {f | c > 0, n0 a.i. 0 cg (n) f (n) for all n n0 }

(g ) :=
{f | c1 , c2 > 0, n0 a.i. 0 c1 g (n) f (n) c2 g (n) for all n n0 }

AlgStrDat 12 / 16
Properties:
(g ) = O(g ) (g )

Tranzitivitate
f = (g ), g = (h) = f = (h)
f = O(g ), g = O(h) = f = O(h)
f = (g ), g = (h) = f = (h)

Reflexivitate
f = (f )
f = O(f )
f = (f )

Simetrie
f = (g ) daca si numai daca g = (f )

Simetrie transpusa
f = O(g ) daca si numai daca g = (f )
AlgStrDat 13 / 16
MergeSort

MergeSort
MergeSort(A, 1, n)
if n = 1 sortat
MergeSort(A, 1, n/2)
MergeSort(A, n/2, n)
Merge cei 2 subvectori ordonati

AlgStrDat 14 / 16
MergeSort

MergeSort
MergeSort(A, 1, n)
if n = 1 sortat
MergeSort(A, 1, n/2)
MergeSort(A, n/2, n)
Merge cei 2 subvectori ordonati

Merge = interclasare
input: 2 vectori ordonati crescator a[1..n] si b[1..n]
output: vector c[1..2n] = a b ordonat crescator

AlgStrDat 14 / 16
MergeSort

MergeSort
MergeSort(A, 1, n)
if n = 1 sortat
MergeSort(A, 1, n/2)
MergeSort(A, n/2, n)
Merge cei 2 subvectori ordonati

Merge = interclasare
input: 2 vectori ordonati crescator a[1..n] si b[1..n]
output: vector c[1..2n] = a b ordonat crescator
(n)

AlgStrDat 14 / 16
MergeSort - performanta

MergeSort - ecuatia de recurenta pentru T (n)


T (n) = (1), daca n = 1
T (n) = 2T (n/2) + (n), daca n > 1

AlgStrDat 15 / 16
MergeSort - performanta

MergeSort - ecuatia de recurenta pentru T (n)


T (n) = (1), daca n = 1
T (n) = 2T (n/2) + (n), daca n > 1

de rezolvat ecuatia ...

AlgStrDat 15 / 16
MergeSort - performanta

MergeSort - ecuatia de recurenta pentru T (n)


T (n) = (1), daca n = 1
T (n) = 2T (n/2) + (n), daca n > 1

de rezolvat ecuatia ...


arborele apelurilor recursive

AlgStrDat 15 / 16
MergeSort - performanta

MergeSort - ecuatia de recurenta pentru T (n)


T (n) = (1), daca n = 1
T (n) = 2T (n/2) + (n), daca n > 1

de rezolvat ecuatia ...


arborele apelurilor recursive

MergeSort - T (n)
T (n) = (nlogn)

AlgStrDat 15 / 16
MergeSort mai bun decat InsertionSort

MergeSort T (n) = (nlogn)


InsertionSort T (n) = (n2 )
(nlogn) creste mai incet decat (n2 )

AlgStrDat 16 / 16
MergeSort mai bun decat InsertionSort

MergeSort T (n) = (nlogn)


InsertionSort T (n) = (n2 )
(nlogn) creste mai incet decat (n2 )

n mare ?

AlgStrDat 16 / 16
MergeSort mai bun decat InsertionSort

MergeSort T (n) = (nlogn)


InsertionSort T (n) = (n2 )
(nlogn) creste mai incet decat (n2 )

n mare ?
pentru o aplicatie concreta, ce domeniu de valori are n?

AlgStrDat 16 / 16

S-ar putea să vă placă și