tehnici de programare

17
Coordonator ştiinţific: Conf. dr. CĂLIN ENĂCHESCU Absolvent: Farkas Sándor

Upload: alex9216

Post on 01-Oct-2015

65 views

Category:

Documents


2 download

DESCRIPTION

Această lucrare este un mediu educaţional pentru cei interesaţi de teoria algoritmilor, mai precis a unei părţi din această materie, şi anume: tehnici de programare. Scopul acestei lucrări este să prezinte, într-o manieră accesibilă pentru utilizatorii tehnicii de calcul, câteva metode de programare cum ar fi: Backtracking, Divide et Impera, Branch & Bound, Greedy .

TRANSCRIPT

  • Coordonator tiinific:

    Conf. dr. CLIN ENCHESCUAbsolvent:

    Farkas Sndor

  • INTRODUCEREAceast lucrare este un mediu educaional pentru cei

    interesai de teoria algoritmilor, mai precis a unei pridin aceast materie, i anume: tehnici de programare. Scopul acestei lucrri este s prezinte, ntr-o manier

    accesibil pentru utilizatorii tehnicii de calcul, cteva metode de programare cum ar fi: Backtracking, Divide et

    Impera, Branch & Bound, Greedy i Programare dinamic).

    Se au n vedere att aspectele teoretice ale problemelor,

    ct i cele practice, fiecare capitol coninnd pe lng teorie, probleme rezolvate i probleme propuse.

    Lucrarea poate fi folosit ca suport de curs i laborator, fiind gndit pentru un semestru de predare. Ea poate sluji la fel de bine ca suport de studiu individual.

  • Fiecare capitol este compus din patru pri:

    Prima parte este teoria general, n care sunt descrise ideile generale a fiecrei metode de

    programare

    n partea a doua sunt descrise cteva exemple rezolvate, simulate prin Visual Caf.

    Partea a treia conine problemele, care sunt propuse celor care au neles ideea tehnicilor i

    stpnesc cel puin la nivel superficial, unul dintre limbajele de programare n care sunt realizate

    implementrile.

    Partea a patra este un test de verificare tip gril, pentru cei care doresc s-i verifice cunotinele.

  • Coninutul lucrrii:

    I. Metoda Backtracking

    II. Metoda Branch and Bound

    III. Metoda Divide et Impera

    IV. Metoda Greedy

    V. Metoda Programrii dinamice

  • Capitolul I.Metoda Backtracking

    Aceast metod de programare se foloseten cazul problemelor ce ndeplinesc simultanurmtoarele trei condiii:

    - soluia lor poate fi pus sub forma de vectoriS = x1, x2, ... , xn, cu x1 aparinnd mulimii A1,x2 aparinnd mulimii A2, ..., xn aparinndmulimii An ;

    - mulimile A1, A2, ... , An sunt mulimi finite, iarelementele lor se consider c se afl ntr-orelaie de ordine bine stabilit;

    - nu se dispune de o alt soluie mai rapid.

  • Metoda Backtracking const n urmtoarele:

    - se alege primul element, x1, ce aparine A1 ;

    - presupunnd generate elementele x1, x2, ..., xk,aparinnd mulimilor A1, A2, ..., Ak, se alege(dac exist) xk+1, primul element disponibil dinmultimea Ak+1 care ndeplinete anumite condiiide continuare, aprnd astfel dou posibiliti:

    a) elementul exist, se testeaz dac nus-a ajuns la o soluie, n caz afirmativaceasta se tiprete, n caz contrar seconsider generate x1, x2, ..., xk, xk+1;

    b) elementul nu exist, situaie n care seconsider generate elementele x1, x2, ... ,xk-1, relundu-se cutarea de la elementulurmtor lui xk n multimea Ak ;

    - algoritmul se ncheie cnd au fost luate nconsideraie toate elementele mulimii A1.

  • Ca aplicaii ale metodei Backtracking, am prezentat algoritmi pentru:

    - generarea aranjamentelor- generarea combinrilor- generarea permutrilor- generarea partiiilor unei mulimi- problema plii unei sume s, utiliznd n tipuri

    de metode

    Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Backtracking.

  • Capitolul II.Metoda Branch and Bound

    Metoda va folosi o list n care vor fi nscrisevrfuri ale arborelui spaiului de stri pentru a fiprelucrate la un moment ulterior, numite vrfuri active.

    Dintre vrfurile active se alege cte un vrfpentru a fi prelucrat, care se numete vrf curent.

    Cunoatem dou modaliti de parcurgere aarborilor care respect condiiile enunate i anumeparcurgere BF (n care lista vrfurilor active areorganizare de coad) i D (n care lista vrfurilor activeeste organizat ca stiv).

  • Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Branch and Bound.

    Pentru nelegerea acestei metode se dau dou exemple, care aplic algoritmul Branch and Bound:

    - lampa lui Dario Uri- problema macaralei

  • Pentru clarificarea metodei presupunem c sed un vector A=( a1, a2 , ..., aN) i c trebuieefectuat o prelucrare oarecare asupra elementelorsale. Mai mult, presupunem c pentru orice p, q

    naturali cu 1 p < q N, exist m{p, ... , q-1}, astfelnct prelucrarea secvenei {ap, ... , aq} se poate faceprelucrnd secvenele {ap, ... , am} i {am+1, ... , aq}i apoi combinnd rezultatele pentru a obineprelucrarea dorit a ntregii secvene {ap, ... , aq}.

    Capitolul III.

    Metoda Divide et Impera

  • Pentru nelegerea acestei metode se dau cteva exemple, care aplic algoritmul Divide et Impera:

    - problema turnurilor din Hanoi- sortarea rapid- sortarea prin interclasare

    Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Divide et Impera.

  • Aceast tehnic se folosete n situaia n care estedat o mulime A cu n elemente de intrare i se cere sse gseasc o submulime B a sa, care sndeplineasc anumite condiii pentru a fi acceptat; -cum n general exist mai multe astfel de mulimi, semai d i un criteriu conform cruia dintre submulimileacceptabile (numite soluii posibile) s alegem unasingur(numit soluie optim). Soluiile posibile auurmtoarea proprietate: dac b este soluie posibil i Cinclus n B, atunci i n C este soluie posibil; vompresupune c este ntotdeauna soluie posibil.

    Capitolul IV.

    Metoda Greedy

  • Metoda Greedy trateaz acest tip de probleme n urmtoarele dou moduri, care urmeaz aceeai idee dar difer doar prin ordinea de efectuare a unor operaii

    a) Algoritmul Greedy 1

    Se pleac de la soluia vid, se alege pe rnd, ntr-un anumit fel, un element din A neales la paii precedeni. Dac adugarea lui la soluia parial anterior construit conduce la o soluie posibil, construim noua soluie posibil prin adugarea elementului ales.

    b) Algoritmul Greedy 2

    Se procedeaz similar, cu excepia faptului c se stabilete de la nceput ordinea n care trebuie considerate elementele.

  • Pentru o explicaie ct mai clar a acestei metode se dau cteva exemple, care aplic algoritmul Greedy:

    - problema comis-voiajorului- algoritmul lui Prim- problema tetrix

    Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Greedy.

  • Capitolul V.Metoda programrii dinamice

    Programarea dinamic este o metod de proiectare a algoritmilor care poate fi utilizat n cazul n care soluia problemei poate fi privit ca rezultatul unei succesiuni de decizii. De remarcat faptul c este posibil ca decizia luat la un moment dat s depind de cele luate n etapele anterioare.

    O modalitate de rezolvare a problemelor pentru

    care nu este posibil s se efectueze o secven de decizii care s conduc la soluia optim const n ncercarea tuturor secvenelor posibile de decizii.

  • Programarea dinamic ofer posibilitatea reducerii drastice a secvenelor de decizii, eliminndu-le pe cele care nu conduc la soluia optim.Rezolvarea unei probleme de programare dinamic se face respectnd urmtoarele etape:

    - verificarea principiului de optimalitate n una din cele 3 forme ale sale;

    - scrierea relaiilor care apar, corespunztoare formei n care este verificat principiul de optimalitate;

    Pentru o explicaie ct mai clar a acestei metode se dau cteva exemple, care aplic algoritmul programrii dinamice:

    - subir cresctor de lungime maxim- problema reconstituirii frazei

    - problema tirului

  • Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda programrii dinamice.