Choices, choices. Tiende forelesning. Dynamisk programmering: En serie med valg der valgmulighetene er avhengige av hva vi har valgt før.

Like dokumenter
Choices, choices. Tiende forelesning. Dynamisk programmering: En serie med valg der valgmulighetene er avhengige av hva vi har valgt før.

A new study has found that cockroaches are morons in the morning and geniuses in the evening in terms of their learning capacity.

Live life and be merry

Live life and be merry

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Algdat - øvingsforelesning

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Dynamisk programmering Undervises av Stein Krogdahl

Dagens stoff er hentet fra kapittel 9 i læreboka, samt kapittel 20.5 (som vi «hoppet over» sist)

Longest increasing. subsequence Betingelser. Longest. common subsequence. Knapsack Grådig vs. DP Moro: 2D-Nim Spørsmål. Forside. Repetisjon.

Dynamisk programmering

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Longest. increasing. subsequence. Betingelser. Matrise- common. Grådig vs. DP. Forside. Intro. Fibonacci-tall. Memoisering DP

Dynamisk programmering

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

Live life and be merry

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

IN Algoritmer og datastrukturer

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

INF Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

for bare trær Andre forelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Notater til INF2220 Eksamen

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

ALGORITMER OG DATASTRUKTURER

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Object [] element. array. int [] tall

INF2220: Forelesning 2

Algdat Eksamensforelesning. Nils Barlaug

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

All good things. Fjortende forelesning

Dynamic Programming Longest Common Subsequence. Class 27

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

Definisjon av binært søketre

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

INF Algoritmer og datastrukturer

Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

for bare trær Andre forelesning

Rekursiv programmering

Algoritmer og Datastrukturer IAI 21899

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Foilene legges ut her:

Flerveis søketrær og B-trær

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

SIF8010 ALGORITMER OG DATASTRUKTURER

Fra A til B. Syvende forelesning

Lars Vidar Magnusson

INF Algoritmer og datastrukturer

Lars Vidar Magnusson

Øvingsforelesning Korteste vei: Alle til alle

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Anbefalte forkunnskaper Studentene forutsettes å kunne programmere, for eksempel ved å ha tatt TDT4100 Objektorientert programmering.

INF2220: Time 12 - Sortering

PG4200 Algoritmer og datastrukturer Forelesning 7

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

INF2220: Forelesning 2

MAT1030 Diskret Matematikk

Løsnings forslag i java In115, Våren 1998

Binære trær: Noen algoritmer og anvendelser

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Grunnleggende Grafteori

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Løsnings forslag i java In115, Våren 1996

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

Forelesningsplan. Grådighet. LF Øving 9. Hva er grådighet? Aktivitetsvelger En grådig strategi Grådig eller dynamisk? Knapsack Huffmankoding

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Trær. En datastruktur (og abstrakt datatype ADT)

LO118D Forelesning 2 (DM)

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Lineær sortering. Radix sort

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Transkript:

Choices, choices Tiende forelesning Dynamisk programmering: En serie med valg der valgmulighetene er avhengige av hva vi har valgt før. DAG- SP er erkeeksemplet (og den underliggende modellen for all DP). 1

Hvordan finner vi den lengste stigende subsekvensen? 5 4 7 10 9 12 11 2

w(q a, q b, s c, s d ) = { is a scaling factor, used to account for es, and t(s i ) is the timestamp for the given note s n a query q and a tune s can then be defined as d(q, s) = min{d(q, s, i)}. (3 i Det finnes 2 n -1 mulige subsekvenser. Vi ønsker å finne den lengste stigende i polynomisk tid. 5 4 7 10 9 12 11 a given alignment i, d(q, s, i) is minimized by choosing as m j=2 = (t(s i j ) t(s ij 1 ))(t(q j ) t(q j 1 )) m i=2 (t(s. (4) i j ) t(s ij 1 )) 2 Vi kan også f.eks. sette en maks-grense på «hoppene». Since the optimal value for is given as a function of the alignment i, the optimization task in (3) becomes a matter of finding an optimal alignment. Assuming, for now, that the value of is known, the optimization may be expressed recursively as follows: d(q 1:a, s 1:b ) = min{d(q 1:a 1, s 1:c ) + w(q a 1, q a, s c, s b ) 2 } c (Dette minner bl.a. om en algoritme for musikksøk ) 3 nd s 1:b are prefixes of q and s, of length a and b, respectively. ay be solved iteratively, by dynamic programming (Be mply consists of constructing a two-dimensi partial solutions, and iterating over ) for examples of the same distance (edit dis n of th

Dette er en enkel løsning men hvordan virker den egentlig? Vi kommer tilbake til saken (Det finnes også en mer effektiv løsning, med kjøretid O(n*log(n)) for i = 1 n for j = i 1 if A[i] > A[j] L[i] max(l[i], L[j]+1) 4

reduksjon rekursjon dekomp. induksjon gjenbruk travers. Dynamisk programmering 5

reduksjon rekursjon dekomp. induksjon gjenbruk travers. Dynamisk programmering 6

Ha DAG-SP i bakhodet! Relax inn fra forg jengere, i topologisk sortert rekkefølge. «Oppskrift» på dynamisk programmering. 1. Karakteriser strukturen til en optimal løsning. 2. Definér verdien til en optimal løsning rekursivt. 3. Beregn den optimale verdien «bottom-up», og ta vare på del-løsninger. struktur definisjon 4. Beregn løsningen som ga den optimale verdien. Memoisering (merk: bare én «r»): Kjør rekursjonen direkte, men lagre delløsninger (og bruk dem i stedet for rekursjon, om mulig). beregning løsning 7

Kjent? 8

Erke- Eksempel «DAG-Shortest-Path» 9

Erke- e s Ek l e p m Dijkstra blir ganske likt, bare at vi har litt grådighet i tillegg (og at den topologiske ordningen må jukses til litt). forgjengere minimum topsort, relax tilbakesporing Tilbakesporingen g jøres ved at vi setter en forg jenger i en forg jentertabell hver gang vi endrer minimum i dollar-fasen. Standardløsning. «DAG-Shortest-Path» 10

Eksempel Floyd-Warshall 11

Ek s l e p em innom hvem? min(med, uten) innom 1, 2, tilbakesporing Floyd-Warshall 12

Noen nye Går ikke igjennom samlebåndseksemplet fra Cormen her. Viktig, på mange måter, siden det er «typisk DP» men det er egentlig bare DAG-SP, som vi jo har snakket om en del fra før. 13

Eksempel 0/1 Ryggsekkproblemet 14

50 10 20 30 $60 $100 $120 15

30 $120 20 $100 30 $120 20 $100 10 $60 10 $60 16

Delproblemparametre: Hvor stor plass har vi (igjen)? Hvor mange objekter har vi (igjen)? På sett og vis litt som Floyd-Warshall: Hvilke objekter får vi bruke? (Men også: Hvor mye plass får vi bruke?) 17

0 c[i, w] = c[i 1, w] max{vi + c[i 1, w wi ], c[i 18 1, w]} if i = 0 or w = 0 if wi > w if i > 0 and w wi

DP-01K(v, w, n, W) for k 0 W c[0, k] 0 for i 1 n c[i, 0] 0 for k 1 W if w[i] k if v[i] + c[i 1, k w[i]] > c[i 1, k] c[i, k] v[i] + c[i 1, k w[i]] else c[i, k] c[i 1, k] else c[i, k] c[i 1, k] 19

Som før: Ta vare på valg i hver rute Nøst deg bakover fra siste rute 20

Pseudopolynomisk kjøretid: Polynomisk avhengig av verdien til et heltall som er en del av instansen altså egentlig eksponentiell som funksjon av problemstørrelsen (målt i lagringsplass). Dette er verdt å ha med seg når vi ser på NP-kompletthet. Problemet er NPkomplett, og ingen kjenner noen polynomiske løsninger på slike problemer så da hadde det jo vært rart om kjøretiden var polynomisk :-) Kjøretid: O(nW) Lett å gå seg bort i disse tingene. Pseudopolynomiske algoritmer kan faktisk være ganske effektive i praksis, f.eks. for rimelige verdier av W i dette tilfellet. Ikke polynomisk pseudopolynomisk! Hvis m = lg W er problemstørrelsen O(n + m) og kjøretiden O(n2 m ) 21

Ek s l e p em Optimale søketrær 22

Optimaliseringskriteriet blir den vektede (med vekt p_i) summen av dybdene (+1) til nøklene k_i. K = [k 1,, kn], k1 < k2 < < kn Vil bygge et binært søketre over K Sannsynlighet p i for søk etter ki Vil minimere forventet søkekostnad Antar at alle søk lykkes. 23

Forventet søketid: 2.15. ( ) ( ) 24

Forventet søketid: 2.10. (Optimalt.) Merk: Ikke sikkert vi vil ha minimal høyde. Heller ikke sikkert den høyeste sannsynligheten ender i rota. ( ) ( ) 25 Brute force: Bygg alle mulige binære søketrær (BST), og sett inn nøklene. Beregn forventet søkekostnad. Velg beste. Men det er Ω(4 n /n 3/2 ) BST-er med n noder.

Hvis T inneholder nøklene ki kj så må T være optimalt for disse nøklene vises lett ved selvmotsigelse. < <> 26

: & Hvis vi antar at rota inneholder kr (som en hypotese) så vil alle k<kr være til venstre (og tilsv. for høyre). Begge deltrær må (som nevnt i forrige foil) være optimale for de gitte nøklene. Hvis vi undersøker alle k = ki kj som mulige røtter, og har (og løser problemet rekursivt) så er vi garantert å finne den optimale løsningen for ki kj! : 6 : &?1 : &+1 : ; 27

But w(8, ; ) = w(8, * 1) + 2* + w(* + 1, ; ). Hvis j = i 1 er treet tomt. Therefore, &[8, ; ] = &[8, * 1] + &[* + 1, ; ] + w(8, ; ). e[i, j] er for ventet kostnad for optimalt BST over ki kj. This equation assumes that we already know which key is <*. We don t. Try all candidates, and pick the best one:! 0 if ; = 8 1, &[8, ; ] = min {&[8, * 1] + &[* + 1, ; ] + w(8, ; )} if 8 ;. 8 * ; Could write a recursive algorithm... As usual, we ll store the values in a table: Vi legger til w(i, j) (dvs. alle p-ene legges til én gang) fordi høyden til alle noder i deltrærne øker med én. w(i, j) er summen av pi pj &[ "1.. #$ 6 + 1%, 0" #$.. 6% ] 28

[trekk pusten dypt] 29

OPTIMAL-BST( 2, >, 6) 8 1 6 + 1 &[8, 8 1] 0 w[8, 8 1] 0? 1 6 8 1 6? + 1 ; 8 +? 1 &[8, ;] w[8, ;] w[8, ; 1] + 2 ; * 8 ; Kubisk kjøretid. return & and *,,( l (liten L) i hovedløkken er størrelsen på deltrærne vi beregner. i er start og j er slutt for nøklene i det aktuelle deltreet. ( &[8, * 1] + &[* + 1, ;] + w[8, ;] ( < &[8, ;] &[8, ;] ( *,,([8, ;] * 30

CONSTRUCT-OPTIMAL-BST(&(($) & &(($[1, 4] print? & is the root CONSTRUCT-OPT-SUBTREE(1, & 1, &, left, &(($) CONSTRUCT-OPT-SUBTREE(& + 1, 4, &, right, &(($) CONSTRUCT-OPT-SUBTREE(6, <, &, @6&, &(($) 6 < $ &(($[6, <] print? $ is @6& child of? & CONSTRUCT-OPT-SUBTREE(6, $ 1, $, left, &(($) CONSTRUCT-OPT-SUBTREE($ + 1, <, $, right, &(($) 31

Eksempel Longest Common Subsequence. Finner en felles subsekvens hos to sekvenser. Lengden kan brukes som et likhetsmål. Denne type algoritmer er vanlig i bioinformatikk og informasjonsgjenfinning. LCS 32

33 Dette er jo mer greatest common subset, også kjent som snitt/ intersection som det jo er trivielt å regne ut i lineær tid vha. f.eks. hashing :-)

34

Noen eksempler. En Brute Forceløsning vil ha en kjøretid på Θ(n2^m) ser du hvorfor? s p r i n g t i m e h o r s e b a c k p i o n e e r s n o w f l a k e m a e l s t r o m h e r o i c a l l y b e c a l m Merk: John Stewarteksemplet ser bare på snittet av bokstavmengdene et mye enklere problem (som lett kan løses i lineær tid vha. f.eks. hashing). 35 s c h o l a r l y

X i = [x1,, xi], Yi = [y1,, yi] X = X m, Y = Yn Z = [z 1,, zk] er en LCS av X og Y 36

Hvis de ikke deler siste element kan LCS-en utvides en selvmotsigelse. Hvis x m = yn: z k = xm = yn og Z k 1 er en LCS av Xm 1 og Yn 1 Det samme gjelder her hvis Xm-1 og Yn-1 har en lenger felles subsekvens så kan vi finne en lenger total felles subsekvens enn Z igjen en selvmotsigelse. 37

Hvis xm yn og zk xm: I begge tilfeller må Z være en felles subsekvens. Hvis det eksisterte en som var lenger vil den også være lenger totalt en selvmotsigelse. Z er en LCS av X m 1 og Y Hvis xm yn og zk yn: Z er en LCS av X og Y n 1 38

c[i,j] er lengden på en LCS av Xi og Yj., =, = =,, > =,, =, + (,,, ), > " =. 39 Enten er xi og yj like eller ikke. Hvis de er det skal xi=yj=zk være med. Ellers vil Z være en LCS enten av Xi-1 og Y eller av X og Yj-1. Vi vet ikke hvilken, men prøver begge og velger den største.

Rekursjon? Enten vi gjør det rekursivt eller iterativt: Legg svarene i en tabell. 40

(,,, ),, =,, +,,,,,,,,, I b-tabellen lagrer vi en referanse til hvor vi «kom fra». 41

42

X nedover til venstre, Y bortover på toppen. Nedoverpil: Dropp en bokstav fra X vekt 0. Bortoverpil: Dropp en bokstav fra Y vekt 0. Skråpil: Ta med bokstav fra X/Y: Vekt 1. Finn lengste vei fra øverst t.v. til nederst t.h. Dette er rett og slett DAG Shortest Path (eller Longest Path, da som jo blir like lett for DAG-er). 43

(,,, ) = =, = (,,, ), = (,,, ) (,,, ) 44

Egenskaper bak DP Optimal substruktur: En optimal løsning bygger på optimale løsninger på delproblemer Overlappende delproblemer: Fordi flere problemer deler delproblemer lønner det seg å lagre dem 45 Korteste vei? Har begge deler. Lengste vei (uten sykler)? Har ikke optimal substruktur Hvis vi ikke har overlappende delproblemer *kan* vi bruke DP, men det er egentlig ingen vits det blir bare splitt-og-hersk med unødvendig lagring av delproblemer.

! 46

2 1 2 2 ) @ < 2 Korteste vei oppdeling i delproblemer som må optimaliseres. Korteste veier består av korteste del-veier. 47

A * Lengste vei. Betrakt q-r-t, en maksimal sti fra q til t. Består den av lengste vei fra q til r og fra r til t? *Nei*! Vi kan ikke bruke DP (og har ingen annen god løsning heller). - ( 48

Og så var det denne, da 5 4 7 10 9 12 11 49

for i = 1 n for j = i 1 if A[i] > A[j] L[i] max(l[i], L[j]+1) A L 5 4 7 10 9 12 11 1 1 2 3 3 4 4 For hvert element, let bakover etter lovlige forgjengere. (Å lete bakover er nyttig hvis vi vil begrense spranglengden.) Delproblemene er lengste subsekvens som slutter på en gitt posisjon, og det er disse vi bruker når vi leter bakover. (Vi kan også lagre hva vi valgte dvs. hva som er forgjengeren, altså pilene i figuren.) 50

Kan du finne en subkvadratisk løsning? Hint: Binærsøk 51