Documente Academic
Documente Profesional
Documente Cultură
Absolvent:
Farkas Sndor
INTRODUCERE
Aceast lucrare este un mediu educaional pentru cei interesai de teoria algoritmilor, mai precis a unei pri din 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 folosete n cazul problemelor ce ndeplinesc simultan urmtoarele trei condiii:
- soluia lor poate fi pus sub forma de vectori S = x1, x2, ... , xn, cu x1 aparinnd mulimii A1, x2 aparinnd mulimii A2, ..., xn aparinnd mulimii An ; - mulimile A1, A2, ... , An sunt mulimi finite, iar elementele lor se consider c se afl ntr-o relaie 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 din multimea Ak+1 care ndeplinete anumite condiii de continuare, aprnd astfel dou posibiliti: a) elementul exist, se testeaz dac nu s-a ajuns la o soluie, n caz afirmativ aceasta se tiprete, n caz contrar se consider generate x1, x2, ..., xk, xk+1; b) elementul nu exist, situaie n care se consider generate elementele x1, x2, ... , xk-1, relundu-se cutarea de la elementul urmtor lui xk n multimea Ak ; - algoritmul se ncheie cnd au fost luate n consideraie toate elementele mulimii A .
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.
Pentru nelegerea acestei metode se dau dou exemple, care aplic algoritmul Branch and
Bound:
Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Branch and
Bound.
Capitolul III.
Metoda Divide et Impera
Pentru clarificarea metodei presupunem c se d un vector A=( a1, a2 , ..., aN) i c trebuie efectuat o prelucrare oarecare asupra elementelor sale. Mai mult, presupunem c pentru orice p, q naturali cu 1 p < q N, exist m{p, ... , q-1}, astfel nct prelucrarea secvenei {ap, ... , aq} se poate face prelucrnd secvenele {ap, ... , am} i {am+1, ... , aq} i apoi combinnd rezultatele pentru a obine prelucrarea dorit a ntregii secvene {ap, ... , aq}.
Pentru nelegerea acestei metode se dau cteva exemple, care aplic algoritmul Divide
et Impera:
Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda
Divide et Impera.
Capitolul IV.
Metoda Greedy
Aceast tehnic se folosete n situaia n care este dat o mulime A cu n elemente de intrare i se cere s se gseasc o submulime B a sa, care s ndeplineasc anumite condiii pentru a fi acceptat; cum n general exist mai multe astfel de mulimi, se mai d i un criteriu conform cruia dintre submulimile acceptabile (numite soluii posibile) s alegem una singur(numit soluie optim). Soluiile posibile au urmtoarea proprietate: dac b este soluie posibil i C inclus n B, atunci i n C este soluie posibil; vom presupune c este ntotdeauna soluie posibil.
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:
Acest capitol conine i un subcapitol care propune spre rezolvare cteva probleme, folosind metoda Greedy.
Capitolul V.
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.