Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Introduksjon til memoisering og dynamisk programmering Åsmund Eldhuset asmunde *at*

Slides:



Advertisements
Liknende presentasjoner
C++ for Java-programmerere
Advertisements

PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Kompilatorer - Hva foregår under panseret? BEKK fagdag
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Tallet e - Funksjonen e x Eksponensialfunksjon Eks: Mobiltlf – sms [1/5] La oss tenke oss at vi er 7 milliarder mennesker på jorden og at alle har hver.
Kap 5 The discounted cash flow approach
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF 4130: Algoritmer: Design og effektivitet Eksamensdag:15. desember 2010.
Fibonaccifølgen og gylne forhold
Memoisering og dynamisk programmering
C# for javaprogrammerere
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Introduksjon til øvingsopplegg og programmering i Python Åsmund Eldhuset asmunde stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Forside A: Diverse B: O -,  - og  -relasjoner C: Pseudo- polynomialitet D: Transitivitet E: Diverse Spørsmål Teoriøving 5, oppgave 1 Åsmund Eldhuset.
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Alg. Dat Øvingsforelesning 5 Kompleksitetsanalyse Torbjørn Moralnd
Kompleksitetsanalyse
Korrekt dybde først-søk
Øvingsforelesning 12 Redusering av problemer,
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
TDT4120 Algoritmer og datastrukturer Introduksjon til øvingsopplegg og programmering i Python Basert på foiler av Åsmund Eldhuset Flikket på og presentert.
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Algoritmiske metoder Innhold: Effektivitetsbetraktninger Programmeringsteknikker Datastrukturer Algoritmer tilknyttet datastrukturene Lærebok: Hafting/Ljosland:
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.
Orientering om In104 Aslak Tveito Institutt for Informatikk Universitetet i Oslo
Algoritmer og Datastrukturer
Forelesning 2 – WMP - PHP Introduksjon - Tom Heine Nätt.
Design patterns: State og Strategy
Dynamisk programmering
Ch 4 INTEGRASJON Integrasjon innebærer å finne alle funksjoner F som har f derivert. Disse funksjoner kalles antiderivert av f og formelen for de er det.
Trenger vi IT-faget i den videregående skolen i Norge
INF 295 Algoritmer og datastrukturer Forelesning 1 - kapittel 1 Introduksjon Hans F. Nordhaug (Ola Bø) (Ketil Danielsen, 2007)
INF 295 Algoritmer og datastrukturer Forelesning 4 Algoritmeanalyse Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
INSTITUTT FOR INFORMATIKKINF ØR , Intro nr. 1 UNIVERSITETET I OSLO Velkommen til INF 2400 Digital Signalbehandling Foreleser: Øyvind Ryan.
VI LAGER EN PLATEBUTIKK
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
AI - Kunstig Intelligens
Typer i programmering. Simple typer var a = 13;
MENA1000 Deleksamen 2012 Endelig statistikk. Deleksamen-resultatet i prosent av oppnåelig (x-aksen er ikke kandidatnummer, bare et løpenummer)
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Presentasjon av prosjekt Oppgavestiller: NTNU (Magnar Hole) Oppgave: Opprette lokal brukerdatabase med (PHP & MySQL) Studenter: Christian Dillner Veileder:
Forside Intro Fibonacci-tall Memoisering DP Longest increasing subsequence Betingelser Matrise- multiplikasjon Longest common subsequence Grådig vs. DP.
Nummer 8-10 H. Aschehoug & Co Sehesteds gate 3, 0102 Oslo
Algebraens og Geometriens Historie
Algebraens og Geometriens Historie Retorisk algebra Synkopert algebra Symbolsk algebra Arkimedes Gamle Hellas.
Kap. 9 – Computer Intelligence How Information Technology Is Conquering the World: Workplace, Private Life, and Society Professor Kai A. Olsen,
Memoisering og dynamisk programmering Magnus Botnan botnan at stud.ntnu.no 23/
Roboter og matematikk!. beregne omkretsen på forskjellige hjul lage en testbane etter oppgitte mål beskrive en sammenheng med hjulenes omkrets, og kjørt.
Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Programmering i Python.
Det gylne snitt og Fibonacci-tallene Undervisningsopplegg laget av Johan Nygaard for Vitenfabrikken i Sandnes.
Øvingsforelesning 11 P vs NP Håkon Jacobsen
INF-1400 Obligatorisk Oppgave 3 Mayhem Clone
Matematikk - utvidet form. Mål for timen Du skal kunne kjenne igjen plassverdien til et siffer og skrive et tall på utvidet form.
Koding med Blue- bot, vigra barnehage,15. mars 2017
Kompleksitetsanalyse
Øvingsforelesning i Python (TDT4110)
Øvingsforelesning 10 Grådighet
Objektorientert programmering i Java
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Introduksjon til memoisering og dynamisk programmering Åsmund Eldhuset asmunde *at* stud.ntnu.no folk.ntnu.no/asmunde/algdat/mem-dp-intro.ppt ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Memoisering og DP Dette er to ganske like teknikker for å lage algoritmer De kan brukes på svært mange tilsynelatende forskjellige problemer Kan gjøre eksponentiell kjøretid om til polynomisk kjøretid Vi vil nå "finne opp" memoisering og DP mens vi løser et problem ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Fibonacci-tall Problem: Regn ut Fibonacci-tall nummer n Matematisk definisjon: f(0) = 0 f(1) = 1 f(n) = f(n – 1) + f(n – 2) for n > 1 Hvert tall er altså summen av de to foregående: 1, 1, 2, 3, 5, 8, 13, 21, 34, ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Fibonacci-tall Dette ser lett ut å programmere. Vi fyrer løs med følgende Python-kode: def f(n): if n <= 0: return 0 elif n == 1: return 1 else: return f(n - 1) + f(n - 2) ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Fibonacci-tall Dessverre blir kjøretiden helt forferdelig! For n < 20 går det bra Utregning av f(25) tar et halvt sekund f(30) tar fem sekunder f(35) tar et minutt f(42) vil vare ut forelesningen f(50) vil ta et år Når n øker med 1, dobles nesten kjøretiden Hva skyldes dette? La oss ta en kikk på hva funksjonen gjør ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Bortkasting av arbeid f(3)f(2)f(1) f(0)f(1) f(2) f(1) f(0) f(4) f(2)f(1) f(0)f(1) f(3) f(6)f(5)f(4)f(3)f(2)f(1) f(0)f(1) f(2)f(1) f(0) ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Memoisering Løsning: Når funksjonen har regnet ut et Fibonacci-tall, registrerer vi resultatet Når funksjonen blir bedt om å regne ut et Fibonacci-tall, sjekker vi først om vi allerede har regnet det ut Har vi allerede regnet det ut, returnerer vi resultatet vi har Ellers starter vi utregningen på vanlig måte Kan bruke enten dictionary eller array Array er raskere, men du må vite størrelsen på forhånd ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Memoisering med dictionary def f(n, dict): if n <= 0: return 0 elif n == 1: return 1 elif dict.has_key(n): return dict[n] else: result = f(n – 1, dict) + f(n – 2, dict) dict[n] = result return result def fib(n): dict = {} return f(n, dict) ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Memoisering med array def f(n, array): if n <= 0: return 0 elif n == 1: return 1 elif array[n] != -1: return array[n] else: result = f(n – 1, array) \ + f(n – 2, array) array[n] = result return result def fib(n): array = [-1] * (n + 1) return f(n, array) ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Dynamisk programmering Vi ser at utregningen av hvert tall bare avhenger av tidligere tall Derfor kan vi faktisk fylle ut arrayet vårt direkte Går raskere enn memoisering pga. ingen rekursjon ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Dynamisk programmering def f(n): if n <= 0: return 0 array = [-1] * (n + 1) array[0] = 0 array[1] = 1 for i in range(2, n + 1): array[i] = array[i – 1] + array[i – 2] return array[n] ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål DP – plassoptimalisering Vi ser at utregningen av hvert tall bare avhenger av de to forrige tallene Dermed klarer vi oss med bare å lagre tre tall av gangen – sparer minne Merk at dette bare er nyttig hvis man kun er interessert i det siste tallet, og ikke vil beholde tallene underveis ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål DP – plassoptimalisering def f(n): if n <= 0: return 0 previous = 0 current = 1 for i in range(n – 1): next = previous + current previous = current current = next return current ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål I neste øvingsforelesning... Når kan vi bruke memoisering og DP? Generell tankegang Mange eksempler på DP Sammenligning med grådige algoritmer Neste øvingsforelesning forutsetter at man kan det som står i denne foilen! ::

Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Spørsmål? ::