Sunteți pe pagina 1din 4

De MIHAI VIOLETA Profesor: Cristiana Popescu

Divide et impera este un ,,algoritm


stravechi” – cu totii ne impartim
treburile in sarcini mai mici,
pentru a fi capabili sa le indeplinim
–de la cum facem curat,pana la
contruirea unei case sau
aranjarea unei echipe de fotbal in
teren.

Deci de ce nu ne-am inspira din felul in care


vaneaza leii sau cum a fost cucerita Europa de
Caesar pentru am rezolva o problema la
informatica?
Folosirea acestui algoritm
imbunatateste eficienta,
insa memoria alocata este
mai mare.

Nu toate problmele pot fi


rezolvate insa cu aceasta
metoda
#include <iostream>
MAXIMUL UNUI VECTOR using namespace std;
int v[10],n;

int max(int i, int j)


{
Funcția căutată va genera valoarea int a, b, m;
maximă dintre numerele reținute în if (i==j) return v[i];
else
vector pe o poziție dintre i și j (inițial,
{
i=1, j=n). Pentru aceasta, se m = (i+j)/2;
procedează astfel: a = max(i, m);
dacă i=j, valoarea maximă va fi v[i]; b = max(m+1, j);
în caz contrar, se împarte vectorul în if (a>b) return a;
doi subvectori - presupunem varianta else return b;
pentru paralelizare pe 2 procesoare. }
}
Se calculează mijlocul m al
intervalului [i, j]: m = (i+j) div 2. Primul int main( )
subvector va conține componentele {
de la i la m, al doilea va conține cout<<”n=”;cin>>n;
componentele de la (m+1) la j; se for (int i=1; i<=n; i++)
rezolvă subproblemele (aflându-se {
astfel maximul pentru fiecare din cout<<”v[“<<i<<”]=”; cin>>v[i];
}
subvectori), iar soluția curentă va fi
cout<<”max=”<<max(1,n);
dată de valoarea maximă dintre return 0;
rezultatele celor două subprobleme. }

S-ar putea să vă placă și