Documente Academic
Documente Profesional
Documente Cultură
Schema general
function DivImp(p,u)
if up< p u
then r Prel(p,u)
else m Interm(p,u);
r1 DivImp(p,m);
r2 DivImp(m+1,u);
r Combin(r1,r2)
return r
end;
unde:
- funcia Interm ntoarce un indice n intervalul p..u (de obicei m= (p+u)/2 ).
- funcia Prel este capabil s ntoarc rezultatul subsecvenei p..u, dac aceasta este
suficient de mic;
- funcia Combin ntoarce rezultatul asamblrii rezultatelor pariale r1 i r2.
Exemple:
Calculul maximului elementelor unui vector;
Parcurgerile n preordine, inordine i postordine ale unui arbore binar;
Sortarea folosind arbori de sortare.
1
2
Cutarea binar
procedure CautBin
p u; u n
while pu
i (p+u)/2
case ai>x : u i-1
ai=x : write(true,i); stop
ai<x : p i+1
write(false,p)
end
2
3
O mutare este notat prin (i,j) i semnific deplasarea discului din vrful tijei i
deasupra discurilor aflate pe tija j. Se presupune c mutarea este corect (vezi condiia de
mai sus).
Fie H(m;i,j) irul de mutri prin care cele m discuri din vrful tijei i sunt
mutate peste cele de pe tija j, folosind i a treia tij, al crei numr este k=6-i-j.
Problema const n a determina H(n;1,2).
Se observ c este satisfcut relaia:
H(m;i,j) = H(m-1;i,k) (i,j) H(m-1;k,j) (*)
respectndu-se condiia din enun. Deci problema pentru m discuri a fost redus la dou
probleme pentru m-1 discuri, al cror rezultat este asamblat conform (*).
procedure Hanoi(n,i,j)
if n=1
then write(i,j)
else k6-i-j;
Hanoi(n-1,i,k); Hanoi(1,i,j); Hanoi(n-1,k,j)
end
procedure Inter(p,m,u)
k1p; k2m+1; k3p;
while k1m & k2u
if ak1<ak2 then bk3ak1; k1k1+1;
else bk3ak2 ;k2k2+1
k3k3+1
3
4
procedure SortInter(p,u)
if p=u
then
else m (p+u)/2 ;
SortInter(p,m); SortInter(m+1,u);
Inter(p,m,u)
end
4
5
Metoda Quicksort
Fie poz funcia cu parametrii p,u care ntoarce indicele k pe care va fi poziionat
ap n cadrul secvenei (ap,...,au).
Atunci sortarea se realizeaz prin apelul QuickSort(1,n), unde procedura
QuickSort are forma:
procedure QuickSort(p,u)
if p=u
then
else k poz(p,u); QuickSort(p,k-1); QuickSort(k+1,n)
end
5
6
Observaie. Cazul cel mai defavorabil pentru metoda Quicksort este cel n care
vectorul este deja ordonat cresctor: se compar a1 cu a2,...,an rezultnd c el se afl
pe poziia final, apoi se compar a2 cu a3,...,an rezultnd c el se afl pe poziia
final etc.
1n
T(n) n 1 [T(k 1) T(n k)]
n k 1
T(1) T 0 0
deoarece:
n cazul cel mai defavorabil a1 se compar cu celelalte n-1 elemente;
a1 poate fi poziionat pe oricare dintre poziiile k=1,2,...,n; considerm aceste
cazuri echiprobabile;
T(k-1) este timpul (numrul de comparri) necesar ordonrii elementelor aflate la
stnga poziiei k, iar T(n-k) este timpul necesar ordonrii elementelor aflate la
dreapta poziiei k.
nT(n) = n(n-1)+2[T(0)+T(1)+...+T(n-1)]
(n-1)T(n-1) = (n-1)(n-2)+2[T(0)+...+T(n-2)]
Scznd cele dou relaii obinem:
nT(n)(n-1)T(n-1) = 2(n-1)+ 2T(n-1), deci:
nT(n) = (n+1)T(n-1)+2(n-1).
mpart cu n(n+1):
2 3 n n+1
7
T(n) 1 1 1 2
2 ..... 1
n 1 n 1 n 3 n 1
Cum suma ultimilor doi termeni este negativ, rezult:
T(n) n 1 1
dx 2lnx|2n 1 2.ln(n+1)
n 1 2 x
(am folosit o inegalitate bazat pe sumele Rieman pentru funcia f(x)=ln x).
Deci T(n)=O(n.log n).
Arbori de decizie