Sunteți pe pagina 1din 44

Algoritmi si Structuri de Date

October 3, 2012

AlgStrDat

October 3, 2012

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

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
I
I

timp (viteza)
spatiu

AlgStrDat

October 3, 2012

4 / 16

Algoritmi
Corectitudine
se opreste
relatia input/output dorita

Performanta
Masura a costurilor
I
I

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
I
I

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 (a10 , a20 , , an0 ) a.i. a10 a20 an0

AlgStrDat

October 3, 2012

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

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 cauta locul valorii x n destinatie
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)
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

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