This is an old revision of the document!


Laboratorul 11: Divide et Impera și programare dinamică

1. Obiectivele laboratorului

  • Înțelegerea noțiunilor de bază legate metoda de programare divide et impera
  • Înțelegerea noțiunii de programare dinamică

2. Metoda Divide et Impera

2.1 Prezentare generală

Această metodă se poate aplica problemelor care permit descompunerea lor în subprograme independente (numele procedurii traducându-se prin împarte și stăpânește.) Așadar obținem 3 faze principale:

  • Divide - împarte problema în una/mai multe probleme similare de dimensiuni mai mici.
  • Stăpânește - rezolvă subproblemele recursiv (dacă dimensiunea subproblemelor este mică,se rezolvă iterativ).
  • Combină - combină soluțiile sub-problemelor pentru a obține soluția problemei inițiale.

2.2 Implementare

void divide_et_impera(int P[],int n,int S[]{
     if(n <= n0 )
          Determină S prin metode elementare;
     else {
          Împarte P in:P1,P2,...,Pa
          divide_et_impera(P1,S1);
          ................................................
          divide_et_impera(Pa,Sa);
          Asamblează (S1,...,Sa,S);\
     }
}

2.3 Probleme tip rezolvate cu acest algoritm

2.3.1 Determinarea rădăcinilor unei ecuații

Se dă o funcție care are semne contrare în cele doua capete ale intervalului [a,b],f(α) * f(β) < 0. Determinați o rădăcină a lui f din intervalul [a,b] cu o eroare ε. Pentru rezolvarea problemei folosim următoarea strategie:împărțirea repetată a intervalului inițial [α,β] în jumătăți ale acestuia și selectarea intervalului jumătății în care se află soluția (Metoda bisecției)

  • Fie funcția f:[α,β] → R,continuă.Determinarea aproximației Δ',a rădăcinii exacte Δ, cu eroarea ε.
  • Notăm cu m mijlocul intervalului ( m=(α+β)/2 )
  • Verificăm dacă f(m) * f(b) < 0,ceea ce înseamnă că soluția se află în a doua jumătate a intervalului și îi atribuim lui α valoarea lui m.
  • Altfel daca f(m) * f(b) > 0,soluția se află în prima jumătate a intervalului și ii atribuim lui β valoarea lui m.
  • Acest procedeu se aplică în mod repetat până când lungimea intervalului scade cu 2*ε(β - α < 2*ε)

3. Programare dinamică

3.1 Definiție

3.2 Algoritm

4. Exerciții laborator

sda-aa/laboratoare/12.1621803132.txt.gz · Last modified: 2021/05/23 23:52 by cristian.rusu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0