Föreläsning 5: Dynamisk programmering

Relevanta dokument
Dynamisk programmering

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsningsanteckningar F6

Föreläsning 13. Dynamisk programmering

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

Dekomposition och dynamisk programmering

Föreläsning 12+13: Approximationsalgoritmer

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Föreläsning 5: Grafer Del 1

Tommy Färnqvist, IDA, Linköpings universitet

Algoritmer, datastrukturer och komplexitet

Föreläsning 13. Dynamisk programmering

Föreläsning 9: NP-fullständighet

Algoritmer, datastrukturer och komplexitet

Föreläsning 12. Söndra och härska

Föreläsning 12. Söndra och härska

Föreläsning Datastrukturer (DAT036)

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Algoritmer, datastrukturer och komplexitet

Föreläsning 2: Grafer. Exempel på graf

Algoritmer, datastrukturer och komplexitet

Dynamisk programmering

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Algoritmer, datastrukturer och komplexitet

Tommy Färnqvist, IDA, Linköpings universitet

Rekursion. Rekursiv lösningsstrategi. Algoritmkonstruktion. Exempelproblem Hitta största elementet i en sekvens v i där i 1... n.

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Föreläsning 2. Kortaste vägar i grafer.

Giriga algoritmer och dynamisk programmering

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Datastrukturer. föreläsning 8. Lecture 6 1

Föreläsning 3: Dekomposition. Dekomposition

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

Föreläsning 2. Kortaste vägar i grafer.

Föreläsning 11. Giriga algoritmer

Uppgift 1 (grundläggande konstruktioner)

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Algoritmer, datastrukturer och komplexitet

Komplexitetsklasser och repetition

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning Datastrukturer (DAT037)

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Datastrukturer och algoritmer

TNK049 Optimeringslära

Ekvivalensrelationer

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Föreläsning 11. Giriga algoritmer

Datastrukturer och algoritmer

Trafiksimulering: Grafalgoritmer

Datastrukturer och algoritmer

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Dynamisk programmering. Dynamisk programmering. Dynamisk programmering. Dynamisk programmering

Programkonstruktion och Datastrukturer

Algoritmer, datastrukturer och komplexitet

Föreläsning Datastrukturer (DAT036)

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

a = a a a a a a ± ± ± ±500

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

Dynamisk Programmering

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning Datastrukturer (DAT036)

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Sökning och sortering

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Föreläsning 7 Datastrukturer (DAT037)

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

Föreläsning 1. Introduktion. Vad är en algoritm?

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Föreläsning 3: Fler grafalgoritmer. Kortaste vägar mellan alla noder

Några svar till TDDC70/91 Datastrukturer och algoritmer

Föreläsning 6: Introduktion av listor

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Rekursion och induktion för algoritmkonstruktion

Tillämpad Programmering (ID1218) :00-13:00

Algoritmer, datastrukturer och komplexitet

Rekursion och induktion för algoritmkonstruktion

Grundläggande datalogi - Övning 3

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 10. Grafer, Dijkstra och Prim

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Föreläsning 8 Datastrukturer (DAT037)

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Föreläsning 7. Felrättande koder

Transkript:

Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall med maximal viktsumma. Tänk så här: Låt O vara ett optimalt val. Vi tänker baklänges ut hur det måste se ut. Antag att intervallen är sorterade efter växande sluttid. Finns intervall n med eller inte? 1. Intervall n finns inte med i O. DåärO ett optimalt val av intervallen 1,..., n 1. 2. Intervallet n finns med. Låt k vara det största index så att intervall k går att förena med intervall n.dåmåsteo innehålla ett optimalt urval O av intervallen 1,..., k. Def: Låt M[i] =vikten av det bästa urvalet bland intervallen 1,..., i. Rekursionsformel: w 1 k =1 M[k] = maxm[k 1],M[j]+w k ) annars I rekursionen är j maximalt så att intervall j går att förena med intervall k. Vi vill beräkna M[n]. Värdet kan beräknas i tid On). Principen bakom DynP är att bara lösa samma problem en gång. Genom att spara redan uträknade resultat i en tabell och slå upp i den för varje delproblem som ska lösas kan detta åstadkommas. Flödesschema: 1) Bestäm utseendet hos en optimal lösning. 2) Sätt upp en rekursionsekvation för optimalvärdet. 3) Tabulera optimalvärdena för olika delproblem rekursivt eller från små problem till större). 4) Konstruera optimallösningen. Vid konstruktion av DynP-algoritmer fokuserar man vanligen på värdet av lösningen, inte så mycket på lösningens utseende. Exempel på DynP Problem: Givet talföljd x 1,x 2,..., x n vill vi beräkna längden av längsta konsekutiva delföljden av växande tal. Låt vi) =längden av längsta sekvens som slutar i x i. Algoritm:

1) v1) 1 2) for i =2to n 3) if xi 1) xi) 4) vi) vi 1) + 1 5) else 6) vi) 1 7) return v Sedan beräknas max vi). i Problem: Samma problem men utan att följderna behöver vara konsekutiva. Metod: Definiera vi) som ovan. Vi har nu rekursionssambandet 1 x[i] x[j] v[1] = 1c[i, j] = v[i] =max 1 k i {v[k]c[k, i]+1} Beräkna först alla v[i]. Bestäm sedan max v[i]. i Problem: Hitta stigen från toppen till botten som maximerar summan av de ingående talen. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Låt a ij vara elementet på rad i, kolumnj. Låt V [i, j] vara värdet på bästa stigen från i, j) ner till rad n. Då gäller a ij i = n, a ij +max V [i +1,j],V[i +1,j+1] annars. Beräkning av alla V [i, j]:

1) for j =1to n 2) V [n, j] a nj 3) for i = n 1 to 1 4) for j =1to i 5) V [i, j] a ij + max{v [i +1,j],V[i +1,j+1]} Körtiden blir Θn 2 ) för att hitta V [1, 1], värdet av den bästa stigen. Minnesåtgången är också Θn 2 ). När dynamisk programmering fungerar Dynamisk programmering fungerar vanligen när 1. Problemet kan delas upp i delproblem. 2. Problemet kan lösas genom ett girigt val som leder till en delproblemsuppdelning. 3. Lösningarna på delproblemen på ett naturligt sätt kan lagras i en array. 4. Värdena på arrayen kan beräknas relativt enkelt genom en rekursionsekvation. Problem: DELSUMMA Input: En följd av positiva heltal a 1,a 2,..., a n och ett heltal M. Problem: Avgör om det finns en delföljd av talen vars summa är exakt M. Går att lösa med dynamisk progrmmering. Sätt 1 om det går att få summa j med de i första talen, Initiering: 8 >< v[1,a 1]=1 v[1, 0] = 1 >: v[1,j]=0 annars Rekursion: 1 v[i 1,j]=1ellerv[i 1,j a i]=1 Algoritmen går i OMn). Eftersom indatas storlek är n och log M är detta inte en riktig polynomiell algoritm. Floyd-Warshalls algoritm I boken presenteras Bellman-Fords algoritm som ett exempel på en DynPalgoritm för beräkning av kortaste avstånd i grafer med negativa kantvikter. Givet en graf G = V,E) med vikter w ij på kanterna. Om v i,v j ) E är w ij =. Bestäm kortaste avstånden mellan varje par av hörn i G! Låt d[i, j, k] vara kortaste avståndet mellan v i och v j inskränkt till stigar där bara hörnen v 1,...,v k förekommer utöver v i och v j ). Då är d[i, j, 0] = w ij om i j och d[i, i, 0] = 0. Sedan gäller följande rekursionssamband: d[i, j, k] =min{d[i, j, k 1],d[i, k, k 1] + d[k, j, k 1]}

för k 1. De kortaste avstånden vi är ute efter svarar mot d[i, j, n] där n är antalet noder. Följande algoritm beräknar alla d-värden: Floyd-WarshallG = V,E, W ) 1) n dimw ) 2) for i 1 to n 3) for j 1 to n 4) d[i, j, 0] w ij 5) for k 1 to n 6) for i 1 to n 7) for j 1 to n 8) d[i, j, k] mind[i, j, k 1],d[i, k, k 1] + d[k, j, k 1]) 9) return d Algoritmen arbetar i tid O V 3 ). Det kan verka som om algoritmen på samma tid som Bellman-Fords algoritm klarar av att beräkna alla avstånd. Men lägg märke till att BF arbetar i tid O V E ) vilket för glesa grafer är mindre. Negativa cykler kan hittas genom att man testar om d[i, i, k] < 0 för några i, k. Multiplikation av flera matriser Följande algoritm beräknar det minimala antalet talmultiplikationer som krävs för att multiplicera ihop ett antal matriser av varierande storlek med varandra. Algoritmen har komplexiteten On 3 ) och bygger på dynamisk programmering. m[i, j] kommer att innehålla det minimala antalet multiplikationer som behövs för att räkna ut matrisprodukten M i M i+1 M j. Rekursionsekvationen för m[i, j] är: 0 om i = j m[i, j] = min i k<j m[i, k]+m[k +1,j]+ r[i 1]r[k]r[j]) om i < j 1. procedure OptimalMatmulvar m: matris; r: vektor; n: integer); 2. var i, j, k, t, len: integer; 3. begin 4. for i:= 1 to n do m[i,i]:= 0; 5. for len:= 1 to n-1 do 6. for i:= 1 to n-len do begin 7. j:= i+len; 8. m[i,j]:= m[i+1,j]+r[i-1]*r[i]*r[j]; 9. for k:= i+1 to j-1 do begin 10. t:= m[i,k]+m[k+1,j]+r[i-1]*r[k]*r[j]; 11. if t < m[i,j] then begin 12. m[i,j]:= t; 13. end; 14. end; 15. end; 16. end /* OptimalMatmul */;

Om vi har n stycken matriser M 1 M 2 M n där matris M i har dimension r[i 1] r[i] så beräknas det minimala antalet multiplikationer av anropet OptimalMatmulm, r, n). Svaret finns då i m[1,n].