Documente Academic
Documente Profesional
Documente Cultură
- pregatire admitere -
Problema sortarii
2
Problema sortarii
Fie un sir de entitati: e.g. numere, caractere, nregistrari ale unei baze de date,
etc. Fiecare entitate detine o caracteristica numita cheie de sortare.
http://www.whydomath.org/Reading_Room_Material/ian_stewart/shuffle/shuffle.html
3
Problema sortarii - Exemple
Elemente numerice: [1, 5, 2, 3, 6, 10, 22, 4, 44]. n acest caz cheia de sortare este
reprezentata de nsusi elementul sirului.
4
Problema sortarii
Fie sirul:
x[1], x[2], x[n].
5
Proprietati ale metodelor de sortare
1. Eficienta. Orice metoda de sortare este caracterizata de volumul de resurse
(timp de executie) necesitat pentru rezolvarea problemei.
Numar de comparatii (de chei)
Numar de deplasari (de date)
Problema sortarii
7
Sortare prin interschimbare (Bubble sort)
Idei generale:
Consideram sirul: x[1], x[2], , x[n].
8
Sortare prin interschimbare - Exemplu
9
Sortare prin interschimbare
1. repeat
1. for i = 2 n
1. if (x[i] < x[i 1]) // daca x[i] si x[i 1] nu sunt ordonate
1. x[i 1] x[i] // se interschimba x[i] cu x[i 1]
2. swap =true
endif
endfor
until not swap // repeta pna nu mai sunt necesare interschimbari
1. return x
10
Sortare prin interschimbare - Eficienta
Operatii:
Comparatii TC (n)
Algoritm Sort-Interschimbare(array x): Deplasari elemente TD (n)
1. repeat
Pentru fiecare i: 1 comparatii
1. for i = 2 n
1. if (x[i] < x[i 1])
Pentru toate valorile i:
1. x[i 1] x[i]
2. swap =true n
X
endif 1=n1
i=2
endfor
until not swap Pentru toate parcurgerile:
2. return x
n(n 1)
n 1 TC (n)
2
11
Sortare prin interschimbare - Eficienta
Operatii:
Algoritm Sort-Interschimbare(array x): Comparatii TC (n)
1. repeat Deplasari elemente TD (n)
12
Sortare prin interschimbare - Eficienta
n(n+1)
Comparatii: n 1 TC (n) 2
Complexitate totala:
n(n + 1)
n 1 T (n) = TC (n) + TD (n) + n(n 1) O(n2 )
2
13
Cuprins
Problema sortarii
14
Sortare prin insertie (Insertion sort)
Idei generale:
Consideram sirul: x[1], x[2], , x[n].
Subsirul ce contine elementele deja sortate creste la fiecare iteratie, astfel nct,
dupa ce parcurgem toate elementele, secventa este sortata n ntregime
15
Sortare prin insertie - Exemplu
http://freefeast.info/general-it-articles/insertion-sort-pseudo-code-of-insertion-sort-insertion-sort-in-data-structure/
16
Sortare prin insertie
1. for i = 2 n
1. aux x[i] // fixarea elementului i
2. j i 1
3. while (j >= 1) and (aux < x[j]) // cautarea pozitiei
1. x[j + 1] x[j] // deplasare element x[j] pe pozitia j + 1
2. j j 1
endwhile
4. x[j + 1] aux // deplasare element x[i] pe pozitia cautata
endfor
2. return x
17
Sortare prin insertie - Eficienta
Sort-Insertie(array x)
Operatii:
1. for i = 2 n Comparatii TC (n)
1. aux x[i] Deplasari elemente TD (n)
2. j i 1
Pentru fiecare i:
3. while (j >= 1) and (aux<x[j])
1. x[j + 1] x[j]
1 Ti (n) i
2. j j 1
endwhile
Pentru toate valorile i:
4. x[j + 1] aux
endfor n(n + 1)
n 1 TC (n) 1
2
2. return x
18
Sortare prin insertie - Eficienta
Sort-Insertie(array x)
Operatii:
1. for i = 2 n Comparatii TC (n)
1. aux x[i] Deplasari elemente TD (n)
2. j i 1
Pentru fiecare i:
3. while (j >= 1) and (aux<x[j])
1. x[j + 1] x[j]
0 + 2 Ti (n) (i 1) + 2 = i + 1
2. j j 1
endwhile
Pentru toate valorile i:
4. x[j + 1] aux
endfor (n + 1)(n + 2)
2(n 1) TD (n) 3
2
2. return x
19
Sortare prin insertie - Eficienta
n(n+1)
Comparatii: n 1 TC (n) 2
1
(n+1)(n+2)
Deplasari elemente: 2(n 1) TD (n) 2
3
Complexitate totala:
20
Sortare prin insertie binara
Idei generale:
Consideram sirul: x[1], x[2], , x[n].
21
Sortare prin insertie binara
http://flylib.com/books/en/2.300.1.75/1/
22
Sortare prin insertie binara
1. mid = p + ((q-p) / 2)
2. if ( key> x[mid] )
1. return Cautare-binara(x, mid+1, q, key)
else
1. return Cautare-binara(x, p, mid, key)
endif
3. return mid
Sortarea prin insertie binara reduce numarul de comparatii de la O(n2 ) la O(n log(n))
23
Cuprins
Problema sortarii
24
Sortare prin selectie (Selection sort)
Idei generale:
Consideram sirul: x[1], x[2], , x[n].
25
Sortare prin selectie - Exemplu
http://freefeast.info/general-it-articles/selection-sort-pseudo-code-of-selection-sort-selection-sort-in-data-structure/ 26
Sortare prin selectie
1. for i = 1 n 1
1. k i
2. for j = i + 1 n // cautare minim n subsirul x[i : n]
1. if x[k] > x[j]
1. k j
endfor
3. if k =
6 i // daca elementul curent nu este minim-ul subsirului x[i : n]
1. x[k] x[i] // interschimbare minim cu elementul curent
endfor
2. return x
27
Sortare prin selectie - Eficienta
Sort-Selectie(array x):
Operatii:
1. for i = 1 n 1 Comparatii TC (n)
1. k i Deplasari elemente TD (n)
2. for j = i + 1 n
Pentru fiecare i:
1. if x[k] > x[j]
1. k j
Ti (n) = n i
endfor
3. if k =
6 i
Pentru toate valorile i:
1. x[k] x[i]
endfor n(n 1)
TC (n) =
2. return x 2
28
Sortare prin selectie - Eficienta
Operatii:
Sort-Selectie(array x): Comparatii TC (n)
1. for i = 1 n 1 Deplasari elemente TD (n)
1. k i
Pentru fiecare i:
2. for j = i + 1 n
1. if x[k] > x[j]
0 Ti (n) 3
1. k j
endfor
fiecare interschimbare nece-
3. if k =
6 i sita 3 deplasari
1. x[k] x[i]
endfor Pentru toate valorile i:
2. return x
0 TD (n) 3(n 1)
29
Algoritmul de sortare prin selectie - Eficienta
n(n1)
Comparatii: TC (n) = 2
Complexitate totala:
n(n 1) n(n 1)
T (n) = TC (n) + TD (n) + 3(n 1) O(n2 )
2 2
30
Cuprins
Problema sortarii
31
Interclasare
Procedura de interclasare
1. Se compara elementele minime din fiecare sir
2. Se returneaza cel mai mic
3. Se repeta pasii precedenti pana la epuizarea elementelor
http://flylib.com/books/en/2.300.1.86/1/
32
Interclasare
Algoritm Interclasare(array x, array y)
1. i 1, j 1, k 1
2. while j m and i n Complexitate O(m + n)
2. if xi yj
1. zk xi
2. k k + 1 Operatie mult mai simpla
3. i i + 1 dect sortarea
else
1. zk yj
Reducem procesul de sortare
2. k k + 1
la operatii de interclasare: se in-
3. j j + 1
terclaseaza subsiruri din ce in ce
3. if i > n mai lungi, pna se obtine sirul
1. (zk , , zm+n ) (xi , , xn ) sortat.
else
1. (zk , , zm+n ) (yj , , ym )
4. return z
33
Sortare prin interclasare (Merge sort)
Structura generala:
Consideram sirul: x[1], x[2], , x[n].
34
http://interactivepython.org/courselib/static/pythonds/SortSearch/TheMergeSort.html
Sortare prin interclasare - Exemplu
https://en.wikipedia.org/wiki/Merge_sort#/media/File:Merge_sort_algorithm_diagram.svg 35
Algoritmul de sortare prin interclasare
36
Sortare prin interclasare - Eficienta
Algoritm Interclasare(array x, array y)
Operatiile dominante ale algorit-
1. i 1, j 1, k 1 mului Sort-Interclasare au loc in
2. while j m and i n procedura de interclasare
2. if xi yj
1. zk xi Se poate estima iterativ complexi-
2. k k + 1 tatea T (n):
3. i i + 1 Problema este descompusa
else
iterativ in doua subprobleme
1. zk yj
cu dimensiune redusa la
2. k k + 1
jumatate
3. j j + 1
O subproblema de
4. if i > n
dimensiune 1 costa O(1)
1. (zk , , zm+n ) (xi , , xn ) operatii
else Procedura de interclasare
1. (zk , , zm+n ) (yj , , ym ) costa O(n)
37
Sortare prin interclasare - Eficienta
Cu toate ca are o complexitate mai buna, n cazul sirurilor de dimensiune mici, metoda
sortarii prin insertie prezinta performante mai bune dect sortarea prin interclasare
38
Cuprins
Problema sortarii
39
Algoritmul de sortare rapida (Quicksort)
Algoritm de sortare eficient dezvoltat de Tony Hoare n 1959 si publicat n 1961
Implementarile bune pot depasi de 2-3 ori performantele sortarii prin interclasare
Idei generale:
Consideram sirul: x[1], x[2], , x[n].
40
Algoritmul de sortare rapida (Quicksort)
41
Algoritmul de sortare rapida (Quicksort)
Algoritm Quicksort (array x, int l, int h)
1. if (l < h)
1. LocPivot = Partitionare(x, l, h)
2. Quicksort(x, l, LocPivot) // recursie pe segmentul elementelor mai mici
3. Quicksort(x, LocPivot +1, h) // recursie segment elemente mai mari
42
Algoritmul de sortare rapida (Quicksort)
Algoritm Quicksort (array x, int l, int h)
Operatiile dominante ale algo-
1. if (l < h) ritmului Quicksort au loc n pro-
1. LocPivot = Partitionare(x, l, h) cedura de partitionare
2. Quicksort(x, l, LocPivot)
3. Quicksort(x, LocPivot +1, h) Estimare complexitate T (n):
Problema este
Algoritm Partitionare (array x, int l, int h) descompusa iterativ in
1. pivot = x[l] doua subprobleme cu
dimensiune redusa la
2. leftwall = l
jumatate
3. for i = l + 1 h
O subproblema de
(a) if (x[i] < pivot)
dimensiune 1 costa
1. x[i] x[leftwall]
O(1) operatii
2. leftwall = leftwall +1
Procedura de par-
4. pivot x[leftwall]
titionare costa, n cel mai
5. return leftwall rau caz, O(n) comparatii
43
Sortare prin interclasare - Eficienta
Complexitate n cel mai rau scenariu: O(n2 )
Avantaje:
Necesita memorie O(log(n)); mult mai redusa dect sortarea prin interclasare
Reprezinta cea mai buna alegere cnd viteza este foarte importanta, indiferent de
dimensiunea setului de date.
Dezavantaje:
Poate duce la umplerea stivei cnd se utilizeaza seturi largi de date.
Performante modeste atunci cnd opereaza asupra unor liste aproape ordonate.
44
Concluzii
45