programare dinamica - ginfo

Upload: bogdan-mihai-timofte

Post on 04-Jun-2018

223 views

Category:

Documents


3 download

TRANSCRIPT

  • 8/13/2019 Programare dinamica - Ginfo

    1/6

    f o c u s

    G I n f o n r . 1 5

    / 4 -

    a p r i l i e 2 0 0 5

    29

    Folosirea tehnicii programrii dina-mice presupune intuiie i abilitimatematice. De multe ori rezolvriledate prin aceast tehnic au ordin decomplexitate polinomial.

    La un nivel superior, toate tehni-cile de programare pot fi privite caparticularizri ale programrii dina-mice.

    Consideraii teoreticeTehnica programrii dinamice seaplic problemelor de optim referitorla un anumit criteriu dat n enun. ncele mai multe cazuri soluia care sa-tisface acest optim nu este unic. nliteratura de specialitate exist douvariante de prezentare general aacestei tehnici. Prima dintre ele estemai degrab de natur deductiv pe

    cnd a doua folosete gndirea in-ductiv.n prima variant apare concep-

    tul desubproblem . Sunt considerateurmtoarele dou aspecte care carac-terizeaz o rezolvare prin programa-re dinamic: Problema se poate descompune re-

    cursiv n mai multe subproblemecare sunt caracterizate de optimepariale, iar optimul global se obi-

    ne prin combinarea acestor optimepariale.

    Subproblemele respective se supra-pun. La un anumit nivel, dou saumai multe subprobleme necesit,pentru a fi rezolvate, rezolvarea uneiaceeai subprobleme. Pentru a evitarisipa de timp rezultat n urmaunei implementri recursive, opti-mele pariale se vor reine treptat, n maniera bottom-up, n anumitestructuri de date (tabele).

    Fie urmtoarea problem:Consi-derm o reea de orae legate prin o-sele. Se cere determinarea pentru fie-care pereche de orae A, B a drumu-lui de lungime minim care le unete.

    Problema se poate aborda folo-

    sind metoda programrii dinamice.Dac drumul minim care leag orae-le A i B trece prin oraulC , atuncii subdrumurile: A C i C Bsunt de lungime minim, afirmaiecare poate fi demonstrat folosindmetoda reducerii la absurd.

    Am descompus astfel problema n subprobleme. Mai departe, dacavem drumuri minime de forma A C B1 i A C B2, atunci sub-

    problemele ( A, B1) i ( A, B2) necesitrezolvarea aceleai subprobleme ( A,C ). Ca urmare, problema satisface icel de-al doilea aspect general.

    A doua variant de prezentare fa-ce apel la conceptele intuitive de sis-tem, stare i decizie. O problem es-te abordabil folosind tehnica progra-mrii dinamice dac satisface princi-piul de optimalitate sub una din for-mele prezentate n continuare.

    Fie secvena de striS0, S1, ,Snale sistemului. Dacd 1, d 2,,d n este un ir optim

    de decizii care duc la trecerea siste-mului din stareaS0 n stareaSn,atunci pentru oricei (1 i n) d i+1,d i+2,d n este un ir optim de deci-zii care duc la trecerea sistemuluidin stareaSi n stareaSn. Astfel, de-

    ciziad i depinde de deciziile ante-rioared i+1,d n. Spunem c se apli-c metodanainte .

    Dacd 1, d 2,,d n este un ir optimde decizii care duc la trecerea siste-mului din stareaS0 n stareaSn,atunci pentru oricei (1 i n) d 1,d 2 ,d i este un ir optim de deciziicare duc la trecerea sistemului dinstareaS0 n stareaSi. Astfel, deciziad i+1depinde de deciziile anterioare

    Programare dinamic

    Programare DINAMIC .TEORIEi APLICAIIRadu Viinescu, Violeta Viinescu

    n acest articol propunem o prezentare a tehnicii programrii dinamice, urmat de o serie de aplicaii cu grad mic de dificultate, care pot fi folositepentru iniierea elevilor n rezolvarea acestor tipuri de probleme.

  • 8/13/2019 Programare dinamica - Ginfo

    2/6

    G I n f o n r .

    1 5 / 4 -

    a p r i

    l i e

    2 0 0 5

    30

    f o c u s

    d 1,d i. Spunem c se aplic meto-danapoi .

    Dacd 1, d 2,,d n este un ir optimde decizii care duc la trecerea siste-mului din stareaS0 n stareaSn,atunci pentru oricei (1 i n) d i+1,d i+2,d n este un ir optim de deci-zii care duc la trecerea sistemuluidin stareaSi n stareaSn i d 1, d 2 ,d i este un ir optim de decizii careduc la trecerea sistemului din stareaS0 n stareaSi. Spunem c se aplicmetodamixt .

    Considerm o a doua problem:Se consider un triunghi format dinN linii ( 1 N 100 ), fiecare linieconinnd numere ntregi din dome-niul {1, 2, ..., 99}.

    Exemplu 73 8

    8 1 0

    2 7 4 4

    4 5 2 6 5

    Determinai cea mai mare sum de numere aflate pe un drum ntrenumrul de pe prima linie i unul dintre numerele de pe ultima linie.Succesorii posibili ai unui numr peacest drum sunt situai sub acesta, o poziie la stnga sau o poziie ladreapta.

    Sistemul este reprezentat de struc-tura de date corespunzatoare proble-mei, iar decizia este reprezentat dealegerea de a merge la un anumit pasla stnga sau la dreapta.

    Problema ndeplinete criteriulde optimalitate n prima sa form:dac suntem pe un nivelk + 1 i amluat toate deciziile de a ajunge n mod

    optim la toate elementele de pe acestnivel, atunci deciziad k corespunz-toare niveluluik se construiete de lastnga la dreapta n modul urmtor:pentru fiecare element xde pe nive-lulk se consider cei doi succesoriaflai pe nivelulk + 1 deja procesat ieste ales acela pentru care suma pn n acel moment este maxim.

    Indiferent de varianta de prezen-tare, rezolvarea prin programare di-

    namic presupune gsirea i rezolva-rea unui sistem de recurene.

    n prima variant avem recurene ntre subprobleme, n a doua avemvariant recurene n irul de decizii.Deoarece rezolvarea prin recursivita-te duce de cele mai multe ori la ordinde complexitate exponenial, se aleganumite tabele auxiliare pentru rei-nerea optimelor pariale i spaiul desoluii se parcurge n ordinea cresc-toare a dimensiunilor subproblemelor.

    Folosirea acestor tabele d i nu-mele tehnicii respective.

    Pentru prima problem folosim omatrice auxiliarCOST n care vomcalcula costurile minime ntre oricareperechi de orae. Sistemul derecurene este urmtorul:

    COST ( A, B) =D( A, B)pentru C = 0; COST ( A, B) =

    min({COST ( A, B),COST ( A, C ) +COST (C , B) |

    pentru C = 1, 2, ,N }).

    Pentru a doua problem, triun-ghiul va fi memorat n matricea Asub diagonal, stnga poziiei (P, Q)va fi (P + 1,Q), iar dreapta va fi (P +1,Q + 1). Folosim o matrice auxilia-rS iar sistemul de recurene va fi:

    S(P, N ) = A(P, N )pentru 1 P N

    S(P, Q) =max{S(P + 1,Q),S(P +1 ,Q+1)}+ A(P, Q)

    pentruP COST (I , K ) +COST ( K , J ).

    Pentru oraele A i B, un drumde cost minim care le unete va fi datde valorile succesive:B, PRED( A,B),PRED( A, PRED( A, B)),PRED( A, PRED( A, PRED( A, B))), , A.

    Acest algoritm este cunoscut nliteratura de specialitate drept algo-ritmulRoy-Floyd .

  • 8/13/2019 Programare dinamica - Ginfo

    3/6

    f o c u s

    G I n f o n r . 1 5

    / 4 -

    a p r i l i e 2 0 0 5

    31

    Aplicaiin cele ce urmeaz vom prezentaenunurile mai multor probleme ivom arta, pentru fiecare dintre aces-tea, modul n care pot fi aplicate cu-notinele teoretice prezentate.

    Problema #1

    Fie un irX = ( x1, x2, , xn) de lun-gimeN ale crui elemente sunt nu-mere ntregi.

    Numim subir al iruluiX o suc-cesiune de elemente dinX , n ordi-nea n care acestea apar nX : X i1, X i2,,X ik unde 1 i1 < i2 < K

    avemX K >X P ,SUCC K = un indiceP care maxi-

    mizeaz formula anterioarsau

    SUCC K = 0, dacL K = 1.

    Prezentm versiunea n pseudo-cod a algoritmului prin care se con-struiesc vectoriiL i SUCC :

    LN 1

    SUCCN 0

    pentru K N - 1, 1 pas -1execut

    MAX 1pentru P K + 1, N execut

    dac XK XP atunciMAX LP + 1

    POZ P

    sfrit dacLK MAX

    dac MAX = 1 atunciSUCCK 0

    altfelSUCCK POZ

    sfrit dac

    sfrit pentrusfrit pentru

    Lungimea optim o reprezintvaloarea maxim din vectorulL. Da-c aceast valoare se afl pe poziiaPOZ, atunci soluia optim este ob-inut cu ajutorul vectoruluiSUCC .Varianta n pseudocod este:

    MAX -1

    pentru K 1, N executdac LK > MAX atunci

    MAX LKPOZ K

    sfrit dacsfrit pentruscrie MAXct timp POZ 0 execut

    scrie X POZPOZ SUCCPOZ

    sfrit ct timp

    Problema se poate rezolva i fo-losind metoda napoi. n ambele si-

    tuaii ordinul de complexitate al al-goritmului de rezolvare esteO(N 2).

    Problema #2Se consider o cldire cuN niveluri.n interiorul acesteia se aflM lifturi.Fiecare liftLi face legtura ntre ni-velul de plecarePi i nivelul de sosireU i. Avem ntotdeauna relaiaPi

  • 8/13/2019 Programare dinamica - Ginfo

    4/6

    G I n f o n r .

    1 5 / 4 -

    a p r i

    l i e

    2 0 0 5

    32

    f o c u s

    Problema a fost propus spre re-zolvare elevilor din clasele a XI-a i aXII-a la ediia 2005 aOlimpiadei Lo-cale de Informatic din judeulPra-hova.

    RezolvareDacL1, L2,L K -2, L K -1, L K este unir optim de lifturi pentru care avemU L K =N , atunciL1, L2,L K -2, L K -1,este un ir optim pn la nivelulU L K-1=PL K , L1, L2,L K -2 este un ir optimde lifturi pn la nivelulU L K-2 .a.m.d.Folosim doi vectori auxiliariNRi PREDcare memoreaz numrulminim de lifturi, respectiv predece-sorul unui lift n irul de lifturi. Pre-zentm rezolvarea n pseudocod:

    NR1 0

    PRED1 0

    pentru I 2, N executMIN

    pentru J 1, I - 1 executpentru K 1, M execut

    dac P K = J i UK = Iatunci

    dac MIN > NRJ iNRJ 0 atunci

    MIN NRJPOZ K

    sfrit dacsfrit dac

    sfrit pentrusfrit pentrudac MIN atunci

    NRI MIN + 1

    PRED I POZ

    altfelNRI -1

    PRED I 0

    sfrit dacsfrit pentrudac NRN = -1 atunci

    scrie -1

    altfelscrie NRNdrum(N)

    sfrit dac

    subalgoritm drum(NIV)dac PREDNIV > 0 atunci

    drum(PRED NIV )

    scrie PREDNIV sfrit dacsfrit subalgoritm

    Algoritmul are ordinul de com-plexitate O(N 2 M) datorit faptuluic am memorat proprietile lifturi-lor sub forma unei liste de perechi.

    Propunem refacerea algoritmului,memornd lifturile care ajung la eta-julI ntr-o list.

    Ordinul de complexitate ar tre-bui s devin O(N +M).Problema #3Se consider un teren denivelat, co-dificat cu ajutorul unei matrice A,care conineN linii iM coloane, alecrei elemente sunt numere naturale.

    Se numete drumEst-Sud o suc-cesiune de celule ale matricei care n-deplinesc condiia ca, la fiecare pas,dup o celul de coordonate (I , J ) surmeze fie celula dinspreEst(I + 1,

    J ), fie celula dinspreSud (I , J + 1).Determinai un drumEst-Sud delungime maxim avnd n plus pro-prietatea c valorile situate n celulelesale sunt n ordine cresctoare.

    Date de intrareFiierul de intraredrum.in are ur-mtoarea structur: pe prima linie se afl valorileN i

    M, separate printr-un spaiu; pe urmtoareleN linii, se afl valo-

    rile corespunztoare ale matricei,cteM numere pe o linie, separate ntre ele prin cte un spaiu.

    Date de ieireFiierul de ieiredrum.out trebuies aib urmtoarea structur: pe prima linie valoareaL, lungimea

    maxim a drumului. pe urmtoareleL linii, perechiI, J

    de coordonate care identific celu-lele care alctuiesc drumul.

    Restricii i precizari: 1 N ; M 100; 0 AIJ 1000

    Exempludrum.in4 4

    1 20 3 10

    4 5 6 6

    1 7 3 1

    drum.out5

    1 1

    2 1

    2 2

    2 3

    3 4

    Rezolvare:Dac (I 1, J 1), (I 2, J 2), (I 3, J 3), , (I K , J K )este un drum de lungime maxim ca-re pornete de la celula (I 1, J 1), atunci(I 2, J 2), (I 3, J 3), , (I K , J K ) este un drumde lungime maxim care pornete dela celula ((I 2, J 2), drumul (I 3, J 3), ,(I K , J K ) este un drum de lungime ma-xim care pornete de la celula (I 3, J 3).a.m.d.

    Folosim dou matrice auxiliareLi LEG, care vor pstra informaiile

    necesare determinrii drumului.ValoareaLIJ reprezint lungimeamaxim a unui drum care pornetedin celula de coordonateI i J , iarLEGIJ poate avea una dintre valorile0 , 1 sau 2.

    Valoarea 0 indic faptul c urm-toarea celul care face parte din drumeste nspreSud , valoarea 1 indicfaptul c urmtoarea celul care faceparte din drum este nspreEst, iarvaloarea 2 indic faptul c celula co-respunztoare este ultima celul adrumului.

    Algoritmul descris n pseudocodeste:

    pentru I 1, N executLIM 1

    LEGIM 2

    sfrit pentrupentru J 1, M execut

    LNJ 1

    LEGNJ 2

    sfrit pentru

    pentru I N - 1, 1 pas -1execut

    pentru J M - 1, 1 pas -1execut

    dac AIJ AI+1,J atunciL1 LI+1,J +1

    altfelL1 0

    sfrit dacdac AIJ AI,J+1 atunci

    L2 LI,J+1 +1

  • 8/13/2019 Programare dinamica - Ginfo

    5/6

    f o c u s

    G I n f o n r . 1 5

    / 4 -

    a p r i l i e 2 0 0 5

    33

    altfelL2 0

    sfrit dacdac L1 > L2 atunci

    DIR 0

    L0 L1

    altfelDIR 1

    L0 L2sfrit dacdac L0 = 0 atunci

    LIJ 1

    LEGIJ 2

    altfelLIJ L0

    LEGIJ DIR

    sfrit dacsfrit pentru

    sfrit pentruX 0

    Y 0

    MAX 0

    pentru I 1, N executpentru J 1, M execut

    dac LIJ > MAX atunciMAX LIJX I

    Y J

    sfrit dacsfrit pentru

    sfrit pentruscrie MAXI X

    J Y

    ct timp (LEG IJ 2) executscrie I, Jdac LEGIJ = 0 atunci

    I I + 1

    altfelJ J + 1

    sfrit dacsfrit ct timpscrie I, J

    Algoritmul are ordinul de com-

    plexitateO(N M).Problema #4Considerm o tabl de joc de formdreptunghiular avndN linii iMcoloane. Piesele jocului se mic n-cepnd de la o poziie iniial aflatpe prima linie pn la o poziie finalaflat pe ultima linie a tablei.

    Este dat o list de mutri posi-bile sub forma unor cvadruple:X 1,

    Y 1, X 2, Y 2 cu semnificaia c piesa si-tuat n punctul de coordonate (X 1,Y 1) se poate muta n punctul de co-ordonate (X 2, Y 2); n plus de fiecaredat avem relaia:X 1

  • 8/13/2019 Programare dinamica - Ginfo

    6/6

    G I n f o n r .

    1 5 / 4 -

    a p r i

    l i e

    2 0 0 5

    34

    f o c u s

    Problema #5FieX = (X 1, X 2, ,X n) iY = (Y 1,Y 2, ,Y m) dou iruri care coninn,respectivm numere ntregi. Determi-nai un subir comun al acestoriruri, care are lungimea maxim.

    ExempluX = (2,7,7,6,2,8,4,1,3,5,6)Y = (10,2,5,6,7,7,4,3,5,8)

    O soluie este:Z = (2,7,7,4,3,5)

    RezolvareFieZ = (Z1, Z2, ,Zk-1, Zk) un astfelde subir. Exist o pereche (i, j) pen-tru care avemZk =X i i Zk =Y j. nacest cazZ este optim pentru subsec-veneleX 1,,X i iY 1, ,Y j. De ase-menea, exist o pereche (i', j') pentru

    care avemZk-1 =X i' i Zk-1 =Y j'. Maimult, vom avea ntotdeaunai' < i i i'< i. n acest cazZ1, ,Zk-1 este op-tim pentru subsecveneleX 1, ,X i'i Y 1, ,Y j'.

    Se aplic metoda napoi; trebuies ajungem pas cu pas de la perechea(i', j') la perechea (i, j).

    Considerm toate subsecvenelede formaX 1,,X i i Y 1, ,Y j. Rei-nem pentru o pereche de indici (i, j)valoarea Aij care indic lungimea ma-xim a unui subir comun al irurilorX 1,,X i i Y 1, ,Y j.

    Pentrui = 0 sau j = 0 vom avea ntotdeauna A0k = Ah0=0, pentru toa-te valorilek i h pentru care 1 k m i 1 h n.

    Pe cazul general, dacX i =Y j,atunciZk =X i =Y j i Aij = Ai-1, j-1 + 1,deoarecei' < i - 1 si j' < j - 1.

    DacX i Y j trebuie s eliminmunul dintre capete. S-ar putea savemX i =Y j-1 sauY j =X i-1 (este po-sibil ca ambele egaliti s fie adev-

    rate simultan). n general, putem con-sidera c Aij =max( Ai, j-1, Ai, j-1).Se observ c matricea A se poate

    construi n urma unei parcurgeri pelinii i coloane.

    Prezentm n continuare rezolva-rea n pseudocod:

    pentru i 1, n executAi0 0

    sfrit pentru

    pentru j 1, m executA0j 0

    sfrit pentrupentru i 1, n execut

    pentru j 1, m executdac Xi = Yj atunci

    Aij Ai-1,j-1 + 1

    altfel

    dac Ai-1,j > Ai,j-1 atunciAij Ai-1,j

    altfelAij Ai,j-1

    sfrit dacsfrit dac

    sfrit pentrusfrit pentru

    Subirul propriu-zis se constru-iete tot pe baza matricei A. Se par-curge un drum de la punctul de co-

    ordonate (n, m) ctre marginile dinstnga i de sus ale matricei. La fie-care pas, dacX i =Y j se reine aceas-t valoare, altfel se merge ctre maxi-mul coordonatelor precedente (I - 1, J ) i (I , J - 1). Prezentm rezolvarea n pseudocod:

    i n

    j m

    ct timp i > 0 i j > 0 executdac Xi = Yj atunci

    scrie XiI I - 1J J - 1

    altfeldac Ai-1,j = Aij atunci

    i i - 1

    altfelj j - 1

    sfrit dacsfrit dac

    sfrit ct timp

    Problema #6

    Un graf orientat pe niveluri are no-durile mprite nk 2 mulimiV 1,V 2, ,V k.

    n prima mulime se afl nodulsurss, n ultima mulime se afl no-dul terminalt. Arcele unesc noduridin mulimi succesive i au costuripozitive.

    Se dorete determinarea unuidrum de cost minim de la surs ladestinaie.

    ExempluV 1 = {1},V 2 = {2, 3, 4, 5},V 3 = {6, 7,8},V 4 = {9, 10, 11},V 5 = {12}.Arce: (1, 2) cost 9; (1, 3) cost 7; (1, 4)cost 3; (1, 5) cost 2; (2, 6) cost 4; (2,7) cost 2; (2, 8) cost 1; (3, 6) cost 2;(3, 7) cost 7; (4, 8) cost 11; (5, 7) cost11; (5, 8) cost 8; (6, 9) cost 6; (6, 10)cost 5; (7, 9) cost 4; (7, 10) cost 3; (8,10) cost 5; (8, 11) cost 6; (9, 12) cost4; (10,12) cost 2; (11,12) cost 5.

    Un drum de cost minim este: 1,2, 7, 10, 12 i are costul 16.

    RezolvareSe aplic metoda nainte. Relaia derecurena este:costnivel, J =min{c JL +costnivel +1 , L} pentruL nV nivel +1i ( J ,L) arc. Algoritmul de determinare acostului minim, n pseudocod, este:

    cost N 0

    pentru J N - 1, 1 pas -1execut

    parcurgem lista de adiacent anoduluiJ

    fieK nodul pentru care valoareac JK + cost K este minim

    cost[J] c JK + cost Kd[J] K

    sfrit pentru

    Pentru determinarea drumului decost minim putem utiliza algoritmul:

    drum 1 1

    drum H N

    pentru J 2, H - 1 executdrum J d drum J-1

    sfrit pentru

    Ordinul de complexitate al algo-ritmului esteO(N +M) dac memo-rm graful prin liste de adiacen.Algoritmul se poate generaliza pen-

    tru arce ntre mai multe niveluri.Bibliografie1.Ellis Horowitz, Sartaj Sahni, San-

    guthevar Rajasekaran, Computer Algorithms,Computer SciencePress 1998.

    2.Emanuela Cerchez, Informatic ,Editura Polirom, 2002

    3.*** , probleme propuse la concur-surile de programare.