Sunteți pe pagina 1din 2

Laborator 7 – Metoda Divide et Impera

Metoda Divide et Impera

Divide et Impera este o metodă de programare bazată pe un principiu simplu:

• problema dată se descompune în două (sau mai multe) subprobleme (de același tip ca problema
inițială, dar de dimensiuni mai mici);
• se rezolvă independent fiecare subproblemă;
• se combină rezultatele obținute pentru subprobleme, obținând rezultatul problemei inițiale.

Subproblemele trebuie să fie de același tip cu problema inițială, ele urmând a fi rezolvate prin
aceeași tehnică.

Subproblemele în care se descompun problema dată trebuie să fie:

• de același tip cu problema dată;


• de dimensiuni mai mici (mai “ușoare”);
• independente (să nu se suprapună, prelucrează seturi de date distincte).

Algoritmul Metodei Divide et Impera

Algoritm DivImp(P)
Dacă P este problemă elementară
R <- RezolvăDirect(P)
Altfel
[P1,P2] <- Descompune(P)
R1 <- DivImp(P1)
R2 <- DivImp(P2)
R <- Combină(R1,R2)
SfârșitDacă
SfârșitAlgoritm

Explicații teoretice detaliate:

https://drive.google.com/file/d/1e2brFqlZhtl6VMhg9804Sn4WhkHiGQFZ/view?usp=drive_web
Laborator 7 – Metoda Divide et Impera

Exemplu:

Determinarea maximului dintr-un vector: Se citește un vector cu n componente, numere naturale. Se cere
să se tipărească valoarea maximă.

Funcția căutată va genera valoarea maximă dintre numerele reținute în vector pe o poziție dintre i și
j (inițial, i=1, j=n). Pentru aceasta, se procedează astfel:

• dacă i=j, valoarea maximă va fi v[i];


• în caz contrar, se împarte vectorul în doi subvectori - presupunem varianta pentru paralelizare
pe 2 procesoare. Se calculează mijlocul m al intervalului [i, j]: m = (i+j) div 2. Primul subvector va
conține componentele de la i la m, al doilea va conține componentele de la (m+1) la j; se rezolvă
subproblemele (aflându-se astfel maximul pentru fiecare din subvectori), iar soluția curentă va fi
dată de valoarea maximă dintre rezultatele celor două subprobleme.

Date de intrare:

Elementele vectorului

Date de ieșire:

Valoarea maximă din vector

Probleme rezolvate cu Divide et Impera explicate în detaliu gasiți aici:

https://docs.google.com/document/d/1fuLdOscjvCBrpKIIdsdyrHXMgjHc1FmtiiZ3__81n2I/edit

Alte probleme rezolvate cu metoda Divide et Impera găsiți aici:

https://sites.google.com/site/tudoricabogdan/-cursuri/-ie-2/algoritmi-in-programare