Documente Academic
Documente Profesional
Documente Cultură
Comparare metodei
N Сăutare liniară Metoda „Divide et Impera“
(cel mai rău caz) O(log2n)
О(n)
10 О(10)=10 O(log210)=3.32
100 О(100)=100 O(log2100)=6.64
1 000 О(1000)=1000 O(log21000)=9.96
10 000 О(10000)=10000 O(log210000)=13.28
100 000 О(100000)=100000 O(log2100000)=16.6
1 000 000 О(1000000)=1000000 O(log2100000)=19.93
Exemplu 2. Merge sort
Împărțiți un sir de n numere în
2 jumătăți
Problema este binecunoscută. Cum o rezolvăm prin metoda Divide et Impera? Care sunt subproblemele?
A împărți problema în subprobleme constă de fapt în a împărți vectorul în doi subvectori, cu număr (aproape) egal de elemente. Primul
subvector ar fi V cu elementele indexate de la 1 la n/2 (prima jumătate a lui V), iar al doilea ar fi a doua jumătate – elementele indexate de la
n/2+1 la n.
Prima jumătate este un vector, dar a jumătate nu mai este un vector, elementele nu mai sunt indexate de la 1 la ..., deci cele două
subprobleme nu mai sunt de același tip (sau cel puțin nu în mod direct).
Vom realiza o funcție care să determine pentru vectorul V suma elementelor din secvența delimitată de indicii st și dr. Pentru a rezolva
problema dată vom apela funcția cu parametrii st=1 și dr=n. Această abordare are două avantaje:
• putem rezolva problema prin metoda divide et impera – o secvență poate fi împărțită în alte după secvențe, de dimensiuni mai mici; •
putem folosi funcția realizată pentru a determina suma elementelor din orice secvența a vectorului.
// combinam rezultatele
return s1 + s2;
}
}
✔ Primul element din vector, numit pivot, este mutat în cadrul vectorului pe poziţia pe
care trebuie să se găsească în vectorul sortat.
✔ Toate elementele mai mici decât el vor fi mutate în vector în faţa sa.
✔ Toate elementele mai mari decât el vor fi mutate în vector după el.
12 15 21 9 49 31 55 89 13
Pivotul
13 9 12 15 21 49 31 55 89
Pivotul