Documente Academic
Documente Profesional
Documente Cultură
SD 2016/2017
Continut
FII, UAIC
Curs 8
SD 2016/2017
2 / 44
Problema sortarii
I
Forma 1:
I
I
Forma 2:
I
I
Structura de date
Tablou a[0..n 1]
a[0] = v0 , ..., a[n 1] = vn1
FII, UAIC
Curs 8
SD 2016/2017
3 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
4 / 44
Principiul de baza:
I
I
Algoritm:
Procedure bubbleSort(a, n)
begin
ultim n 1
while (ultim > 0) do
n1 ultim1; ultim 0
for i 0 to n1 do
if (a[i] > a[i + 1]) then
swap(a[i], a[i + 1])
ultim i
end
FII, UAIC
Curs 8
SD 2016/2017
5 / 44
3 7 2 1 4 (n1 = 3)
37214
32714
32714
32174
32174
32147
32147
FII, UAIC
3214
2314
2314
2134
2134
2134
7 (n1 = 2)
7
7
7
7
7
2 1 3 4 7 (n1 = 0)
12347
12347
Curs 8
SD 2016/2017
6 / 44
Analiza
I
FII, UAIC
Curs 8
SD 2016/2017
7 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
8 / 44
Principiul de baza:
presupunem a[0..i 1] sortat
insereaza a[i] astfel ncat a[0..i] devine sortat
Curs 8
SD 2016/2017
9 / 44
Exemplu
3721
3721
2371
1237
Analiza
I
I
FII, UAIC
Curs 8
SD 2016/2017
10 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
11 / 44
FII, UAIC
Curs 8
SD 2016/2017
12 / 44
FII, UAIC
Curs 8
SD 2016/2017
13 / 44
organizeaza tabloul ca un
max-heap: (k)1 k
n 1 = a[k] a[(k 1)/2];
introduce n max-heap
elementele de pe pozitiile
n/2 1, n/2 2, , 1, 0.
FII, UAIC
Curs 8
3
0
9
1
8
2
7
3
1
4
12
5
4
6
5
7
SD 2016/2017
2
8
14 / 44
micsoreaza n cu 1 si apoi
reface max-heapul;
FII, UAIC
Curs 8
SD 2016/2017
15 / 44
9
0
7
1
8
2
5
3
FII, UAIC
1
4
3
5
4
6
2
7
12
8
Curs 8
SD 2016/2017
16 / 44
FII, UAIC
Curs 8
SD 2016/2017
17 / 44
Procedure heapSort(a, n)
begin
// construieste maxheap-ul
for t (n 1)/2 to 0 do
insereazaAlTlea(a, n, t)
// elimina
r n1
while (r > 0) do
swap(a[0], a[r ])
insereazaAlTlea(a, r , 0)
r r 1
end
FII, UAIC
Curs 8
SD 2016/2017
18 / 44
10
10
10
23
23
17
17
23
10
17
FII, UAIC
5
5
5
5
5
23
23
17
17
10
7
7
7
7
7
Curs 8
(n = 5)
(max-heap n)
SD 2016/2017
19 / 44
23
7
17
7
10
5
7
5
5
5
17
17
10
10
7
7
5
7
7
7
FII, UAIC
5
5
5
5
5
10
10
10
10
10
10
10
7
17
17
17
17
17
17
17
7
23
23
23
23
23
23
23
23
23
Curs 8
(max-heap n)
(max-heap n-1)
(max-heap n-2)
(max-heap n-3)
(max-heap n-4)
SD 2016/2017
20 / 44
eliminarea
din heap si refacerea heap-ului
Pk1
i = (k 2)2k+1 + 4
2i2
i=0
FII, UAIC
Curs 8
SD 2016/2017
21 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
22 / 44
Paradigma divide-et-impera
I
I
divide-et-impera:
I
I
I
FII, UAIC
Curs 8
SD 2016/2017
23 / 44
Procedure DivideEtImpera(P, n, S)
begin
if (n n0 ) then
determina S prin metode elementare
else
imparte P in P1 , ..., Pa
DivideEtImpera(P1 , n1 , S1 )
...
DivideEtImpera(Pa , na , Sa )
Asambleaza(S1 , ..., Sa , S)
end
FII, UAIC
Curs 8
SD 2016/2017
24 / 44
generalizare: a[p..q]
baza: p q
divide-et-impera
I
I
I
initial memoreaz
a rezultatul interclas
arii n temp
copie din temp[0..q p + 1] n a[p..q]
complexitate:
I
I
FII, UAIC
Curs 8
SD 2016/2017
25 / 44
problema:
I
solutia
I
I
initial: i 0, j 0, k 0
pasul curent:
I
I
I
I
I
FII, UAIC
Curs 8
SD 2016/2017
26 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
27 / 44
generalizare: a[p..q]
baza: p q
divide-et-impera
I
I
p i k = a[i] a[k]
k < j q = a[k] a[j]
FII, UAIC
Curs 8
SD 2016/2017
28 / 44
initial:
I
I
pasul curent:
I
I
I
terminare:
I
I
conditia i > j
operatii
k i 1
swap(a[p], a[k])
FII, UAIC
Curs 8
SD 2016/2017
29 / 44
Curs 8
SD 2016/2017
30 / 44
Procedure quickSort(a, p, q)
begin
while (p < q) do
partitioneaza(a, p, q, k)
quickSort(a, p, k 1)
quickSort(a, k + 1, q)
end
FII, UAIC
Curs 8
SD 2016/2017
31 / 44
FII, UAIC
Curs 8
SD 2016/2017
32 / 44
Cazul cel mai nefavorabil: pivotul este cea mai mica (cea mai mare)
valoare. Timp proportional cu n + n 1 + ... + 1.
Arborele de recursie:
FII, UAIC
Curs 8
SD 2016/2017
33 / 44
FII, UAIC
Curs 8
SD 2016/2017
34 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
35 / 44
1
2
3
4
5
6
7
8
9
10
11
12
Curs 8
SD 2016/2017
36 / 44
FII, UAIC
Curs 8
SD 2016/2017
37 / 44
Continut
FII, UAIC
Curs 8
SD 2016/2017
38 / 44
Principiu:
I
I
I
I
FII, UAIC
Curs 8
SD 2016/2017
39 / 44
Algoritm:
Procedure bucketSort(a, n)
begin
for i 0 to n 1 do
insereaza(B[bn a[i]c], a[i])
for i 0 to n 1 do
sorteaza lista B[i]
concateneaza n ordine listele B[0], B[1], , B[n 1]
end
Complexitatea medie: O(n)
FII, UAIC
Curs 8
SD 2016/2017
40 / 44
FII, UAIC
Curs 8
SD 2016/2017
41 / 44
Sortare - complexitate
Algoritm
bubbleSort
insertSort
naivSort
heapSort
mergeSort
quickSort
countingSort
bucketSort
FII, UAIC
favorabil
n
n
n2
n log n
n log n
n log n
Curs 8
Caz
mediu
n2
n2
n2
n log n
n log n
n log n
n+k
n
nefavorabil
n2
n2
n2
n log n
n log n
n2
n+k
SD 2016/2017
42 / 44
Recomandari
I
FII, UAIC
Curs 8
SD 2016/2017
43 / 44
FII, UAIC
Curs 8
SD 2016/2017
44 / 44