50 likes | 281 Views
Divide et impera. “ Divide et impera: divide si vei domni;divide si vei deveni bogat;divide si vei insela oamenii...divide si vei insela justitia.” Prodhon.
E N D
“Divide et impera: divide si vei domni;divide si vei deveni bogat;divide si vei insela oamenii...divide si vei insela justitia.” Prodhon • MetodadeprogramareDIVIDE ET IMPERA consta in impartireaproblemeiinitiale de dimensiuni [n] in douasaumaimulteprobleme de dimensiunireduse .In general se executaimpartirea in douasubprobleme de dimensiuniaproximativegalesianume [n/2] . Impartirea in subprobleme are loc panacanddimensiuneaacestoradevinesuficient de mica pentru a firezolvate in mod direct(cazul de baza).Duparezolvareacelordouasubprobleme se executafaza de combinare a rezultatelor in vederearezolvariiintregiiprobleme • MetodaDIVIDE ET IMPERA se poateaplica in rezolvareauneiprobleme care indeplinesteurmatoareleconditii : -se poatedescompune in ( douasaumaimulte) suprobleme ; -acestesuproblemesuntindependenteunafata de alta (o subproblema nu se rezolvapebazaalteiasi nu se folosesterezultateceleilalte); -acestesubproblemesuntsimilare cu problemainitiala; -la randullorsubproblemele se pot descompune (dacaestenecesar) in altesubproblememai simple;-acestesubprobleme simple se pot solutionaimediatprinalgoritmulsimplificat.
MetodaDIVIDE ET IMPERA admite o implementarerecursiva ,deorecesubproblemelesuntsimilareproblemeiinitiale, dar de dimensiunimaimici . • Principiul fundamental al recursivitatiiesteautoapelareaunui subprogram candacestaesteactiv;ceeace se intampla la un nivel ,se intampla la oricenivel ,avandgrijasaasiguramconditia de terminare ale apelurilorrepetate .Asemanator se intamplasi in cazulmetodei DIVITE ET IMPERA ; la un anumitnivelsuntdouaposibilitati : -s-a ajuns la o (sub)problemasimplaceadmite o rezolvareimediatacaz in care se rezolva (sub)problemasi se revine din apel (la subproblemaanterioara,dedimensiunimaimari); -s-a ajuns la o (sub)problema care nu admite o rezolvareimediata ,caz in care o descompunem in douasaumaimultesubproblemesipentrufiecare din ele se continua apelurile recursive(ale proceduriisaufunctiei).In etapafinala a metodei DIVIDE ET IMPERA se produce combinareasubproblemelor (rezolvatedeja) prinsecventele de revenire din apelurile recursive.Etapelemetodei DIVIDE ET IMPERA (prezentate anterior)se pot reprezentaprinurmatorul subprogram general (procedurasaufunctie )recursivexprimat in limbaj natural:
Algoritmul fiind de natură repetitivă şi deoarece subproblemele au aceiaşi formă cu cea a problemei iniţiale metoda “Divide et impera” poate fi implementată elegant folosind o funcţie recursivă.În continuare este dată funcţia generală care implementează algoritmul. • Algoritmul Divide et Impera • functiondivimp(X: problema) • if (X este suficient de mica) • then y = rezolvă(X) • else • {descompune problema x în subproblemele X1, X2,…, Xk} • for i = 1, k do • yi = divimp(Xi) • {combină y1, y2, …, yk pentru a obţine y soluţia problemei X} • y = combină(y1, y2, …, yk) • return y • end