Sunteți pe pagina 1din 14

Grup Scolar Industrial Sarmasag

Disciplina. Informatica Clasa a XI-a B Grupa 3: Kocsis-Feri Robert, Szasz Zsolt, Solyom Robert, Uszkai Botond, Milicu Brigitta Metoda divide et impera. Profesor coordonator: Boti Sandor

Desparte si Stapaneste (Divide et impera)

Tehnica divide et impera


Divide et impera este o tehnica de elaborare a algoritmilor care consta in: Descompunerea cazului ce trebuie rezolvat intr-un numar de subcazuri mai mici ale aceleiasi probleme. Rezolvarea succesiva si independenta a fiecaruia din aceste subcazuri. Recompunerea subsolutiilor astfel obtinute pentru a gasi solutia cazului initial. Sa presupunem ca avem un algoritm A cu timp patratic. Fie c o constanta, astfel incat timpul pentru a rezolva un caz de marime n este tA(n) cn2. Sa presupunem ca este posibil sa rezolvam un astfel de caz prin descompunerea in trei subcazuri, fiecare de marime n/2. Fie d o constanta, astfel incat timpul necesar pentru descompunere si recompunere este t(n) dn. Folosind vechiul algoritm si ideea de descompunere-recompunere a subcazurilor, obtinem un nou algoritm B, pentru care: tB(n) = 3tA(n/2)+t(n) 3c((n+1)/2)2+dn = 3/4cn2+(3/2+d)n+3/4c

Termenul 3/4cn2 domina pe ceilalti cand n este suficient de mare, ceea ce inseamna ca algoritmul B este in esenta cu 25% mai rapid decat algoritmul A. Nu am reusit insa sa schimbam ordinul timpului, care ramane patratic. Putem sa continuam in mod recursiv acest procedeu, impartind subcazurile in subsubcazuri etc. Pentru subcazurile care nu sunt mai mari decat un anumit prag n0, vom folosi tot algoritmul A. Obtinem astfel algoritmul C, cu timpul Conform rezultatelor din Sectiunea 5.3.5, tC(n) este in ordinul lui nlg 3. Deoarece lg 3 @ 1,59, inseamna ca de aceasta data am reusit sa imbunatatim ordinul timpului. Iata o descriere generala a metodei divide et impera: function divimp(x) {returneaza o solutie pentru cazul x} if x este suficient de mic then return adhoc(x) {descompune x in subcazurile x1, x2, , xk} for i 1 to k do yi divimp(xi) {recompune y1, y2, , yk in scopul obtinerii solutiei y pentru x} return y unde adhoc este subalgoritmul de baza folosit pentru rezolvarea micilor subcazuri ale problemei in cauza (in exemplul nostru, acest subalgoritm este A).

Un algoritm divide et impera trebuie sa evite descompunerea recursiva a subcazurilor suficient de mici, deoarece, pentru acestea, este mai eficienta aplicarea directa a subalgoritmului de baza. Ce inseamna insa suficient de mic? In exemplul precedent, cu toate ca valoarea lui n0 nu influenteaza ordinul timpului, este influentata insa constanta multiplicativa a lui nlg 3, ceea ce poate avea un rol considerabil in eficienta algoritmului. Pentru un algoritm divide et impera oarecare, chiar daca ordinul timpului nu poate fi imbunatatit, se doreste optimizarea acestui prag in sensul obtinerii unui algoritm cat mai eficient. Nu exista o metoda teoretica generala pentru aceasta, pragul optim depinzand nu numai de algoritmul in cauza, dar si de particularitatea implementarii. Considerand o implementare data, pragul optim poate fi determinat empiric, prin masurarea timpului de executie pentru diferite valori ale lui n0 si cazuri de marimi diferite. In general, se recomanda o metoda hibrida care consta in: i) determinarea teoretica a formei ecuatiilor recurente; ii) gasirea empirica a valorilor constantelor folosite de aceste ecuatii, in functie de implementare. Revenind la exemplul nostru, pragul optim poate fi gasit rezolvand ecuatia tA(n) = 3tA(n/2) + t(n)

Exemple:

a) Problema turnurilor din Hanoi . Avnd n discuri aezate (descresctor dup dimensiune) pe una din cele trei tije (numerotate cu 1,2,3), se cere s le mutm pe alt tij lund cte un singur disc (cel de deasupra) de pe o tij i mutndu-l pe o alta respectnd ordinea (nu se poate depune un disc mai greu peste unul mai uor). Pentru a rezolva problema vom utiliza un subalgoritm care mut primele n-1 discuri de pe tija a pe tija b. Dac mutm primele n, nseamn c le mutm pe toate i problema este rezolvat. Primele n discuri se mut astfel: se mut primele n-1 discuri de pe tija a pe tija c=6-a-b, apoi se mut discul n (baza) pe tija destinaie (b), iar n final se mut din nou primele primele n-1 discuri de pe tija c=6-a-b pe tija b.

b) Merge Sort (sortare prin interclasare) . S se ordoneze un vector X cu n componente. Se va apela subalgoritmul MergeSort (X,1,n): Subalgoritmul MergeSort (X,i,j) este: { Ordoneaz subirul xi,,xj } Dac j-i> Atunci m:=(i+j)/2; MergeSort (X,i,m); MergeSort (X,m+1,j); Interclasare (X,i,m, X,m+1,j, X,i,j) c) QuickSort (sortare rapid) . S se ordoneze un vector X cu n componente. Se va apela subalgoritmul QuickSort (X,1,n) : Subalgoritmul QuickSort (X,i,j) este: { Ordoneaz subirul xi,,xj } Dac j-i> Atunci m:=Split (X,i,j); QuickSort (X,i,m); QuickSort (X,m+1,j);

Paradigma divide-et-impera: algoritm procedure DivideEtImpera(P, n, S) begin if (n <= n0) then determina S prin metode elementare else imparte P in P1, ..., Pa DivideEtImpera(P1, n1, S1) ... DivideEtImpera(Pa, na, Sa) Asambleaza(S1, ..., Sa, S) end

Tierea pe vertical

Prin metoda Divide et impera se mparte sirul de lungime n n doua subsiruri de lungime n/2, apoi acestea n alte dous subsiruri de lungime n/4, s.a.m.d. pna cnd obtinem subsiruri de lungime mai mica sau egal cu 2. Dac n este o putere a lui 2 atunci se va ajunge la subsiruri elementare de lungime 2. procedura MAX_MIN(S,n,xmin,xmax) este daca nd2 atunci xmin=MIN(a,b) xmax=MAX(a,b) altfel *) determina S1 si S2 de lungime n/2 MAX_MIN(S1,n/2,x1,x2) MAX_MIN(S2,n/2,y1,y2) xmin=MIN(x1,y1) xmax=MAX(x2,y2) . sfrsit

P rocedura DesparteSiStapineste

procedure DesparteSiStapineste(a, b, c, d : real); var i : integer; begin if SolutieDirecta(a, b, c, d, i) then PrelucrareaSolutiei(a, b, c, d) else begin DesparteSiStapineste(a, b, X[i], d); DesparteSiStapineste(X[i], b, c, d); DesparteSiStapineste(a, Y[i], c, d); DesparteSiStapineste(a, b, c, Y[i]); end ; end ; { DesparteSiStapineste }

Sc h ema general a algoritmului bazat pe metoda desparte i stpnete


procedure DesparteSiStapineste( i, j : integer; var x : tip); var m : integer; x1, x2 : tip; begin if SolutieDirecta(i, j) then Prelucrare(i, j, x) else begin m:=(j-i ) div 2; DesparteSiStapineste(i, i+m, x1); DesparteSiStapineste(i+m+1, j, x2); Combina(x1, x2, x); end ; end ;

Maximum keresese: program sor_maximum; type tomb=array[1..100] of integer; var et:tomb; n:Byte; Procedure beolvas (var et:tomb; var n:byte); var i:Integer; begin Write(n=); Readln(n); for i:=1 to n do begin write(et[,i,]=); Readln(et[i]) end end; Function maximum(a,b:Integer):Integer; begin if a<b then maximum:=b else maximum:=a end;

Funvtion max(e,v:Byte): integer; var k:byte; begin if v=e then max:=et[e] else begin k:=(e+v)div 2; max:=maximum(max(e,k),max(k+1,v)) end end; begin beolvas(et,n); writeln(max(1,n)) end.

S-ar putea să vă placă și

  • Tipuridelectii
    Tipuridelectii
    Document6 pagini
    Tipuridelectii
    Dascal Andrian
    Încă nu există evaluări
  • Articol Psihologie
    Articol Psihologie
    Document3 pagini
    Articol Psihologie
    Dascal Andrian
    Încă nu există evaluări
  • Individual Teoria Recursiei
    Individual Teoria Recursiei
    Document68 pagini
    Individual Teoria Recursiei
    Dascal Andrian
    Încă nu există evaluări
  • Programare Modulara
    Programare Modulara
    Document78 pagini
    Programare Modulara
    Dascal Andrian
    Încă nu există evaluări
  • Orar Sunete 2017
    Orar Sunete 2017
    Document1 pagină
    Orar Sunete 2017
    Dascal Andrian
    Încă nu există evaluări
  • Belotcaci
    Belotcaci
    Document27 pagini
    Belotcaci
    Dascal Andrian
    Încă nu există evaluări
  • Tabele Word
    Tabele Word
    Document1 pagină
    Tabele Word
    Dascal Andrian
    Încă nu există evaluări
  • Individual Teoria Recursiei
    Individual Teoria Recursiei
    Document68 pagini
    Individual Teoria Recursiei
    Dascal Andrian
    Încă nu există evaluări
  • Lucru Individual Nr3
    Lucru Individual Nr3
    Document2 pagini
    Lucru Individual Nr3
    Dascal Andrian
    Încă nu există evaluări
  • Matricea de Specificatii 1
    Matricea de Specificatii 1
    Document3 pagini
    Matricea de Specificatii 1
    Dascal Andrian
    Încă nu există evaluări
  • Test Informatica 2017
    Test Informatica 2017
    Document6 pagini
    Test Informatica 2017
    Dascal Andrian
    Încă nu există evaluări
  • 2f97b5cef PDF
    2f97b5cef PDF
    Document9 pagini
    2f97b5cef PDF
    luncas
    Încă nu există evaluări
  • Pagina de Titlu
    Pagina de Titlu
    Document1 pagină
    Pagina de Titlu
    Dascal Andrian
    Încă nu există evaluări
  • Prelegerea 01
    Prelegerea 01
    Document10 pagini
    Prelegerea 01
    Dascal Andrian
    Încă nu există evaluări
  • Polevoi Denis
    Polevoi Denis
    Document49 pagini
    Polevoi Denis
    Dascal Andrian
    Încă nu există evaluări
  • Probleme Pascal Si C La Tehnici de Programare2
    Probleme Pascal Si C La Tehnici de Programare2
    Document23 pagini
    Probleme Pascal Si C La Tehnici de Programare2
    Dascal Andrian
    Încă nu există evaluări
  • Polevoi Denis
    Polevoi Denis
    Document49 pagini
    Polevoi Denis
    Dascal Andrian
    Încă nu există evaluări
  • Pagina de Titlu
    Pagina de Titlu
    Document1 pagină
    Pagina de Titlu
    Dascal Andrian
    Încă nu există evaluări
  • Fisiere
    Fisiere
    Document5 pagini
    Fisiere
    Deea Si Cam Asa
    Încă nu există evaluări
  • Probleme Pascal Si C La Tehnici de Programare2
    Probleme Pascal Si C La Tehnici de Programare2
    Document23 pagini
    Probleme Pascal Si C La Tehnici de Programare2
    Dascal Andrian
    Încă nu există evaluări
  • Raportul
    Raportul
    Document21 pagini
    Raportul
    Dascal Andrian
    Încă nu există evaluări
  • Culegere C#
    Culegere C#
    Document100 pagini
    Culegere C#
    Alina Marina Dvorac
    Încă nu există evaluări
  • Curenta
    Curenta
    Document1 pagină
    Curenta
    Dascal Andrian
    Încă nu există evaluări
  • Curs CSS
    Curs CSS
    Document19 pagini
    Curs CSS
    Dascal Andrian
    Încă nu există evaluări
  • 1lucraremartieclasaaix 1
    1lucraremartieclasaaix 1
    Document1 pagină
    1lucraremartieclasaaix 1
    Dascal Andrian
    Încă nu există evaluări
  • Power Point
    Power Point
    Document8 pagini
    Power Point
    Dascal Andrian
    Încă nu există evaluări
  • Teza Cuprins
    Teza Cuprins
    Document3 pagini
    Teza Cuprins
    Dascal Andrian
    Încă nu există evaluări
  • Bib PDF
    Bib PDF
    Document1 pagină
    Bib PDF
    Dragos Popescu
    Încă nu există evaluări
  • File PDF
    File PDF
    Document168 pagini
    File PDF
    Dascal Andrian
    Încă nu există evaluări
  • File PDF
    File PDF
    Document168 pagini
    File PDF
    Dascal Andrian
    Încă nu există evaluări