Sunteți pe pagina 1din 44

Algoritmi si Structuri de Date

October 3, 2012

AlgStrDat

October 3, 2012

1 / 16

Bibliograe

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

October 3, 2012

2 / 16

Algoritmi

AlgStrDat

October 3, 2012

3 / 16

Algoritmi

Structuri de Date

AlgStrDat

October 3, 2012

3 / 16

Algoritmi

Structuri de Date Algorithms + Data Structures = Programs


Niklaus Wirth, 1976

AlgStrDat

October 3, 2012

3 / 16

Algoritmi
Corectitudine
se opreste relatia input/output dorita

AlgStrDat

October 3, 2012

4 / 16

Algoritmi
Corectitudine
se opreste relatia input/output dorita

Performanta
Masura a costurilor
timp (viteza) spatiu

AlgStrDat

October 3, 2012

4 / 16

Algoritmi
Corectitudine
se opreste relatia input/output dorita

Performanta
Masura a costurilor
timp (viteza) spatiu

Mai bine?
Se poate mai bine?

AlgStrDat

October 3, 2012

4 / 16

Algoritmi
Corectitudine
se opreste relatia input/output dorita

Performanta
Masura a costurilor
timp (viteza) spatiu

Mai bine?
Se poate mai bine?

AlgStrDat

October 3, 2012

4 / 16

2 Mari Probleme

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

AlgStrDat

October 3, 2012

5 / 16

2 Mari Probleme

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

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

AlgStrDat

October 3, 2012

5 / 16

Sortarea

AlgStrDat

October 3, 2012

6 / 16

Sortarea prin insertie

AlgStrDat

October 3, 2012

7 / 16

Sortarea prin insertie


Sortarea prin insertie (directa)
proc InsDir (A) /sortare prin insertie directa a vectorului A[1..n] for i = 2 to n do x := A[i ] /se caut a locul valorii x n destinat ie j := i 1 while (j > 0) and (x < A[j ]) do A[j + 1] := A[j ] j := j 1 endwhile /inserarea lui x la locul lui A[j + 1] := x endfor endproc
AlgStrDat October 3, 2012 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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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 October 3, 2012 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

October 3, 2012

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

October 3, 2012

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 October 3, 2012 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 October 3, 2012 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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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 October 3, 2012 10 / 16

Notatia asimptotica
comportarea lui T (n) cind n

AlgStrDat

October 3, 2012

11 / 16

Notatia asimptotica
comportarea lui T (n) cind n

Formal
f : N R+

AlgStrDat

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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) Reexivitate 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 October 3, 2012 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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

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

October 3, 2012

15 / 16

MergeSort mai bun decat InsertionSort

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

AlgStrDat

October 3, 2012

16 / 16

MergeSort mai bun decat InsertionSort

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

AlgStrDat

October 3, 2012

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

October 3, 2012

16 / 16

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