Den grådige metode 2

Relaterede dokumenter
Løsningsforslag til skriftlig eksamen i Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Analyse af algoritmer. Algoritmedesign med internetanvendelser ved Keld Helsgaun. Køretid. Algoritmebegrebet D. E. Knuth (1968)

Kvadratisk 0-1 programmering. David Pisinger

DATV: Introduktion til optimering og operationsanalyse, Følsomhed af Knapsack Problemet

vejer (med fortegn). Det vil vi illustrere visuelt og geometrisk for (2 2)-matricer og (3 3)-matricer i enote 6.

Den hurtige Fouriertransformation. Jean Baptiste Joseph Fourier ( )

DATV: Introduktion til optimering og operationsanalyse, Bin Packing Problemet

Uge 37 opgaver. Opgave 1. Svar : Starter med at definere sup (M) og inf (M) :

Sprednings problemer. David Pisinger

Elementær Matematik. Polynomier

Motivation. En tegning

hvor i er observationsnummeret, som løber fra 1 til stikprøvestørrelsen n, X i

Matematik A. Studentereksamen. Forberedelsesmateriale. Forsøg med digitale eksamensopgaver med adgang til internettet.

Projekt 1.3 Brydningsloven

DATV: Introduktion til optimering og operationsanalyse, Følsomhed af Knapsack Problemet

Noter om kombinatorik, Kirsten Rosenkilde, februar Kombinatorik

Noter om kombinatorik, Kirsten Rosenkilde, februar Kombinatorik

Formelskrivning i Word 2. Sådan kommer du i gang 4. Eksempel med skrivning af brøker 5. Brøker skrevet med småt 6. Hævet og sænket skrift 6

Matematikkens mysterier - på et obligatorisk niveau. 7. Ligninger, polynomier og asymptoter

Kvantitative metoder 2

De reelle tal. Morten Grud Rasmussen 5. november Se Sætning 3.6 og 3.7 for forskellige formuleringer af egenskaben og dens negation.

Talfølger og -rækker

DATV: Introduktion til optimering og operationsanalyse. Asymmetric Traveling Salesman Problem

Lys og gitterligningen

Algoritmedesign Den grådige metode

antal gange krone sker i første n kast = n

Supplerende noter II til MM04

FUNKTIONER del 1 Funktionsbegrebet Lineære funktioner Eksponentialfunktioner Logaritmefunktioner Rentesregning Indekstal

Økonometri 1. Definition og motivation. Definition og motivation. Dagens program. Den multiple regressionsmodel 15. februar 2006

Den hurtige Fouriertransformation

9. Binomialfordelingen

Projekt 4.8 De reelle tal og 1. hovedsætning om kontinuerte funktioner

Renteformlen. Erik Vestergaard

Tankegangskompetence. Kapitel 9 Algebraiske strukturer i skolen 353

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

24. januar Epidemiologi og biostatistik. Forelæsning 1 Uge 1, tirsdag. Niels Trolle Andersen, Afdelingen for Biostatistik.

Diskrete og kontinuerte stokastiske variable

29. januar Epidemiologi og biostatistik Forelæsning 2 Uge 1, torsdag 2. februar 2006 Michael Væth, Afdeling for Biostatistik.

Sortering ved fletning (merge-sort)

Asymptotisk optimalitet af MLE

Branch-and-bound. Indhold. David Pisinger. Videregående algoritmik, DIKU ( )

Noter om Kombinatorik 2, Kirsten Rosenkilde, februar

Introduktion til uligheder

Definition: Normalfordelingen. siges at være normalfordelt med middelværdi µ og varians σ 2, hvor µ og σ er reelle tal og σ > 0.

Den flerdimensionale normalfordeling

Forslag til besvarelser af opgaver m.m. i ε-bogen, Matematik for lærerstuderende

Claus Munk. kap. 1-3

Dagens forelæsning. Claus Munk. kap Obligationer Grundlæggende Intro. Obligationer Grundlæggende Intro. Obligationer Grundlæggende Intro

Projekt 9.10 St. Petersborg paradokset

Projekt 2.3 Det gyldne snit og Fibonaccitallene

HASTIGHEDSKORT FOR DANMARK VHA. GPS

Praktisk info. Statistisk analyse af en enkelt stikprøve: kendt eller ukendt varians Sandsynlighedsregning og Statistik (SaSt) I tirsdags.

Statistik Lektion 7. Hypotesetest og kritiske værdier Type I og Type II fejl Styrken af en test Sammenligning af to populationer

Noter om polynomier, Kirsten Rosenkilde, Marts Polynomier

Introduktion til optimering og operationsanalyse. Asymmetric Traveling Salesman Problem

Gamle eksamensopgaver. Diskret Matematik med Anvendelser (DM72) & Diskrete Strukturer(DM504)

Dynamisk programmering. Flere eksempler

Vejledende besvarelser til opgaver i kapitel 15

Georg Mohr Konkurrencen Noter om uligheder. Søren Galatius Smith

og Fermats lille sætning

Sandsynlighedsteori 1.2 og 2 Uge 5.

Et træ med x blade.. h lg(x) DVS. decision-træet vil en maks højde på lg n! blade. lg(n!) >= n*lg(n) -1.5n = Ө(n*lg(n))

13. februar Resumé: En statistisk analyse resulterer ofte i : Et estimat ˆ θ med en tilhørende se( ˆ θ )

cos(t), v(t) = , w(t) = e t, z(t) = e t.

Statistik ved Bachelor-uddannelsen i folkesundhedsvidenskab

Længde [cm] Der er frit vandspejle i sandkassen. Herudover er sandkassen åben i højden cm i venstresiden og 0-20 cm i højresiden.

Simpel Lineær Regression. Opsplitning af variationen Determinations koefficient Variansanalyse F-test Model-kontrol

Økonometri 1. Inferens i den lineære regressionsmodel 29. september Økonometri 1: F7 1

Branchevejledning. ulykker indenfor. lager. området. Branchearbejdsmiljørådet for transport og engros

Introduktion til uligheder

Bjørn Grøn. Analysens grundlag

Facilitering ITU 15. maj 2012

Sandsynlighedsregning i biologi

Estimation og test i normalfordelingen

Begreber og definitioner

Meningsmålinger KLADDE. Thomas Heide-Jørgensen, Rosborg Gymnasium & HF, 2017

Bilag 5: DEA-modellen Bilaget indeholder en teknisk beskrivelse af DEA-modellen

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Dynamisk programmering. Flere eksempler

x-klasserne Gammel Hellerup Gymnasium

og Fermats lille Projekt 0.4 Modulo-regning, restklassegrupperne sætning ..., 44, 20,4,28,52,... Hvad er matematik? 3 ISBN

1 Punkt- og intervalestimation Punktestimatorer: Centralitet(bias) og efficiens... 2

Dagens program. Estimation: Kapitel Eksempler på middelrette og/eller konsistente estimator (de sidste fra sidste forelæsning)

Termodynamik. Indhold. Termodynamik. Første og anden hovedsætning 1/18

Sætning: Middelværdi og varians for linearkombinationer. Lad X 1,X 2,...,X n være stokastiske variable. Da gælder. Var ( a 0 + a 1 X a n X n

30. august Epidemiologi og biostatistik. Forelæsning 3 Uge 2, torsdag d. 8. september 2005 Michael Væth, Afdeling for Biostatistik.

Undersøgelse af numeriske modeller

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Algoritmer og Datastrukturer 2. Gerth Stølting Brodal

Baggrundsnote til sandsynlighedsregning

Prisfastsættelse af digitale goder - Microsoft

- et værktøj til fejlrettende QR-koder. Projekt 0.3 Galois-legemerne. Indhold. Hvad er matematik? A, i-bog

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

MOGENS ODDERSHEDE LARSEN. Fourieranalyse

Finitisme og Konstruktivisme. 22. November 2010

RESEARCH PAPER. Nr. 2, En model for lagerstørrelsen som determinant for købs- og brugsadfærden for et kortvarigt forbrugsgode.

Analyse 1, Prøve maj 2009

Beregning af prisindeks for ejendomssalg

Statistik Lektion 8. Parrede test Test for forskel i andele Test for ens varians Gensyn med flyskræk!

Test i to populationer. Hypotesetest for parrede observationer Test for ens varians Gensyn med flyskræk!

Transkript:

Algoritmedesig 1

De grådige metode

De grådige metode Et problem løses ved at foretage e række beslutiger Beslutigere træffes e ad gage i e eller ade rækkefølge Hver beslutig er baseret på et grådighedskriterium Når e beslutig er truffet, ædres de (sædvaligvis) ikke seere 3

De grådige metode De grådige metode er et geerelt paradigme til algoritmedesig, der bygger på følgede to elemeter: Kofiguratioer: forskellige sæt af værdier, der skal fides Objektfuktio: e score kyttet til kofiguratioere, som vi øsker at maksimere eller miimere Metode virker bedst, år de avedes på problemer, der har grådigt-valg-egeskabe: E globalt optimal løsig ka altid fides ved e række lokale forbedriger ud fra e startkofiguratio 4

Møtvekslig Problem: Et beløb, der skal opås, og e samlig møter, der ka bruges for at opå dette beløb Kofiguratio: Det beløb, der edu magler at blive givet til kude, plus de møter, der allerede er givet Objektfuktio: Atallet af møter (skal miimeres) Grådig metode: Beyt altid de størst mulige møt Eksempel 1: Møtere er 1, 5, 10 og 5 cet Har grådigt-valg-egeskabe. Itet beløb over 5 cet ka opås med et miimalt atal møter ude brug af 5-cet møte (tilsvarede for beløb uder 5 cet, me over 10 cet, og beløb uder 10 cet me, over 5 cet) Eksempel : Møtere er 1, 5, 10, 1 og 5 cet Har ikke grådigt-valg-egeskabe. Beløbet 4 cet opås bedst med to 1 cet møter, me de grådige algoritme giver e løsig med 5 møter (hvilke?) 5

Det fraktioelle rygsækproblem Givet: E mægde S af emer, hvor hvert eme i har b i - e positiv ytteværdi (beefit) w i - e positiv vægt (weight) Mål: Vælg emer med maksimal samlet ytteværdi, me med samlet vægt på højst W Hvis det er muligt at tage vilkårlige brøkdele af emere, er der tale om det fraktioelle rygsækproblem Lad x i betege de mægde, vi tager af emet i (0 x i w i ) Mål: Maksimer Begræsig:! i"s! i" S b ( x / w ) i i x i # W i 6

Eksempel Emer: Vægt: Nytteværdi: Værdi: 3 (kr per ml) 1 3 4 5 4 ml 8 ml ml 6 ml 1 ml 1 kr 3 kr 40 kr 30 kr 50 kr 4 0 5 50 10 ml rygsæk Løsig: 1 ml af 5 ml af 3 6 ml af 4 1 ml af 7

Algoritme for det fraktioelle rygsækproblem Grådigt valg: Tag altid det eme, der har størst værdi (forholdet imellem ytteværdi og vægt)! i" S! b ( x / w ) = ( b / w ) x i i i i" S Køretid: O( log ). Hvorfor? Korrekthed: Atag, at der e bedre løsig, d.v.s. der fides et eme i med højere værdi ed et valgt eme j (x j > 0 og v i > v j ), me hvor x i < w i. Hvis vi erstatter oget af j med oget af i, ka vi opå e bedre løsig. Hvor meget af eme i ka vi erstatte ude at ædre de samlede vægt? Svar: mi{w i -x i, x j } i i i Algorithm fractioalkapsack(s, W) Iput: set S of items with beefit b i ad weight w i ; max. weight W Output: amout x i of each item i to maximize beefit with weight at most W for each item i i S do x i 0 v i b i / w i {value} w 0 {total weight} while w < W do remove item i with highest v i x i mi{w i, W - w} w w + x i 8

Plalægig af opgaver Givet: e mægde T af opgaver (tasks), der hver har et starttidspukt, s i et sluttidspukt, f i (hvor s i < f i ) Mål: Udfør alle opgavere ved brug af så få maskier som muligt Maskie 3 Maskie Maskie 1 1 3 4 5 6 7 8 9 9

Algoritme til opgaveplalægig Grådigt valg: ord opgavere efter deres starttidspukt og brug så få maskier som muligt med dee rækkefølge Køretid: O( log ). Hvorfor? Korrekthed: Atag, at der fides e bedre pla, d.v.s. algoritme fider e løsig med m maskier, me der fides e løsig med m-1 maskier. Lad m være de sidste maskie, der allokeres af algoritme, og lad i være de første opgave, der udføres på dee maskie. Opgave i må være i koflikt med m-1 adre opgaver. Der fides derfor ige pla med ku m-1 maskier. Algorithm taskschedule(t) Iput: set T of tasks with start time s i ad fiish time f i Output: o-coflictig schedule with miimum umber of machies m 0 {o. of machies} while T is ot empty do remove task i with smallest s i if there s a machie j for i the schedule i o machie j else m m + 1 schedule i o machie m 10

Eksempel Givet: e mægde T af opgaver (tasks), der hver har et starttidspukt, s i et sluttidspukt, f i (hvor s i < f i ) [1,4], [1,3], [,5], [3,7], [4,7], [6,9], [7,8] (ordet efter starttidspukt) Mål: Udfør alle opgavere ved brug af så få maskier som muligt Maskie 3 Maskie Maskie 1 1 3 4 5 6 7 8 9 11

Del-og-hersk 7 9 4 4 7 9 7 7 9 4 4 9 7 7 9 9 4 4 1

Del-og-hersk Del-og-hersk er et geerelt paradigme til algoritmedesig Del: opdel iddata S i to eller flere disjukte delmægder, S 1, S,... Løs: løs delproblemere rekursivt Hersk: kombier løsigere for S 1, S,... til e løsig for S Basistilfældet for rekursioe er delproblemer af tilpas lille størrelse Aalyse ka foretages ved hjælp af rekursiosligiger 13

Merge-sort (tilbageblik) Merge-sort på e iput-sekves S med elemeter består at tre tri: Del: opdel S i to sekveser, S 1 og S, hver med cirka / elemeter Løs: sorter rekursivt S 1 og S Hersk: flet S 1 og S til e sorteret sekves Algorithm mergesort(s, C) Iput sequece S with elemets, comparator C Output sequece S sorted accordig to C if S.size() > 1 (S 1, S ) partitio(s, /) mergesort(s 1, C) mergesort(s, C) S merge(s 1, S ) 14

Aalyse med rekursiosligiger Hersk-triet i merge-sort består i fletig af to sorterede sekveser, hver med / elemeter Hvis der beyttes e hægtet liste, ka det gøres med højst b skridt for e kostat værdi b Basistilfældet bruger højst b skridt Hvis T() beteger køretide for merge-sort, har vi: T() = " b hvis < # $ T( /) + b hvis! Vi ka derfor aalysere køretide for merge-sort ved at fide e løsig på lukket form for dee ligig (d.v.s. e løsig, hvor T() ku forekommer på vestre side af lighedsteget) 15

Iterativ substitutio Ved tekikke iterativ substitutio aveder vi getage gage rekursiosligige på sig selv for at fide et møster: T() = T( /) +b = (T( / ) + b( /)) + b = T( / ) + b = 3 T( / 3 ) + 3b = 4 T( / 4 ) + 4b =... = i T( / i ) + ib Basistilfældet idtræffer, år i =, d.v.s. i = log T ( ) = b + b log Vi ka derfor kokludere, at T() er O( log ) 16

Rekursiostræ Teg rekursiostræet for rekursiosligige og led efter et møster: " b hvis < T() = # $ T( /) + b hvis! dybde kald størrelse tid 0 1 b 1 / b i i / i b Samlet tid = b + b log (sidste iveau plus alle foregåede iveauer ) 17

Gæt-og-test-metode Ved gæt og test-metode gætter vi på e lukket form og prøver at bevise, at de er sad ved hjælp af iduktio: T() = Gæt: T() < c log " b hvis < # $ T( /) + blog hvis! T () = T ( / ) +blog < (c( / )log( / )) + blog = c(log! log ) + b log = clog! c + blog Forkert: vi ka ikke vise, at udtrykket i de sidste lije er midre ed c log 18

Gæt-og-test-metode (del ) T() = " b hvis < # $ T( /) + blog hvis! Gæt : T() < c log T () = T ( / ) +b log Så T() er O( log ) < (c( / )log ( / )) + b log = c(log! log ) + b log = c log! c log + c + b log " c log hvis c > b For at bruge dee metode skal ma være god til at gætte og god til at føre iduktiosbeviser 19

Mestermetode Mage del-og-hersk rekursiosligiger har forme " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d 0

Mestermetode, eksempel 1 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = 4T ( / ) + Løsig: log b a =. Tilfælde 1 siger, at T() er Θ( ) 1

Mestermetode, eksempel Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = T ( / ) + log Løsig: log b a = 1. Tilfælde siger, at T() er Θ( log )

Mestermetode, eksempel 3 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = T ( / 3) + log Løsig: log b a = 0. Tilfælde 3 siger, at T() er Θ( log ) 3

Mestermetode, eksempel 4 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = 8T ( / ) + Løsig: log b a = 3. Tilfælde 1 siger, at T() is Θ( 3 ) 4

Mestermetode, eksempel 5 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = 9T ( / 3) + 3 Løsig: log b a = 3. Tilfælde 3 siger, at T() is Θ( 3 ) 5

Mestermetode, eksempel 6 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = T ( / ) + 1 (biær søgig) Løsig: log b a = 0. Tilfælde siger, at T() is Θ(log ) 6

Mestermetode, eksempel 7 Form " c hvis < d T() = # $ at( /b) + f () hvis! d Mestersætige: 1. f () er O( log b a!" ) # T() er $( log b a ). f () er $( log b a log k ) # T() er $( log b a log k +1 ) 3. f () er %( log b a +" ) # T() er $( f ()) forudsat &' <1: af ( /b) ( 'f () for ) d Eksempel: T ( ) = T ( / ) + log (hob-kostruktio) Løsig: log b a = 1. Tilfælde 1 siger, at T() is Θ() 7

8 Iterativt bevis for mestersætige Ved hjælp af iterativ substitutio fides et møster:!! " = " = + = + = = + + + = + + = + + = + = 1 ) (log 0 log 1 ) (log 0 log 3 3 ) / ( (1) ) / ( (1)... ) ( ) / ( ) / ( ) / ( ) ( ) / ( ) / ( )) / ( )) / ( ( ) ( ) / ( ) ( i i i a i i i b b b b b f a T b f a T a f b af b f a b T a f b af b T a b b f b at a f b at T Vi skeler imellem tre tilfælde: 1. Det første led i summe er domierede. Ledee i summatioe er lige domierede 3. Summatioe er e kvotietrække

9 Heltalsmultiplikatio Algoritme: Multiplicer to -bit heltal I og J Opdelig: Opsplit I og J i højordes- og lavordes-bits: l h l h J J J I I I + = + = / / l l h l l h h h l h l h J I J I J I J I J J I I J I + + + = + + = / / / / ) )*( ( * Vi ka så bestemme I*J ved at multiplicere delee og addere: T() = 4T(/) + c, hvilket medfører, at T() er Θ( ) Me det er ikke bedre ed de algoritme, vi lærte i skole I h I l J h J l

30 Forbedret algoritme Algoritme: Multiplicer to -bit heltal I og J Opdelig: Opsplit I og J i højordes- og lavordes-bits: J h J l J + = / l I h I I + = / l l h l l h h h l l l l h h h l h h l l l h h h l l l l h h h l l h h h J I J I J I J I J I J I J I J I J I J I J I J I J I J I J I J J I I J I J I + + + = + + + +!! + = + + +!! + = / / / ) ( ] ) [( ] ) )( [( * Der fides e ade måde at multiplicere delee: T() = 3T(/) + c, hvilket medfører, at T() er Θ( ) T() er Θ( 1.585 ) log 3 Med FFT ka opås e Θ( log ) algoritme I h I l J h J l

Dyamisk programmmerig 31

Dyamisk programmerig Del-og-hersk (top-til-bud, top-dow): For at løse et stort problem deles problemet op i midre delproblemer, der løses uafhægigt af hiade Dyamisk programmerig (bud-til-top, bottom-up): For at løse et stort problem løses alle midre delproblemer, og deres løsiger gemmes og beyttes til at løse større problemer. Således fortsættes, idtil problemet er løst Betegelse stammer fra operatiosaalyse, hvor programmerig beyttes om formulerig af et problem, således at e bestemt metode ka avedes 3

Modere defiitio Dyamisk programmerig: Bud-til-top implemeterig af rekursive programmer med overlappede delproblemer Top-til-bud implemeterig er dog også mulig Dyamisk programmerig er baseret på følgede simple pricip: Udgå at getage beregiger 33

Beregig af Fiboacci-tal (Fiboacci, 10) F() = F(-1) + F(-) for >= F(0) = 0 F(1) = 1 0 0 10 55 0 6765 1 1 11 89 1 10946 1 1 144 17711 3 13 33 3 8657 4 3 14 377 4 46368 5 5 15 610 5 7505 6 8 16 987 6 11393 7 13 17 1597 7 196418 8 1 18 584 8 317811 9 34 19 4181 9 5149 Talrække vokser ekspoetielt: F()/F(-1) går imod 1.618... (det gylde sit = (1+ 5)/) 34

Top-til-bud-tilgag it F(it ) { } retur <= 1? : F(-1) + F(-); Simpel, me meget ieffektiv Atallet af kald, C(), tilfredsstiller rekursiosligigere C() = C(-1) + C(-) + 1, C(1) = C(0) = 1 som har løsige C() = F(+) + F(-1) - 1. C() er altså større ed det Fiboacci-tal, der skal bereges! Ieffektivitete skyldes, at de samme delproblemer løses mage gage F.eks. F(9) = F(8) + F(7) = F(7) + F(6) + F(7) = F(6) + F(5) + F(6) + F(6) + F(5) 35

Udgå geberegiger (beyt cachig ) Vedligehold e tabel (idiceret ved parameterværdie) ideholdede * 0, hvis de rekursive metode edu ikke er kaldt med dee parameterværdi * ellers det resultat, der skal retureres Første kald af metode for e give parameterværdi: bereg som før, me gem desude resultatet Efterfølgede kald med samme parameterværdi: returer resultatet fra det første kald it F(it ) { if (Fkow[]!= 0) retur Fkow[]; it r = <= 1? : F(-1) + F(-); Fkow[] = r; retur r; } 36

Effektivitetsforbedrig 1 1 1 0 Simpel rekursiv metode: F(9) 8 13 5 3 3 3 1 1 1 1 1 1 1 1 1 0 1 0 1 0 Husk kedte resultater: 1 1 1 5 1 0 3 1 1 1 0 1 3 1 5 1 1 1 0 8 1 13 5 1 3 34 34 5 8 1 1 1 0 8 3 13 13 8 5 5 3 3 1 3 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 0 Køretid: ekspoetiel Køretid: lieær 37

Bud-til-top-tilgag Dyamisk programmerig (traditioel): * Tabellæg løsigere til delproblemere * Opbyg tabelle i stigede orde af problemstørrelse * Beyt gemte løsiger til at bestemme ye løsiger Eksempel: Dyamisk programmerig til beregig af Fiboacci-tal: F[0] = 0; F[1] = 1; for (i = ; i <= ; i++) F[i] = F[i-1] + F[i-]; Tidsforbruget er lieært 38

Optimal møtvekslig Udbetal et beløb i møter, således at atallet af møter er miimalt Eksempel: Hvis beløbet skal udbetales i amerikaske cets, ka møtere 1-, 5-, 10- og 5-cet beyttes Vekslig af 63 cets ka da foretages med 6 møter, emlig to 5-cet, e 10-cet og tre 1-cet For disse møter vil e grådig algoritme altid give e optimal løsig Me hvis der idføres e 1-cet-møt, virker dee metode ikke 39

Top-til-bud-løsig Bereg for hver møt det miimale atal møter, der ka beyttes til at veksle det resterede beløb. Tag miimum it[] cois = {1, 5, 10, 1, 5}; it makechage(it chage) { if (chage == 0) retur 0; it mi = Iteger.MAX_VALUE; for (it i = 0; i < cois.legth; i++) if (chage >= cois[i]) mi = Math.mi(mi, 1 + makechage(chage - cois[i])); retur mi; } Beyt ikke dee algoritme! Ekspoetielt tidsforbrug. Udgå geberegiger. 40

Gebrug kedte løsiger it makechage(it chage) { if (chage <= 0) retur 0; if (mikow[chage] > 0) retur mikow[chage]; it mi = Iteger.MAX_VALUE; for (it i = 0; i < cois.legth; i++) if (chage >= cois[i]) mi = Math.mi(mi, 1 + makechage(chage - cois[i])); mikow[chage] = mi; retur mi; } 41

Udskrivig af møtere i e optimal vekslig Gem i e tabel, lastcoi, for ethvert beløb de sidst valgte møt i e optimal vekslig af beløbet while (chage > 0) { System.out.pritl(lastCoi[chage]); chage -= lastcoi[chage]; } 4

it makechage(it chage) { if (chage <= 0) retur 0; if (mikow[chage] > 0) retur mikow[chage]; it mi = Iteger.MAX_VALUE, micoi = 0; for (it i = 0; i < cois.legth; i++) if (chage >= cois[i]) { it m = 1 + makechage(chage - cois[i]); if (m < mi) { mi = m; micoi = cois[i]; } } lastcoi[chage] = micoi; mikow[chage] = mi; retur mi; } 43

Bud-til-top-løsig (ude rekursio) Brug fude løsiger til at bestemme de æste løsig it makechage(it chage) { mikow[0] = 0; for (it c = 1; c <= chage; c++) { it mi = Iteger.MAX_VALUE; for (it i = 0; i < cois.legth; i++) if (c >= cois[i]) } mi = Math.mi(mi, 1 + mikow[chage - cois[i]]); mikow[c] = mi; } retur mikow[chage]; Køretide er proportioal med chage*cois.legth 44

Matrix-kædeprodukter Dyamisk programmerig er et geerelt paradigme til algoritmedesig f Matrixmultiplikatio: C = A*B A er d x e, og B er e x f C[ i, 1 " j] =! k= Køretide er O(def ) e 0 A[ i, k]* B[ k, j] e e B j d A i C i,j d f 45

Matrix-kædeprodukter Matrix-kædeprodukt: Bereg A = A 0 *A 1 * *A -1 A i er d i x d i+1 Problem: Hvor skal paretesere placeres? Eksempel: B er 3 x 100 C er 100 x 5 D er 5 x 5 (B*C)*D bruger 1500 + 75 = 1575 multiplikatioer B*(C*D) bruger 1500 + 500 = 4000 multiplikatioer 46

Et større eksempel A er e 13 x 5 matrix B er e 5 x 89 matrix C er e 89 x 3 matrix D er e 3 x 34 matrix ((AB)C)D : AB : 13*5*89 = 5785 multiplikatioer (AB)C : 13*89*3 = 3471 multiplikatioer ((AB)C)D : 13*3*34 = 136 multiplikatioer i alt 1058 multiplikatioer Nogle adre muligheder: (AB)(CD) : 5401 multiplikatioer A((BC)D) : 4055 multiplikatioer A(B(CD)) : 6418 multiplikatioer (A(BC))D : 856 multiplikatioer (optimum) 47

E opregede metode Matrix-kædeprodukt algoritme: Prøv alle mulig måder at sætte pareteser i A 0 *A 1 * *A -1 Bereg atallet af operatioer for hver mulighed Vælg de, der er bedst Køretid: Atallet af muligheder er lig med atallet af biære træer med kuder Dette tal vokser ekspoetielt! Det kaldes for det catalaske tal og er æste 4 (Ω(4 / 3/ )) Dette er er e rædselsfuld algoritme! 48

E grådig metode Ide 1: Vælg produktere et ad gage. Vælg altid det produkt, der (for)bruger flest multiplikatioer Modeksempel: A er 10 x 5 B er 5 x 10 C er 10 x 5 D er 5 x 10 Ide 1 giver (A*B)*(C*D), som bruger 500+1000+500 = 000 multiplikatioer Me A*((B*C)*D) bruger færre, emlig 500+50+50 = 1000 multiplikatioer 49

E ade grådig metode Ide : Vælg produktere et ad gage. Vælg altid det produkt, der kræver færrest multiplikatioer Modeksempel: A is 101 x 11 B is 11 x 9 C is 9 x 100 D is 100 x 99 Ide giver A*((B*C)*D), som bruger 109989+9900+108900=8789 multiplikatioer Me (A*B)*(C*D) bruger færre, emlig 9999+89991+89100=189090 multiplikatioer 50

E rekursiv metode Defier delproblemer: Fid de bedste paretesplacerig for A i *A i+1 * *A j Lad N i,j betege atallet af multiplikatioer, der foretages for dette delproblem Det miimale atal multiplikatioer for hele problemet er N 0,-1 Optimalitet af delproblemer: De optimale løsig ka defieres i termer af optimale delproblemer Der må ødvedigvis være e sidste multiplikatio for de optimale løsig (rod i udtrykstræet) Atag at det sidste produkt sker ved ideks i: (A 0 * *A i )*(A i+1 * *A -1 ) Da er de optimale løsig N 0,-1 lig med summe af N 0,i og N i+1,-1, plus atal multiplikatioer for de sidste matrixmultiplikatio 51

E karakteriserede ligig Det globale optimum må være defieret i termer af optimale delproblemer, der afhæger af, hvor de sidste multiplikatio foretages Prøv alle mulige placeriger for de sidste multiplikatio: Der mides om, at A i er e d i x d i+1 matrix E karakteriserede ligig for N i,j er: N i, j = mi i!k< j {N i,k + N k +1, j + d i d k +1 d j +1 } Bemærk, at delproblemere ikke er uafhægige - delproblemere overlapper 5

E dyamisk programmerigsalgoritme Da delproblemere overlapper, bruger vi ikke rekursio I stedet for kostrueres e optimal løsig bottom-up Værdiere N i,i er lette at bestemme, så dem starter vi med Så bereges værdier for delproblemer med lægde, 3,... o.s.v Køretid: O( 3 ) Algorithm matrixchai(s): Iput: sequece S of matrices to be multiplied Output: umber of operatios i a optimal paraethizatio of S for i 1 to -1 do N i,i 0 for b 1 to -1 do for i 0 to -b-1 do j i+b N i,j +ifiity for k i to j-1 do N i,j mi{n i,j, N i,k +N k+1,j +d i d k+1 d j+1 } 53

Visualiserig af algoritme N i, j = mi{n i,k + N k +1, j + d i d k +1 d j +1 } i!k< j Arrayet N fyldes diagoalvis N 0 1 j -1 svar N i,j får værdi fra tidligere idgage i de i te række og j te søjle 0 1 Beregig af hvert elemet i tabelle tager O() tid i? Køretid: O( 3 ) De fude paretesplacerig ka gøres tilgægelig ved at huske k s værdi for hvert elemet i N -1 b = b = 1 54

De geerelle tekik til dyamisk programmerig Avedes på et problem, der først syes at kræve e masse tid (muligvis ekspoetiel), forudsat at vi har Simple delproblemer: delproblemer ka defieres i termer af få variable, såsom i, j, k, l, m o.s.v. Delproblem-optimalitet: det globale optimum ka defieres i termer af optimale delproblemer Delproblem-overlap: delproblemere er ikke uafhægige, me overlapper (og skal derfor kostrueres bottom-up ) 55

0-1-rygsækproblemet Givet: E mægde S af emer, hvor hvert eme har b i - e positiv ytteværdi (beefit) w i - e positiv vægt (weight) Mål: Vælg emer med maksimal samlet ytteværdi, me med samlet vægt på højst W Hvis det ikke er muligt at tage vilkårlige brøkdele af emere, er der tale om 0-1-rygsækproblemet Lad T betege mægde af de emer, vi vælger Mål: Maksimer Begræsig: " b i i!t # i"t w i! W 56

Eksempel Givet: E mægde S af emer, hvor hvert eme har b i - e positiv ytteværdi (beefit) w i - e positiv vægt (weight) Mål: Vælg emer med maksimal samlet ytteværdi, me med samlet vægt på højst W rygsæk Emer: Vægt: Nytteværdi: 1 3 4 5 8 cm 4 cm 4 cm 1 cm 4 cm 0 kr 3 kr 6 kr 5 kr 80 kr 18 cm Løsig: 5 (4 cm) 3 (4 cm) 1 (8 cm) 57

E algoritme (første forsøg) Lad S k være mægde af de emer i S, der er ummereret fra 1 til k Defier B[k] = værdi af bedste delmægde af S k Der er ikke delproblem-optimalitet: Betragt S={(3,), (5,4), (8,5), (4,3), (10,9)} vægt-ytteværdi par Bedste for S 4 : Bedste for S 5 : 6 58

E algoritme (adet forsøg) Lad S k være mægde af de emer i S, der er ummereret fra 1 til k Defier B[k,w] = værdi af bedste delmægde af S k med vægt w Der er delproblem-optimalitet De bedste delmægde af S k med vægt w er ete de bedste delmægde af S k-1 med vægt w, eller de bedste delmægde af S k-1 med vægt w-w k, plus emet k: B[k,w] = " B[k!1,w] # $ max{b[k!1,w], B[k!1,w! w k ] + b k } hvis w k > w ellers 59

Algoritme for 0-1-rygsækproblemet " B[k!1,w] B[k,w] = # $ max{b[k!1,w], B[k!1,w! w k ] + b k } hvis w k > w ellers Da B[k,w] er defieret i termer af B[k-1,*], ka vi bruge et edimesioalt array Køretid: O(W) Er ikke e polyomiel algoritme, hvis W er stor Der er tale om e såkaldt pseudopolyomiel algoritme Algorithm 01Kapsack(S, W): Iput: set S of items w/ beefit b i ad weight w i ; max. weight W Output: beefit of best subset with weight at most W for w 0 to W do B[w] 0 Fejl i læreboge for k 1 to do for w w k to W do B[w] = max{b[w], B[w-w k ]+b k } 60

Desigtekikker 61

Del-og-hersk problem af størrelse delproblem 1 af størrelse / delproblem af størrelse / løsig af delproblem 1 løsig af delproblem løsig af det opridelige problem 6

Formidsk-og-hersk problem af størrelse delproblem af størrelse - 1 løsig af delproblem løsig af det opridelige problem 63

Trasformer-og-hersk problem trasformeret problem løsig af det trasformerede problem løsig af det opridelige problem 64