Cuprins
- Introducere
- 1.Scopul lucrarii
- 2.Sarcina lucrarii
- 3.Listingul programului
- 4.Reprezentarea rezultatelor
- Concluzie
Extras din laborator
Introducere
Divide et impera se bazează pe principiul descompunerii problemei în două sau mai multe subprobleme (mai ușoare), care se rezolvă, iar soluția pentru problema inițială se obține combinând soluțiile subproblemelor. De multe ori, subproblemele sunt de același tip și pentru fiecare din ele se poate aplica aceeași tactică a descompunerii în (alte) subprobleme, până când (în urma descompunerilor repetate) se ajunge la probleme care admit rezolvare imediată.
Nu toate problemele pot fi rezolvate prin utilizarea acestei tehnici. Se poate afirma că numărul celor rezolvabile prin "divide et impera" este relativ mic, tocmai datorită cerinței ca problema să admită o descompunere repetată.
Divide et impera este o tehnică ce admite o implementare recursivă. Principiul general prin care se elaborează algoritmi recursivi este: "ce se întâmplă la un nivel, se întâmplă la orice nivel" (având grijă să asigurăm condițiile de terminare). Așadar, un algoritm prin divide et impera se elaborează astfel: la un anumit nivel avem două posibilități:
1. s-a ajuns la o problemă care admite o rezolvare imediată (condiția de terminare), caz în care se rezolvă și se revine din apel;
2. nu s-a ajuns în situația de la punctul 1, caz în care problema curentă este descompusă în (două sau mai multe) subprobleme, pentru fiecare din ele urmează un apel recursiv al funcției, după care combinarea rezultatelor are loc fie pentru fiecare subproblemă, fie la final, înaintea revenirii din apel.
Dupa cum sugereaza si numele 'desparte si stapaneste 'etapele rezolvarii unei probleme (numita problema initiala) in DIVIDE ET IMPERA sunt :
- descompunerea problemei initiale in subprobleme independente similare problemei de baza ,de dimensiuni mai mici;
- descompunerea treptata a subproblemelor in alte subprobleme din ce in ce mai simple ,pana cand se pot rezolva imediata prin algoritmul simplificat;
- rezolvarea subproblemelor simple;
- combinarea solutiilor gasite pentru construirea solutiilor subproblemelor de dimensiuni din ce in ce mai mari;
- combinarea ultimelor solutii determina obtinerea solutiei problemei initiale.
Scopul lucrarii
- Studierea metodei divide et impera.
- Analiza și implementarea algoritmilor bazați pe metoda divide et impera.
Sarcina lucrarii
1. Studiați noțiunile teoretice despre metoda divide et impera.
2. Implementați algoritmii Mergesort și Quicksort.
3. Efectuați analiza empirică a algoritmilor Mergesort și Quicksort.
4. Faceți o concluzie asupra lucrării efectuate.
Algoritmul formal al metodei divide et impera:
function divimp(x)
{returnează o soluție pentru cazul x}
1: if x este suficient de mic
2: then return adhoc(x)
3: {descompune x în subcazurile x1, x2, , xk}
4: for i 1 to k do yi divimp(xi)
5: {recompune y1, y2, , yk în scopul obținerii soluției y pentru x}
6: return y
unde adhoc este subalgoritmul de bază folosit pentru rezolvarea micilor subcazuri ale problemei în cauză.
Mergesort (sortarea prin interclasare)
Fie T[1 .. n] un tablou pe care dorim sa-l sortam crescător. Prin tehnica divide et impera putem proceda astfel: separăm tabloul T în două părți de mărimi cât mai apropiate, sortăm aceste părți prin apeluri recursive, apoi interclasăm soluțiile pentru fiecare parte, fiind atenți să păstrăm ordonarea crescătoare a elementelor. Obținem următorul algoritm pentru rezolvarea unei subprobleme:
procedure mergesort (T, p, r) 1: if p < r
2: then q (p+r/2)
3: mergesort(T,p,q)
4: mergesort(T,q+1,r)
5: merge(T,p,q,r)
Preview document
Conținut arhivă zip
- Metoda divide et impera.docx