Sunteți pe pagina 1din 13

Metoda Divide et Impera

Curs 11
Metoda Divide et Impera.
Prezentarea general
Ideea (divide i cucerete) este atribuit lui Filip al II-lea,
regele Macedoniei (382-336 i.e.n.), tatl lui Alexandru cel
Mare si se refer la politica acestuia fa de statele
greceti.
n programare:Divide et impera se refer la o clas de
algoritmi care au ca principale caracteristici faptul c
mpart problema n subprobleme similare cu problema
iniil, de dimensiune mai mic, care sunt rezolvate
recursiv si apoi combin soluiile pentru a crea o soluie
pentru problema original
Metoda Divide et Impera.
Prezentarea general
Metoda Divide et impera const n 3 pai la fiecare
nivel al recurenei:
Divide:
dac dimensiunea datelor de intrare este prea mare pentru a
rezolva problema ntr-o manier direct, descompune
problema n dou sau mai multe subprobleme independente,
similare i de dimensiune mai mic a datelor de intrare
Impera(Cucerete):
rezolv recursiv subproblemele identificate

Combin:
combin soluiile subproblemelor pentru a obine soluia
problemei iniiale (uneori este cuprins n primii doi pai)
Metoda Divide et Impera.
Prezentarea general
Avantaje:
Produce algoritmi eficieni.
Descompunerea problemei n subprobleme faciliteaz
paralelizarea algoritmului n vederea execuiei sale pe
mai multe procesoare.
Dezavantaje:
Se adaug un overhead datorat recursivitii (reinerea pe
stiv a apelurilor funciilor).
Metoda Divide et Impera. Descrierea
algoritmului

Fie n=size(data) i n1,n2,nk=size(d1), size(d2), , size(dk)


Metoda Divide et Impera. Exemple
1. S se determine valoarea minim dintr-un sir de n nr intregi.
Divide: dou abordri - (1,n-1) (n/2,n/2)
Cucerete: determina valoarea min in cele dou subliste
Combin: determin minumul global

1. T(n) = T(n-1) + (1), T(n)=n


(n) Complexitatea acceai cu
algoritmul clasic!
2. T(n) = 2 * T(n/2) + (1) , T(n)=2n-1
(n)
Metoda Divide et Impera. Exemple
2. Cutare binar. S se determine poziia pe care este gsit unui
numr ntr-o list de numere odonat cresctor.
Divide: determin mijlocul listei
Cucerete: cauta recursiv n una din cele dou jumti
Combin: nu exist, deoarece soluia problemei iniiale a fost obinut simultan cu etapele de
descompunere

T(n) = T(n/2) + (1) , T(n)(log2n)


Mai eficeint decat cautarea secvenial, T(n)(n)
Metoda Divide et Impera. Exemple
1. S se determine X n , unde n 1
Divide: calculeaz n/2
Cucerete : determin recursiv X n/2
Combin: 1 sau 2 nmuliri

Algoritm divide et impera:

Complexitate:
T(n) = T(n/2) + (1) = (log2n)

Algoritm clasic: Complexitate: (n)


Pentru i=1,n executa
rez=rez*x
returneaza rez
Metoda Divide et Impera. Exemple
Sortare prin interclasare (Merge Sort)
Divide: mparte lista n dou subliste
Cucerete: sorteaz recursiv cele dou subliste folosind merge sort
Combin: interclaseaz cele dou subliste
Metoda Divide et Impera. Exemple
Exemplu funcionare Merge Sort [Wikipedia]
Metoda Divide et Impera. Exemple
Merge Sort: analiza complexitii temporale

T(n) = 2 * T(n/2) + (n)


Numrul de subprobleme
Complexitatea interclasrii

Dimensiunea subproblemelor

T(n) (n*log2n)
Complexitatea spatiala: S(n)=(n)
Metoda Divide et Impera. Exemple
Sortare rapid (Quick Sort)
Divide: partiioneaz irul n dou subsiruri a. elementele din primul sa fie mai mici
decat elem din al doilea
Cucerete: sorteaz recursiv cele dou subiruri
Combin: nu exist, deoarece soluia problemei iniiale a fostobinut simultan cu etapele de
descompunere

BC: T(n) = 2 * T(n/2) + (n) apartine de (n*log2n)


WC: T(n) = T(1)+ T(n-1) + (n) apartine de (n2)
AC: alternativ BC, AC T(n) apartine de (n*log2n)
Referine bibliografice
Frentiu, M., H.F. Pop, Serban, G. Fundamentals of
Programming, Cluj University Press, 2006, 233 pagini
The Python language reference.
http://docs.python.org/py3k/reference/index.html
The Python standard library.
http://docs.python.org/py3k/library/index.html
The Python tutorial.
http://docs.python.org/tutorial/index.html