Øvingsforelesning 10 Grådighet

Slides:



Advertisements
Liknende presentasjoner
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Advertisements

The Travelling Salesperson. LOG530 Distribusjonsplanlegging 2 2 Et forsyningsskip skal starte fra VestBase for å betjene 10 forskjellig installasjoner.
Gruppe 6 Gunnar Henrik Mathias Morten Ronny Svein Ivar.
Komplett avstandstabell. LOG530 Distribusjonsplanlegging 2 2 Noen ganger er det behov for en komplett avstandstabell mellom alle nodene i et nettverk.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
Memoisering og dynamisk programmering
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Introduksjon til memoisering og dynamisk programmering Åsmund Eldhuset asmunde *at*
Eksempel AOA (Activity On Arc)
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Kompleksitetsanalyse
Øvingsforelesning 12 Redusering av problemer,
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
Om Øvelse 7 Stoff relatert til øvelse 7 Generering av tilfeldige tall Bruk ting vi har lært før.
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Minimal Spanning Tree. LOG530 Distribusjonsplanlegging 2 2 Nettverket viser avstanden mellom 8 noder, der nodene A – G beskriver oljefelt som skal knyttes.
Lokalisering og minimum maxavstand. LOG530 Distribusjonsplanlegging 2 2 I mange situasjoner ønsker en å finne lokaliseringer som minimerer maksimalavstanden.
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Klargjøring fra forrige gang
Kapittel 11 Rekursjon Å tenke rekursivt Rekursjon er ein programmeringsteknikk der ein metode kallar seg sjølv for å fullføre ei oppgåve For å kunne.
Algoritmer og Datastrukturer
Kap 10 Graf.
Design patterns: State og Strategy
Dynamisk programmering
INF 295 Algoritmer og datastrukturer Forelesning 1 - kapittel 1 Introduksjon Hans F. Nordhaug (Ola Bø) (Ketil Danielsen, 2007)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 17 - kap 9 Korteste vei i grafer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 18 - kap 9 Aktivitetsgrafer
INF 295 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Hovedfagspresentasjon
INF 4130 Eksamen 2008 Gjennomgang.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Magnus Haug Algoritmer og Datastrukturer
INF2820 Datalingvistikk – V2012
De 222 mest brukte ordene i det norske språket..
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
Designing a DHT for low latency and high through TDT2 – Avanserte distribuerte systemer Øystein Ellingbø.
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Forside Intro Fibonacci-tall Memoisering DP Longest increasing subsequence Betingelser Matrise- multiplikasjon Longest common subsequence Grådig vs. DP.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
1 INF oktober 2010 Stein Krogdahl Foreløpige foiler Dagens program: –Første time: Kap 23.5: Trær og strategier for spill med to spillere –Andre.
Kombinatorikk og sannsynlighet
UFLP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
Lokalisering og max minimumavstand. LOG530 Distribusjonsplanlegging 2 2 Anta at nettverket angir en region hvor McBurger skal opprettes 3 konkurrerende.
5702 Geografisk analyse Nettverksanalyse. Evaluering av nettverksstruktur Nettverksdiameter Diameteren på et nettverk representerer maksimum antall.
Memoisering og dynamisk programmering Magnus Botnan botnan at stud.ntnu.no 23/
Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Programmering i Python.
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
Sudoku Mål: Lage et enkelt system som løser Sudoku-oppgaver.
Desimaltall.
Brøk Regneartene.
MAT0100V Sannsynlighetsregning og kombinatorikk
TDT4105 Informasjonsteknologi, grunnkurs
Øvingsforelesning i Python (TDT4110)
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
Velkommen til Newton-rommet
Eric Jul PSE, Inst. for informatikk
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
For, While, prosedyrer m/ parametere, funskjoner
Utskrift av presentasjonen:

Øvingsforelesning 10 Grådighet Benjamin Bjørnseth

Program Denne ukens øving Grådighet Forrige ukes øving

Øving 10 - Teori Oppgave 1 - Generelt Oppgave 2 - Antall veier Bruk DP - rekursjon Oppgave 3 - 0-1-ryggsekk God idé å bruke DP for de store problemene Kort øving denne gangen!

Øving 10 - Praksis Det jobbes med en å lage en ny øving Enten blir den lagt ut snart, eller så fremskyndes en annen øving

Program - Grådighet Grådighet vs DP Hvordan bevise grådighet Huffman-koding Eksempler

Grådighet vs DP For å bruke DP har problemer (gjerne) Optimal substruktur Overlappende delproblemer For å bruke en grådig algoritme har problemer (gjerne) 'Grådig valg'-egenskapen DP - sjekk konsekvensene av alle valg Gir overlappende delproblemer Grådig algoritme - ta det som ser best ut Trenger 'grådig valg'-egenskapen

Eksempel - Korteste vei Kan bruke dynamisk programmering d[t, i] = min { d[x, i-1] + w(x, t) } Sjekker vekt for alle veilengdebeskrankninger og alle forgjengernoder 'Relax'er en kant |V| - 1 ganger Kan vi tillate oss å være grådige? Grådig mhp i: Kjør 'Relax' kun fra noder vi kjenner korteste vei til => Dijkstra! Kan ikke være grådige mhp valg av forgjengernode. Hva med veilengde? Tja... er jo bare interessert i å regne ut rekursjonen når forgjengernoden har fått korteste vei! Kan dog ikke bruke rekursjonen direkte ved å fjerne i - men kan sørge for å kun relaksere fra noder vi kjenner korteste vei til!

DP - oppfriskning Beskriv optimal substruktur Beskriv rekursiv løsning Beskriv løsning i å bestå av å ta et valg Anta at valget som gir optimal løsning er gitt Vis at etter valget har vi nye delproblem å løse Bevis at disse må løses optimalt Beskriv rekursiv løsning Beregn optimal løsningsverdi Eventuelt: finn optimal løsning

Grådig algoritme Beskriv løsning i å bestå av å ta et valg Bevis at et grådig valg er trygt Bevis optimal substruktur Bruk rekursjonen direkte for å beregne løsning

Eksempel: Matstasjonsbesøk Skal gå på ski fra a til b Langs veien er det n matstasjoner, angitt av distanse langs løypa Vi kan gå m kilometer før vi trenger mat Må ha spist før vi har gått m kilometer Er aldri mer enn m kilometer mellom to stasjoner Hvor burde vi stoppe? ... a 1 2 n-2 n-1 b 5 7 15

Terminologi Problem: Hva er færrest antall stopp ved matstasjoner {0, ..., n-1}? n - Antall matstasjoner s[i, l] - Færrest antall stopp ved matstasjoner {0, ..., i-1}, når det er l kilometer til neste stopp s[0] - Start, s[n] - siste målstasjon d[i] - Avstand mellom matstasjon i og i - 1 d[n] - Avstand mellom mål og siste matstasjon d[0] - Avstand mellom start og første matstasjon i-1 i ... => d[i] = 17 - 8 = 9 8 17

Matstasjoner - Dynamisk programmering Beskriv optimal substruktur Valg: Skal vi stoppe i matstasjon i-1 med l kilometer til neste stopp? Valg gitt x = 0: Stopper x = 1: Stopper ikke Løsning er nå x Antall stopp i matstasjoner {0, ..., i-2}, gitt valget x Antall stopp i matstasjoner i-1 med d[i] + l*x kilometer til neste stopp må være optimalt

Matstasjoner - Dynamisk programmering Rekursjon 0 , i = 0 ∞ , l > m s[i, l] = s[i-1, l + d[i-1]], s[i-1, d[i-1]] +1 , ellers min

Matstasjoner - Dynamisk programmering Beregn løsning Bruk rekursjon for hver matstasjon for hver mulige l

Matstasjoner - Grådig Beskriv valg Vis at et grådig valg er trygt To situasjoner: Hvis l + d[i] <= m, stopper vi ikke i i l + d[i] > m, stopper vi i i Valg: Samme som for DP

Situasjon #1 Anta at én optimal løsning stopper her La neste stopp for optimal løsning være k ... ... ... a k i b

Situasjon #1 Anta at én optimal løsning stopper her La neste stopp for optimal løsning være k Kan konstruere ny optimal løsning ved å bytte ut stopp i stasjon i med et tillatt stopp blant stasjoner {k+1, ..., i-1} ... ... ... a k k+1 i-1 i b

Situasjon #2 Anta at vi har en optimal løsning som ikke stopper her Ikke mulig optimal løsning

Matstasjoner - Grådig Optimal substruktur Etter grådig valg, står vi igjen med delproblem {0, ..., i-2} Optimal løsning består nå av Det grådige valget Optimal løsning av delproblemet Bevis: Klipp-og-lim

DP vs grådig $ time python dp_food.py < foodinput.txt input size 100000 number of stations: 67928 real 0m1.233s $ time python greedy_food.py < foodinput.txt input size 100000 number of stations: 67928 real 0m0.079s

Standard bevis av grådig egenskap Anta at du har en optimal løsning hvor det grådige valget ikke er tatt Vis hvordan du kan lage en ny optimal løsning ved å bytte ut et annet valg med det grådige valget Litt mer involvert enn klipp-og-lim

Eksempel: Huffman-koding Komprimeringsalgoritme Har en sekvens av bokstaver Ønsker en plasseffektiv bitrepresentasjon Standard bokstavkoding: ASCII, UTF-8 Samme antall bits per bokstav E.g. a = 1100001, b = 1100010, ... Huffman: Kjenner forekomst av hver bokstav Ønsker koder som gir færrest bits totalt Må kunne dekode tilbake til bokstaver => prefikskoder

Grådig koding Hva med å gi den hyppigst forekommende bokstaven bitlengde 1, nest hyppigst 2, etc? Tekst har forekomster a: 1, b: 1, c: 1, d: 1, e: 50 e = 0, d = 10, c = 110, b = 1110, a = 1111 => 50 + 2 + 3 + 4 + 4 = 63 bits totalt e = 0, d = 100, c = 101, b = 110, a = 111 => 50 + 3 + 3 +3 +3 = 62 bits totalt Fungerer altså ikke

Huffmans grådighet Huffman er omvendt grådig Gi lengste streng til de som forekommer sjeldnest Kjenner ikke lengste streng før slutten => Konstruerer trerepresentasjon av kodingen, fra bunnen og opp 1 Et slikt tre er også kjekt til dekoding av komprimert tekst e:50 1 1 1 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte Ta de to nodene med lavest forekomst Kall dem a og b Konstruer en ny node, med venstre barn a og høyre barn b og forekomst lik summen av forekomster av a og b Repeter til vi bare har en node igjen

Huffmankoding - Fremgangsmåte c:1 b:1 a:1

Huffmankoding - Fremgangsmåte c:1 b:1 a:1

Huffmankoding - Fremgangsmåte c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 2 e:50 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte c:1 _: 2 b:1 a:1

Huffmankoding - Fremgangsmåte c:1 _: 2 b:1 a:1

Huffmankoding - Fremgangsmåte c:1 _: 2 b:1 a:1

Huffmankoding - Fremgangsmåte _: 2 e:50 d:1 c:1 _: 2 b:1 a:1

Huffmankoding - Fremgangsmåte _: 2 e:50 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 2 e:50 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 2 e:50 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 4 _: 2 e:50 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 54 e:50 _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 54 e:50 _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmankoding - Fremgangsmåte _: 54 Venstre gren: 0 Høyre gren: 1 Kan slik finne kodingen e:50 _: 4 _: 2 _: 2 d:1 c:1 b:1 a:1

Huffmanalgoritmen def huffman(frequencies): """ frequencies: Dictionary av 'bokstav':forekomst """

Huffmanalgoritmen def huffman(frequencies): for (k, v) in frequencies.items() # frequencies.items() gir innholdet # som (nøkkel, verdi)-tupler

Huffmanalgoritmen def huffman(frequencies): [... for (k, v) in frequencies.items()] # list-comprehension # ett element i lista for hvert # element i items

Huffmanalgoritmen def huffman(frequencies): [Node(f=v, v=k) for (k, v) \ in frequencies.items()] # Konstruer en ny node per element # f: frekvens, v: bokstav # '\' betyr 'fortsetter på neste linje'

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] # lagre listen i 'alphabet'

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) # Lag en heap av alle nodene

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) while len(Q) > 1: # Vi har minst to noder igjen

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) while len(Q) > 1: a, b = Q.extract_min(), \ Q.extract_min() # Hent de to sjeldneste nodene # (i python: x, y = 1, 2 # setter x = 1, y = 2)

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) while len(Q) > 1: a, b = Q.extract_min(), \ Q.extract_min() z = Node(left=a, right=b) # Konstruer en ny node # Node()-konstruktør setter opp # frekvens til å være sum av a og b

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) while len(Q) > 1: a, b = Q.extract_min(), \ Q.extract_min() z = Node(left=a, right=b) Q.insert(z) # Legg den nye noden inn i heapen

Huffmanalgoritmen def huffman(frequencies): alphabet = [Node(f=v, v=k) for (k, v) \ in frequencies.items()] Q = Heap(alphabet) while len(Q) > 1: a, b = Q.extract_min(), \ Q.extract_min() z = Node(left=a, right=b) Q.insert(z) return Q.extract_min() # Kun rotnoden igjen i heapen # Returner rotnoden

Kjøretid Kjører hovedløkka n ganger Inne i løkka: Totalt: O (n lg (n)) n - antall bokstaver Inne i løkka: 2 extract-min - 2 * O (lg (n)) = O (lg (n)) Konstruer node - O (1) heap-insert - O (lg (n)) Totalt: O (n lg (n))

Huffman - bevis? Se lærebok Se forelesningsfoiler

Eksempel: Cache-håndtering Cache: Mellomlager Prosessor Hovedminne Treeeeig...

Eksempel: Cache-håndtering Cache: Mellomlager Cache Prosessor Hovedminne Rask! Treeeeig...

Eksempel: Cachehåndtering Cache er til gjengjeld liten Ikke plass til så mye Må bestemme oss for hva vi vil ha i cache Jo oftere vi har det vi skal i cache, jo bedre! Høy ytelse krever dermed god utkastelsesstrategi Hva skal vi kvitte oss med når cache er full?

Eksempel: Cachehåndtering Antar at vi kjenner fremtidige minneforespørsler Liste <r1, r2, ..., rn> med forespørsler Eksempelvis <a, b, a, d, d, c, b, d, a> Prosessor Hovedminne hent a hent a a a a

Eksempel: Cachehåndtering Antar at vi kjenner fremtidige minneforespørsler Liste <r1, r2, ..., rn> med forespørsler Eksempelvis <a, b, a, d, d, c, b, d, a> Prosessor Hovedminne hent b hent b b b b a

Eksempel: Cachehåndtering Antar at vi kjenner fremtidige minneforespørsler Liste <r1, r2, ..., rn> med forespørsler Eksempelvis <a, b, a, d, d, c, b, d, a> Prosessor Hovedminne hent a b a a

Eksempel: Cachehåndtering Antar at vi kjenner fremtidige minneforespørsler Liste <r1, r2, ..., rn> med forespørsler Eksempelvis <a, b, a, d, d, c, b, d, a> Prosessor Hovedminne hent d hent d b d d d a Må kaste ut noe!

Eksempel: Cachehåndtering Antar at vi kjenner fremtidige minneforespørsler Liste <r1, r2, ..., rn> med forespørsler Eksempelvis <a, b, a, d, d, c, b, d, a> Etc. Prosessor Hovedminne b d

Eksempel: Cachehåndtering Hva skal vi kaste ut? Intuisjon: Virker smart å kaste ut det det er lengst tid til vi skal bruke Aller helst et element vi aldri kommer til å bruke Er dette optimalt?

Terminologi <r1, r2, ..., rn> - Minneforespørsler k - Cachestørrelse m[i] - Cachebom etter <r1, ..., ri> e[i] - Element som kastes ut ved ri Ci - Cache ved ri

Steg 1 - Beskriv valg Antar i utgangspunktet tom cache For <r1, ..., rk> har vi plass i cache Trenger ikke kaste ut noe Intuitivt optimalt å ikke gjøre det heller - kunne bare gjort det når det var nødvendig i stedet. (mer senere) For ri > k, kan to ting skje ri er i cache ri er ikke i cache Må velge om vi skal kaste ut et element, og i så fall hvilket

Steg 2 - Vis at det grådige valget er trygt Det grådige valget er, i de respektive situasjoner: Ikke kast ut noe fra cache. Kast ut det elementet det er lengst tid før etterspørres

Bevis for situasjon #1 Anta at vi har en optimal utkastssekvens hvor et element kastes ut Vi kan lage en ny optimal utkastssekvens ved å kaste samme element neste gang denne utkastssekvens fyller cache

Bevis for situasjon #1 Anta at vi har en optimal utkastssekvens hvor et element kastes ut Vi kan lage en ny optimal utkastssekvens ved å kaste samme element neste gang denne utkastssekvens fyller cache Optimal cache Grådig cache ... ... Hit! ... Hit! ... rl rl ... ... ... ...

Bevis for situasjon #1 Anta at vi har en optimal utkastssekvens hvor et element kastes ut Vi kan lage en ny optimal utkastssekvens ved å kaste samme element neste gang denne utkastssekvens fyller cache Optimal cache Grådig cache ... ... Hit! ... Hit! ... rl ... ... ... ...

Bevis for situasjon #1 Anta at vi har en optimal utkastssekvens hvor et element kastes ut Vi kan lage en ny optimal utkastssekvens ved å kaste samme element neste gang denne utkastssekvens fyller cache Optimal cache Grådig cache ... ... Miss! ... Miss! ... rx rx rx rl rx ... ... ... ...

Bevis for situasjon #1 Anta at vi har en optimal utkastssekvens hvor et element kastes ut Vi kan lage en ny optimal utkastssekvens ved å kaste samme element neste gang denne utkastssekvens fyller cache Ergo vil det alltid finnes en optimal løsning der cache alltid er full for ri > k

Bevis for situasjon #2 Anta at Optimal utkastsekvens kaster ut rj rm er elementet det er lengst til etterspørres rj =/= rm Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 Anta at Vil vise at vi kan kaste ut rm i stedet Optimal utkastsekvens kaster ut rj rm er elementet det er lengst til etterspørres rj =/= rm Vil vise at vi kan kaste ut rm i stedet Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 Etterspørsler ri ... ... rj ... ... rm Optimal cache Grådig cache ... ... ... ... ri rj rj ... ... rm rm ri Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 Frem til rj, hold cache lik Ved rj: Optimal cache får miss Grådig cache får hit Optimal cache må kaste noe rL Optimal cache Grådig cache ... ... rL rj ... rL ... ... rj ... ... rm ... Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 Optimal cache skilles fra grådig cache kun i rm =/= rL For <rj+1, ..., rm-1>: r =rL- Optimal miss, grådig hit r =/= rL - Likt Optimal cache Grådig cache ... ... rj rL ... rj ... ... rm ... Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 For rm Grådig cache miss - Kast ut rL Optimal cache hit Optimal cache Grådig cache ... ... rj rm rL ... rj ... ... rm ... Etterspørsler ri ... ... rj ... ... rm

Bevis for situasjon #2 Herfra og ut holdes cache lik Samme antall cache misses fra rm til rn Frem til rj var det også likt antall cache misses For <rj, ..., rm>: rj - Optimal cache miss rm - Grådig cache miss Eventuelt ekstra bom for optimal cache i resten

Bevis for situasjon #2 Cache miss for grådig løsning <= Cache miss for optimal løsning => Det finnes en optimal løsning med det grådige valget Det grådige valget forhindrer ikke optimal løsning

Steg 3: Optimal substruktur Optimal løsning består av Valg for <ri+1, ..., rn> Det grådige valget Må velge optimalt for <ri+1, ..., rn> Klipp-og-lim bevis

Steg 4: Løsning fra rekursjon m[i-1] ; ri er i cache m[i] = m[i-1] + 1 ; ri er ikke i cache NULL ; ri er i cache e[i] = FurthestInFuture(Ci-1 ) ; ri er ikke i cache Ci-1 ; ri er i cache Ci = Ci-1 U { ri } - { FurthestInFuture(Ci-1 ) } ; ri er ikke i cache

Øving 9 - Teori

Øving 9 - Praksis