Dynamsk programmerng Hvlke problemer? Metoden ble formalsert av Rchard Bellmann (RAND Corporaton) på -tallet. Har ngen tng med programmerng å gøre. Dynamsk er et ord som kan aldr brukes negatvt. 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 så lte delproblem at løsnngen lett kan fnnes. Løsnngene på delproblemene må så kunne kombneres tl løsnnger på større problemer. (Ofte må flere delproblemer kombneres, -- stykker kke uvanlg, flere er mulg.). Dynamsk programmerng brukes typsk tl å løse optmalserngs-problemer. (Problemer hvor det kan være mange løsnnger, og hvor v ønsker å fnne den beste.) Optmaltetsprnsppet Overlappende delproblemer Gtt et optmalserngsproblem, og en funkson combne (funksonen 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, så er S, S,, S m optmale løsnnger på sne respektve problemnstanser. For at dynamsk programmerng skal være mer effektvt enn f.eks en rekursv dvde and conquer-algortme, må delproblemene være overlappende. Dvs. samme delproblem må forekomme som del flere større problemer. I dynamsk programmerng utnytter v det faktum at v allerede har løst delproblemer og lagret svaret, slk at dsse kke løses flere ganger. Hvs optmaltetsprnsppet holder, så er problemet egnet for løsnng med dynamsk programmerng. Da genereres bare optmale løsnnger på delproblemer. Hvs både optmaltetsprnsppet holder, og v har overlappende delproblemer, så er sannsynlgvs dynamsk programmerng måten å løse problemet på.
Fre enkle(?) steg Dynamsk programmerng vs. Dvde and conquer. Beskrv strukturen en optmal løsnng / strukturen problemet. Dynamsk programmerng Dvde and conquer. Defner rekursvt verden av en optmal løsnng.. Beregn verden tl en optmal løsnng, bottom up (lagr verden av optmale delløsnnger en tabell).. 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.) Bottom up Best egnet når delproblemene er avhengge av hverandre. Løsnnger på alle delproblemer lagres en tabell og behøver kke re-beregnes. Irrelevante delproblemer løses Memoserng Top down (rekursvt kall) Best egnet når delproblemene er uavhengge av hverandre. Da reberegnes kke løsnnger på delproblemer. Kun relevante delproblemer løses. Qucksort 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, > fra node tl node består av endenodene og, og nternnodene v. For alle par av noder,, ser v på korteste ster fra tl som består av nternnoder fra mengden {v }, og lar p være en av dsse.. La d (k) være lengden av korteste st fra tl med nternnoder fra mengden {v }. 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: 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 - }; 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 - }. (Optmaltetsprnsppet holder.) d ( k ) w = ( k ) ( k ) ( k ) mn{ d, dv + d k v k } v k kke med v k med sten 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.)
. 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-) ) return(d (n) ) end NavStrngMatcher - - D () = - - D () = - - D () =
Strenger som lgner En streng P er en k-approksmason av en streng T dersom T kan konverteres tl P ved å utføre maksmalt k av følgende operasoner: Substtuson Et symbol T byttes ut med et annet. Tllegg Et nytt symbol legges tl T. Slettng Et symbol slettes fra T. Edt dstance, ED(P,T), mellom to strenger P og T er det mnste antall slke operasoner som trengs for å konvertere P tl T. Eks. logarthm alogarthm algarthm algorthm (+a, -o, a/o) Strenger som lgner V skal fnne edt dstance mellom to strenger T og P.. La D [n, m] = ED( P [:n ], T [:m] ). (Edt dstance mellom delstrenger) Hvs P [ ] = T [ ], så er D [, ] = D [-, -]. Hvs P [ ] T [ ], så må v se på en optmal sekvens av operasoner som transformerer T [: ] tl P [: ]. V antar UTAG at v først har endret på P [: -], T [: -] og at v gør sste operason for å få T [ ] = P [ ], dette kan være: Substtuson T sette T [ ] = P [ ]. Tllegg T legge tl symbol T på pos T [ ] slettng av P [ ]. Slettng T slettng symbol T på pos T [ ]. Hvs kke operasonene gort for å få T [:-] = P [:-] var optmale, så snakker v kke nå om en optmal sekvens av operasoner som gr T [: ] = P [: ]. (Optmaltetsprnsppet holder) Strenger som lgner. En rekursv defnson av, ] vl altså være som følger: Strenger som lgner. En rekursv defnson av, ] vl altså være som følger:, ], = mn{, ] +,, +,, ] + } substtuson tllegg T slettng T slettng P, ] =,, ] =, ] =. hvs P[ ] = T[ ellers, ], = mn{, ] +,, +,, ] + } substtuson tllegg T slettng T slettng P, ] =,, ] =, ] =. hvs P[ ] = T[ ellers - - - -...... - - - - +
Strenger som lgner Pat. functon EdtDstance ( P [:n ], T [:m ] ) for to n do, ] for to m do, ] for to n do for to m do If P [ ] = T [ ] then, ] -, -] endf, ] mn { -, -] +, -, +,, -] + } return( n, m ] ) end EdtDstance q Ann Ann p q Joe Joe p q Pat p q Ray Ray p q Gennomsnttlg søketd p + p + p + p + q + q + q + q + q For generelle søketrær får v følgende formel for gennomsnttlg antall sammenlknnger som gøres. T et tre med n nøkler (søkeord lagret nterne noder) K,, K n-. n+ bladnoder tlsvarer ntervaller I,, I n mellom nøklene. sannsynlghetsvektorer p og q for nøklene og ntervallene mellom dem, hhv. d er nvået tl nøkkel K, e er nvået tl bladnode som korresponderer med I. n A ( T, n, p, q) = p ( d + ) + n q e = = 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 T over alle mulge, gtt søkesannsynlghetene (p -ene og q -ene). Dvs treet som mnmerer gennomsnttlg antall sammenlknnger A(T,n,p,q). mn A(T,n,p,q). T p -ene og q -ene er utgangspunktet sansynlgheter (tall ntervallet [,], som summerer tl ), men v kan slakke på kravet og anta at de er postve reele tall, det er uansett bare tall som sammenlknes. n La σ ( p, q) = + n p q = =
. Et bnært tre T for nøklene K, K n- består av en rot med nøkkel K, og to deltær L og R. L er del bnært tre for nøklene K, K -, R et tre for nøklene K +, K n. K Gennomsnttlg antall operasoner for et søketre T er gtt ved følgende formel: A(T,n,p,q) = A(L,,p,,p -,q,,q ) + A(R,n- +,p +,,p n-,q +,,q n ) + σ(p,q) For enkelthets skyld skrver v: A(T) = A(L) + A(R) + σ(p,q) (Optmaltetsprnsppet holder) L K,, K - p,, p - q,, q K +,, K n - p +,, p n - q +,, q n R. En rekursv formel kan lages som følger: La T være et søktre for nøklene K,, K,, n (T er det tomme treet om <.). En algortme kan nå enkelt lages ved å fylle ut en tabell med verdene for A(T ) som defnert av formelen: A(T ) = mn { A(T,k - ) + A(T k +, ) } + σ(,) k La σ (, ) = k = + p k + q k k = I tllegg tl verden A(T ) må også en representason av de aktuelle trærne vedlkeholdes, slk at v fnner selve treet. A(T ) = mn { A(T,k - ) + A(T k +, ) } + σ(,), k k