Sunteți pe pagina 1din 1

Divide et impera este o metoda general de elaborare a algoritmilor.

n cadrul acestei
metode distingem trei etape:

Descompunerea problemei ce trebuie rezolvat n dou sau mai multe subcazuri


(subprobleme) mai mici ale aceleiai probleme.

Rezolvarea succesiv a fiecrui subcaz.


Se poate spune c este o metod puternic de rezolvare a unor probleme
conceptual dificile, ca de exemplu Turnurile din Hanoi, generarea fractalilor, puzzle i
altele.
In mod natural metoda divide et impera se implementeaz recursiv, dar este posibil s eliminm
recursivitatea printr-un ciclu iterativ.

Cutarea binar
Pentru rezolvarea acestei probleme folosim un algoritm D&I:
Divide: mprim vectorul n doi sub-vectori de dimensiune n/2.
Stpnete: aplicm algoritmul de cutare binar pe sub-vectorul care conine
valoarea cutat.
Combin: soluia sub-problemei devine soluia problemei ini iale, motiv pentru
care nu mai este nevoie de etapa de combinare.

Se d un vector sortat cresctor (v[1..n]) ce conine valori reale distincte i o valoare


x. Sa se gseasc la ce poziie apare x n vectorul dat.
BinarySearch(v, start, end, x)
if (start > end) return;
// condiia de oprire (x nu se afl
n v)
mid = (start + end) / 2;
// etapa divide
// etapa stpnete
if (v[mid] == x) return mid
if (v[mid] > x) return BinarySearch(v, start, mid-1, x);
if (v[mid] < x) return BinarySearch(v, mid+1, end, x);
Complexitatea algoritmului este data de relaia T(n) = T(n/2) + O(1), ceea ce
implica: T(n) = O(lg n).