Sie sind auf Seite 1von 2

DIVIDE ET IMPERA

Expresia Divide Et Impera provine din limba latina si a constituit unul dintre principiile de
guvernare ale imparatului roman Iulius Cezar.In traducere inseamna dezbina si stapaneste si
exprima un adevar,din pacate valabil si in ziua de azi: o masa de oameni poate fi mai usor
stapanita,atunci cand este dezbinata !
Ceea ce este trist pentru o societate,poate fi benefic atunci cand un informatician vrea sa
rezolve o problema,asa cum se va vedea in continuare.Numele acestei tehnici de programare
arata foarte clar in ce consta ea : prin analogie cu exemplul din istorie, o problema poate fi mult
mai usor stapanita si astfel rezolvata, daca este despicata in mai multe parti.
Algoritmii Divide Et Impera sunt in general rapizi, deoarece prin descompunere, de
cele mai multe ori, se obtin probleme pentru care rezolvarea si combinarea solutiilor au grad de
complexitate mai mic decat problema initiala.
Algoritmii Divide Et Impera se implementeaza, de obicei, intr-un subprogram recursiv.

Principiul metodei
In programare, aplicarea acestui principiu se face astfel:
1.
Se descompune problema data in doua sau mai multe probleme de aceeasi natura.
Acestea pot fi de doua tipuri : elementare sau ne-elementare.
2. Cele elementare se rezolva direct, iar cele ne-elementare se descompun in continuare
in alte suprobleme elementare si ne-elementare. Procesul de descompunere continua pana cand sau obtinut numai probleme elementare.
3.
Solutia problemei initiale se obtine prin reconstituirea si recombinarea solutiilor
subproblemelor, in ordine inversa. Datorita acestui principiu de functionare, algoritmii Divide Et
Impera au un caracter recursiv.

Implementarea metodei Divide Et Impera in aceasta problema se face astfel :

1.
Subprogramul divizeaza() Numarul de subprobleme in care se descompune
problema este 2. Deoarece exista doua multimi de date de intrare, se va lua ca reper multimea cu
cele mai multe elemente. Multimea datelor de intrare este divizata in doua submultimi disjuncte,
prin divizarea multimii indicilor in doua submultimi disjuncte de indicii, adica multimea
indicilor [s,d] este divizata in doua submultimi disjuncte [s,mij] si [mij+1,d], unde mij este
indicele din mijlocul intervalului : mij =(s+d) /2. Procesul de divizare este identic cu cel de la
problema anterioara.
2.
Subprogramul combina() Deoarece in cazul de baza se determina unul dintre
coeficientii polinomului suma care se scrie direct in vectorul r , acest subprogram nu mai este
necesar.
3.
Subprogramul dei() O subproblema corespunde cazului de baza atunci cand
submultimea contine un singur element. Daca s-a terminat procesul recursiv, atunci se
prelucreaza cazul de baza, prin care se calculeaza coeficientul polinomului suma pentru acel
indice(daca termenul care se calculeaza are indicele mai mic decat gradul minim al polinoamelor,
atunci el este egal cu suma coeficientilor celor doua polinoame, altfel, daca polinomul p are
gradul mai mic decat al polinomului q, atunci el este egal cu coeficientul polinomului q, altfel, el
este egal cu coeficientul polinomului p), altfel, se apeleaza subprogramul pentru divizarea
intervalului, se apeleaza subprogramul dei() pentru primul interval si apoi pentru al doilea
interval.

Das könnte Ihnen auch gefallen