Documente Academic
Documente Profesional
Documente Cultură
AlgStrDat 1 / 16
Bibliografie
AlgStrDat 2 / 16
Algoritmi
AlgStrDat 3 / 16
Algoritmi
Structuri de Date
AlgStrDat 3 / 16
Algoritmi
Structuri de Date
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
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
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
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
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
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
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 )
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 )
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 )
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 )
AlgStrDat 11 / 16
Notatia asimptotica
Formal
f : N R+
AlgStrDat 11 / 16
Notatia asimptotica
Formal
f : N R+ (f asimptotic pozitiva)
AlgStrDat 11 / 16
Notatia asimptotica
Formal
f : N R+ (f asimptotic pozitiva)
AlgStrDat 11 / 16
Notatia asimptotica
Formal
f : N R+ (f asimptotic pozitiva)
(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
Formal
f : N R+ (f asimptotic pozitiva)
(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
AlgStrDat 15 / 16
MergeSort - performanta
AlgStrDat 15 / 16
MergeSort - performanta
AlgStrDat 15 / 16
MergeSort - performanta
MergeSort - T (n)
T (n) = (nlogn)
AlgStrDat 15 / 16
MergeSort mai bun decat InsertionSort
AlgStrDat 16 / 16
MergeSort mai bun decat InsertionSort
n mare ?
AlgStrDat 16 / 16
MergeSort mai bun decat InsertionSort
n mare ?
pentru o aplicatie concreta, ce domeniu de valori are n?
AlgStrDat 16 / 16