Dynamsk programmerng Metoden ble formalsert av Rchard Bellmann (RAND Corporaton på -tallet. Programmerng betydnngen planlegge, ta beslutnnger. (Har kke noe med kode eller å skrve kode å gøre. Dynamsk for å ndkere at det er en stegvs prosess. Men også et pynteord. Hvlke problemer? Dynamsk programmerng brukes typsk tl å løse optmalserngsproblemer. (Problemer hvor det kan være mange mulge løsnnger, og hvor v ønsker å fnne den beste optmere en obektvfunkson. Skal v kunne løse et problem med dynamsk programmerng, må det kunne deles opp mndre og mndre bter helt tl v kommer tl et delproblem så lte at løsnngen lett kan fnnes. V starter med løsnngene på små delproblemer, og kombnerer dsse tl løsnnger på større delproblemer, helt tl v har løsnngen på hele problemet. Skal dynamsk programmerng være en egnet metode (rask, godt svar må: optmaltetsprnsppet p pp holde, delproblemer må overlappe, og antall delproblemer være polynomsk. Optmaltetsprnsppet Gtt et optmalserngsproblem, og en funksonen combne som kombnerer løsnnger på delproblemer tl løsnnger på større problemer, så ser v at optmaltetsprnsppet holder hvs følgende alltd er sant: Hvs S = combne(s, S,, S m, og S er en optmal løsnng på sn problemnstans, Overlappende delproblemer En dynamsk programmerngs-algortme starter med å løse de mnste delproblemene, og setter sammen dsse løsnngene tl løsnnger på større og større problemer. Hvs samme delproblem forekommer flere ganger, unngår v dobbeltarbed. Løsnngene på delproblemene lagres nemlg, og v slpper å løse dette delproblemet flere ganger. så er S, S,, S m optmale løsnnger på sne respektve problemnstanser. Hvs optmaltetsprnsppet holder, er problemet egnet for løsnng med dynamsk programmerng. Da genereres bare optmale løsnnger på delproblemer når v starter fra optmale løsnnger på de mnste delproblemene, og kombnerer dsse tl løsnnger på større problemer.
Overlappende delproblemer En dynamsk programmerngs-algortme starter med å løse de mnste delproblemene, og setter sammen dsse løsnngene tl løsnnger på større og større problemer. Hvs samme delproblem forekommer flere ganger, unngår v dobbeltarbed. Løsnngene på delproblemene lagres nemlg, og v slpper å løse dette delproblemet flere ganger. Dvde and conquer vs. Dynamsk programmerng g Dvde d and conquer (f.eks Qucksort op down (rekursvt kall Best egnet når delproblemene er uavhengge av hverandre. Da re-beregnes kke løsnnger på delproblemer. Kun relevante delproblemer løses. Dynamsk programmerng Bottom up Egnet når delproblemer overlapper, ettersom løsnnger lagres en tabell og v kan slå opp når v støter på et delproblem v har løst. Ulempen er at v beregner løsnnger på alle delproblemer. Metodene kan kombneres, såkalt memoserng, en dvde and conquer algortme kan lagre løsnnger på delproblemer en tabell og slå opp for å unngå dobbeltarbed. Fre enkle(? steg. Beskrv strukturen problemet, hvordan en løsnng er satt sammen av delløsnnger. Verfser at optmalserngsprnsppet faktsk holder.. Lag en formel for verden av en optmal løsnng (ut fra verden av av optmale delløsnnger.. Beregn verden tl en optmal løsnng, bottom up (lagre verden av optmale delløsnnger en tabell. (kap.. En streng P er en k-approksmason av en streng dersom kan konverteres tl P ved å utføre maksmalt k av følgende operasoner: Substtuson Et symbol byttes ut med et annet. llegg Et nytt symbol legges tl. Slettng Et symbol slettes fra. Edt dstance, ED(P,, mellom to strenger P og er det mnste antall slke operasoner som trengs for å konvertere P tl.. Konstruer en optmal løsnng ut fra beregnede verder. (Om v faktsk ønsker løsnngen, og kke bare nøyer oss med verden av en optmal løsnng. Eks. logarthm alogarthm algarthm algorthm (+a, -o, a/o P
.. Gtt to strenger og P, ønsker v å fnne edt dstance mellom dsse. Gtt to strenger og P, ønsker v å fnne edt dstance mellom dsse. La D [ ] = ED( P [: ], [: ]. (Edt dstance mellom delstrenger La D [ ] = ED( P [: ], [: ]. (Edt dstance mellom delstrenger V deler følgende delproblemer: V deler følgende delproblemer:. Hvs P [ ] = [ ], så er D [ ] = D [ -, -]. a P[: ] = a [: ]. Hvs P [ ] [ ], tenker v oss en optmal sekvens av operasoner som transformerer [: ]tlp P [: ]. Den sste operasonen, for å få [ ] = P [ ], kan være: Substtuson sette [ ] = P [ ], llegg legge tl symbol pos [ ], Slettng slettng symbol på pos [ ].. Substtuson sette [ ] = P [ ] a n n e P[: ] a n n f [: ] llegg legge tl symbol pos [ ] slettng av P [ ] a n n e P[: ] a n n [: ] Regner ut D [ ] ved å fnne D [ -, -] (edt dstance for det grå området, og legger tl for substtusonen. Å legge tl en e er det samme som å slette en P. Regner ut D [ ] ved å fnne D [ -, ](edt dstance for det grå området, og legger tl for slettngen P.. Formelen (rekursv defnson for ] vl altså være som følger:, ] = mn{ D [, ] +, D [, +, D [ ] + substtuson tllegg slettng slettng P, ] =, ] =, ] =. } hvs P[ ] = [ ellers Løsnngen, edt dstance mellom strengene, fnnes m,n] (P er av lengde m og av lengde n. Slettng slettng symbol på pos [ ] a n n P[: ] a n n e [: ] Regner ut D [ ] ved å fnne D [, -] (edt dstance for det grå området, og legger tl for slettngen.
.. Formelen (rekursv defnson for ] vl altså være som følger: Formelen (rekursv defnson for ] vl altså være som følger:, ] = mn{, ] +,, +, ] + substtuson tllegg slettng slettng P, ] =, ] =, ] =. } hvs P[ ] = [ ellers, ] = mn{, ] +,, +, ] + substtuson tllegg slettng slettng P, ] =, ] =, ] =. } hvs P[ ] = [ ellers - - - -...... - - - - +./../. functon EdtDstance ( P [:n ], [:m ] for to n do ] for t to m do, ] for to n do for to m do If P [ ] = [ ] then ] -, - ] else ] mn { -, - ] +, -, ]+ +, - ] + } endf endfor endfor return( n, m ] end EdtDstance eks. P D a n e a del del ns n n e
./. eks. D a n e V er gtt en sekvens M, M,, M n - av matrser og ønsker å beregne produktet M M M n -. V gør dette ved å sette parenteser, og multplsere par av matrser, f.eks slk: P a del del ns n n e M M M M = (M (M M M Parentesene kan settes på mange måter: (M (M (M M (M ((M M M ((M M (M M ((M (M M M (((M M M M Kostnaden (antall skalare multplkasoner kan varere veldg mellom de ulke måtene å sette parenteser på. Gtt to matrser A = p q matrse, B = q r matrse. Kostnaden (antall skalare multplkasoner ved å beregne A B er p q r (A B er en p r matrse. Eks. Beregn A B C, hvor A er en matrse, B er en matrse, og C er en matrse. Å beregne D = (A B koster, og gr en matrse. Å beregne D C koster,. otal kostnad for (A B C blr,. Å beregne E = (B C koster, og gr en matrse. Å beregne A E koster,. otal kostnad for A (B C blr,.. Gtt en sekvens av matrser M, M,, M n -, ønsker v å beregne produktet på bllgst mulg måte v må fnne optmal parentes-struktur. En parenterserng av sekvensen er en oppdelng to delsekvenser, som hver for seg må parenterseres: (M M M k (M k + M k + M n- V må prøve alle mulge k for å fnne hvor det er best å dele sekvensen. Hvert delngspunkt gr opphav tl to delproblemer parenterserng av venstre og høyre delsekvens. Består sekvensen bare av en matrse, er denne en parenterserng av seg selv. Har v en optmal parenterserng av en sekvens av matrser, så må parenterserngen av hver delsekvens også være optmal. Ellers kan v o bare bytte ut den som kke var optmal med en bedre en. (Optmaltetsprnsppet holder.
.. La d, d,, d n være dmensonene tl sekvensen av matrser M, M,, M n-, slk at matrse M har dmenson d d +. d La m være kostnaden av en optmal parenterserng av M, M +,, M Formelen (rekursv defnson for m vl være som følger: m, m { m + m + d d d }, for alle < n, = mn k k, k + + k<,, 9,,, m, =, for alle n,,,,,,,, Kostnaden av å utføre multplkasonen med den optmale parenterserngen fnner v m,n -../. d m m, = mn(d d d + m(, + m(,, d d d + m(, + m(,,, d d d + m(, + m(, = mn( + +,,,, +, +,, +, + 9,,,,,,,,,,, M M M M = M (M M M = (M M (M M c = (M M M M m,,, 9,,,,,,,,,,,
./.. m, c c,, 9,,,,,,,,,,, M M M M M M = (M M M (M M M = ((M (M M ((M M (M./. Optmale søketrær functon OptmalParens( d[ : n ] for to n- do m[ ] for dag to n do // helpevarabel for å fylle ut tabellen nvå for nvå for to n dag do + dag m[ for k to do q m[ k] + m[k +, + d[] d[k + ] d[ + ] f q < m[ then m[ q c[ k endf return m[, n ] end OptmalParens Pat Joe Ray Ann
Optmale søketrær Pat Optmale søketrær Pat Joe Ray Joe Ray Ann Ann Ann Joe Pat Ray p p p p q q q q q Ann Joe Pat Ray p p p p q q q q q Gennomsnttlg søketd: p + p + p + p + q + q + q + q + q Optmale søketrær For generelle søketrær får v følgende formel for gennomsnttlg antall sammenlknnger som gøres: et tre med n nøkler (søkeord lagret nterne noder K,, K n-. n+ bladnoder tlsvarer ntervaller I,, I n mellom nøklene. n sannsynlghetsvektorer p og q for nøklene og ntervallene mellom dem. d er nvået tl nøkkel K, e er nvået tl bladnode som korresponderer med I. n A (, n, p, q = p( d + + n = = qe Optmale søketrær Hvs p -ene er lke og q -ene er lke, vl det komplette bnære søketreet være det optmale. Men noen ord kan være oftere søkt etter enn andre (p -ene ulke, derfor kan det lønne seg med skeve trær og deltrær, for å få ord som det ofte blr søkt etter så høyt som mulg opp treet. V ønsker å fnne det optmale bnære søketreet over alle mulge, gtt søkesannsynlghetene (p -ene og q -ene. Dvs treet som mnmerer gennomsnttlg antall sammenlknnger A(,n,p,q: mn A(, n, P, Q p -ene og q -ene er utgangspunktet sannsynlgheter (tall ntervallet [,], som summerer tl, men v kan slakke på kravet og anta at de er postve reelle tall, det er uansett bare tall som sammenlknes. n La σ ( p, q = + n p q = =
. Optmale søketrær Et bnært tre for nøklene K, K n- består av en rot med nøkkel K, og to deltrær L og R. K. Optmale søketrær La være et søketre for nøklene K,, K, n. ( er det tomme treet om <. K,, K - K +,, K n - p,, p - p +,, p n - q,, q p +,, q n V må prøve alle mulge røtter K for å fnne hvor det er best å dele treet. t Hver mulge rot gr opphav tl to delproblemer optmalserng av de korresponderende venstre og høyre deltrærne. La + σ ( = + p k q k k = k = Formelen (rekursv defnson for A( vl være som følger: A( = mn{ A ( + A ( } + σ ( ( = k k +, k A( = + + σ( Gennomsnttlg antall operasoner for treet er gtt ved: A (, n, p, q A ( L, p,..., p, q,..., q + A ( R, n +, p,..., p, q,..., q + σ ( p, q = + n + n Kostnaden av det optmale treet fnner v A(,n-. For enkelthets skyld skrver v A( = A(L + A(R + σ(p,q./. Optmale søketrær Fyller ut ulke typer tabeller En algortme kan nå relatvt enkelt lages ved å fylle ut en tabell med verdene for A( som defnert av formelen (samme måte som for matrsemultplkason: Bottom up A( = mn{ A(, k + A( k +, } + σ ( k A( = + + σ ( I tllegg tl verden A( må også en representason av de aktuelle trærne vedlkeholdes, slk at v fnner selve treet.
Korteste st (alle tl alle Floyd [ Blank ] V skal fnne korteste st mellom alle par av noder en graf G=(V,E. Kantene har lengde, men v antar at det kke fnnes negatve sykler.. En st p =< < v,, v k, > fra node tl node består av endenodene og, og nternnodene v,, v k. For alle par av noder,, ser v på korteste ster fra tl som består av nternnoder fra mengden {v,, v k }, og lar p være en av dsse. Hvs v k er en nternnode p, består p av delstene p (fra tl v k og p (fra v k tl. Delstene p og p er ster med nternnoder fra mengden {v,, v k - }; og p og p er korteste ster fra tl v k og fra v k tl, ellers vlle kke p vært en korteste st fra tl. Hvs k kke er en nternnode p, er p en korteste st fra tl med nternnoder fra mengden {v,, v k - }. (Optmaltetsprnsppet holder. Korteste st (alle tl alle Floyd. La d (k være lengden av korteste t st fra tl med dnternnoder fra mengden {v,, v k }. Når k = kan kke sten bestå av nternnoder det hele tatt og d ( vl altså tlsvare lengden av kanten. (V bruker w for lengden av kanten. En rekursv defnson av d (k vl være som følger: d w ( k ( k ( k mn{ d, dv + d k v k } v k kke med v k med sten ( k = hvs k = hvs k Matrsen D (n = ( d (n, hvor n er antall noder grafen, vl nneholde lengden av de korteste stene mellom alle par av noder. (Alle noder er nå lovlge mellomnoder.. Korteste st (alle tl alle Floyd functon FloydWarshall ( W n rows( W D ( = W for k to n do for to n do for to n do d (k mn( d (k-, d (k- k + d (k- k endfor endfor endfor return(d (n end FloydWarshall
Korteste st (alle tl alle Floyd - - Korteste st (alle tl alle Floyd - - D ( = Korteste st (alle tl alle Floyd - - D ( = Korteste st (alle tl alle Floyd - - D ( =
Korteste st (alle tl alle Floyd - - D ( = Korteste st (alle tl alle Floyd - - D ( = Korteste st (alle tl alle Floyd - - D ( =