PG4200 Algoritmer og datastrukturer forelesning 3. Lars Sydnes 29. oktober 2014

Like dokumenter
PG 4200 Algoritmer og datastrukturer Innlevering 1. Frist: 2.februar kl 21.00

Innføring i matematisk analyse av algoritmer

PG4200 Algoritmer og datastrukturer Forelesning 3 Rekursjon Estimering

PG4200 Algoritmer og datastrukturer Forelesning 2

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Norges Informasjonsteknologiske Høgskole

LO118D Forelesning 2 (DM)

MED TIDESTIMATER Løsningsforslag

Algoritmer og Datastrukturer IAI 21899

PG 4200 Algoritmer og datastrukturer Innlevering 2

PG4200 Algoritmer og datastrukturer Forelesning 10

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Algoritmer og datastrukturer Løsningsforslag

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

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

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.)

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

Norges Informasjonsteknologiske Høgskole

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer forelesning 10. Lars Sydnes 21. november 2014

Algoritmer - definisjon

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar I dag skal vi undersøke en rekke velkjente databeholdere i Java:

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Rekursjon. Binærsøk. Hanois tårn.

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

EKSAMEN med løsningsforslag

PG4200 Algoritmer og datastrukturer Forelesning 7

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

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

PG4200 Algoritmer og datastrukturer Forelesning 12

Oppgave 1. Sekvenser (20%)

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Divide-and-Conquer. Lars Vidar Magnusson

Datastrukturer for rask søking

INF1010 notat: Binærsøking og quicksort

Algoritmer og datastrukturer Løsningsforslag

EKSAMEN. Algoritmer og datastrukturer

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

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

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

7) Radix-sortering sekvensielt kode og effekten av cache

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

Algoritmer og Datastrukturer

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

MAT1030 Diskret matematikk

INF Løsning på seminaropppgaver til uke 8

Algoritmer - definisjon

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

UNIVERSITETET I OSLO

Om Kurset og Analyse av Algoritmer

Algoritmer og datastrukturer Eksamen

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

Algoritme-Analyse. Asymptotisk ytelse. Sammenligning av kjøretid. Konstanter mot n. Algoritme-kompeksitet. Hva er størrelsen (n) av et problem?

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Rekursjon som programmeringsteknikk

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Hva er syntaks? En overskrift i en norsk avis: Dagens tema Grundig repetisjon og utdyping:

TDT4105 Informasjonsteknologi, grunnkurs

Obligatorisk oppgave 1 i INF 4130, høsten 2008

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

INF2220: Forelesning 1

LC191D/LO191D Videregående programmering mai 2010

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

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

Uke 12 inf2440 v2018. Eric Jul PSE-gruppa Ifi, UiO

UNIVERSITETET I OSLO

Kapittel 8: Sortering og søking

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I OSLO

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Generelle trær BINÆRTRÆR. Binærtrær

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Algoritmer og datastrukturer E Løkker i Java

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

INF1020 Algoritmer og datastrukturer GRAFER

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

INF2220: Forelesning 1

UNIVERSITETET I OSLO

Transkript:

PG4200 Algoritmer og datastrukturer forelesning 3 Lars Sydnes 29. oktober 2014

Plan Måling av kjøretid (delvis repetisjon) Matematisk analyse av kjøretid Presentasjon av innlevering 1

I Innlevering 1

Innlevering 1 Innleveringen utgjør 25 % av vurderingsgrunnlaget i faget. Frist: 21.september klokken 23.55

Innlevering 1 Oppgave 1: Kjøretidsanalyse Analyse av kjøretid for søk i lister.

Innlevering 1 Oppgave 1: Kjøretidsanalyse Analyse av kjøretid for søk i lister. To ulike liste-implementasjoner: ArrayList LinkedList

Innlevering 1 Oppgave 1: Kjøretidsanalyse Analyse av kjøretid for søk i lister. To ulike liste-implementasjoner: ArrayList LinkedList Fire ulike søkemetoder: Sekvensielt søk basert på indeks. Sekvensielt søk med foreach-løkke Innebygd søk Binært søk.

Innlevering 1 Oppgave 1: Kjøretidsanalyse Analyse av kjøretid for søk i lister. To ulike liste-implementasjoner: ArrayList LinkedList Fire ulike søkemetoder: Sekvensielt søk basert på indeks. Sekvensielt søk med foreach-løkke Innebygd søk Binært søk. To ulike analyseprinsipper: Måling av kjøretid og grafisk fremstilling. Matematisk analyse

Innlevering 1 Oppgave 2: Søk i filsystemet. java.io.file-objekter ken representere kataloger vanlige filer

Innlevering 1 Oppgave 2: Søk i filsystemet. java.io.file-objekter ken representere kataloger vanlige filer Gitt et objektstring target og File file. Hvis file er en vanlig fil: Søk etter target i file Hvis file er en katalog: Søk etter target i alle filer i alle underkataloger.

Innlevering 1 Oppgave 2: Søk i filsystemet. java.io.file-objekter ken representere kataloger vanlige filer Gitt et objektstring target og File file. Hvis file er en vanlig fil: Søk etter target i file Hvis file er en katalog: Søk etter target i alle filer i alle underkataloger. Utvidelse: Søk etter String taget på worldwide web uten å google. Internett vs WorldWide Web. Hvordan få tak i lenkene? Hvordan unngå å besøke samme side mange ganger.

Innlevering 1 Materiale Alt materiale er samlet i innlevering1.zip.

Innlevering 1 Materiale Alt materiale er samlet i innlevering1.zip. Dette zip-arkivet inneholder: Oppgavetekst: innlevering1.pdf. Utgangspunkt for kjøretidsanalyse: innlevering1.pdf. Enkel mal for svar på spørsmål: innlevering1.doc. Enkel regnearkmal: innlevering1.xls.

Innlevering 1 Besvarelse Besvarelsen leveres på it s learning.

Innlevering 1 Besvarelse Besvarelsen leveres på it s learning. Pakk besvarelsen inn i en fil med navn innlevering1.zip

Innlevering 1 Besvarelse Besvarelsen leveres på it s learning. Pakk besvarelsen inn i en fil med navn innlevering1.zip Unngå pakker: All kode skal være kompilerbar og kjørbar fra roten i zip-arkivet.

Innlevering 1 avslutning Les gjennom oppgaveteksten og la studentene stille spørsmål.

II Kort om rekursive funksjoner

Rekursjon En metode som kaller seg selv kalles rekursiv:

Rekursjon En metode som kaller seg selv kalles rekursiv: Eksempel: Regn ut summen S n = 1 + 2 + + (n 1) + n

Rekursjon En metode som kaller seg selv kalles rekursiv: Eksempel: Regn ut summen S n = 1 + 2 + + (n 1) + n Observarsjoner: S 0 = 0, S n = S n 1 + n

Rekursjon En metode som kaller seg selv kalles rekursiv: Eksempel: Regn ut summen S n = 1 + 2 + + (n 1) + n Observarsjoner: S 0 = 0, S n = S n 1 + n Rekursiv funksjon: public static int sum(n){ if (n == 0) return 0; else return n + sum(n-1) }

Bestanddeler i rekursive funksjoner Rekursivt kall: Der hvor metoden kaller seg selv.

Bestanddeler i rekursive funksjoner Rekursivt kall: Der hvor metoden kaller seg selv. Stoppbetingelse.

Bestanddeler i rekursive funksjoner Rekursivt kall: Der hvor metoden kaller seg selv. Stoppbetingelse. public static int sum(n){ if (n == 0){ // Stoppbetingelse return 0; } else { return n + sum(n-1) // Rekursivt kall. } }

Bestanddeler i rekursive funksjoner Rekursivt kall: Der hvor metoden kaller seg selv. Stoppbetingelse. public static int sum(n){ if (n == 0){ // Stoppbetingelse return 0; } else { return n + sum(n-1) // Rekursivt kall. } } Rekursive funksjoner bør ha denne strukturen: if (stoppbetingelse){ kontrollert nedstengning } else {

Hva skjer når vi glemmer stoppbetingelsen? Se Rekursjon.java

Hva skjer når vi glemmer stoppbetingelsen? Se Rekursjon.java Stikkord: StackOverflow.

Eksempel: LinkedList.java Listen er definert på en selvrefererende måte. Rekursiv søkemetode.

III Måling av kjøretid

En enkelt måling public static double timetrial(int N){ preparetest(n); Stopwatch timer = new Stopwatch(); dotest(n); } return timer.elapsedtime(); Her er preparetest en metode som gjør forberedelser, mens dotest representerer det vi ønsker å måle tiden for.

Test med konstant økning av problemstørrelsen public static void test(){ for (int N = 100; N < 1000; N += 100){ double time = timetrial(n); StdOut.println("%7d%5.1f\n",N,time); } }

Test med konstant økning av problemstørrelsen public static void test(){ for (int N = 100; N < 1000; N += 100){ double time = timetrial(n); StdOut.println("%7d%5.1f\n",N,time); } } Doblingstest public static void test(){ for (int N = 100; N < 1000; N += N){ double time = timetrial(n); StdOut.println("%7d%5.1f\n",N,time); } }

Hva vi måler Kjøretid ved for ulike verdier av N. Hva N er varierer etter konteksten, for eksempel: antall objekter i en beholder antallet spillere i et online-spill antall flyplasser i et nettverk av flyruter

Hva vi måler Kjøretid ved for ulike verdier av N. Hva N er varierer etter konteksten, for eksempel: antall objekter i en beholder antallet spillere i et online-spill antall flyplasser i et nettverk av flyruter Vi kan også være interessert i å måle andre ting enn kjøretid: antallet addisjonsoperasjoner antallet array-oppslag bruk av minneressurser.

Karakterisering av input Kjøretiden for en søkealgoritme kan avhenge av mange faktorer: Antallet elementer det søkes blant Hvilket element det søkes etter Andre kvaliteter, som f.eks antall repetisjoner

Karakterisering av input Kjøretiden for en søkealgoritme kan avhenge av mange faktorer: Antallet elementer det søkes blant Hvilket element det søkes etter Andre kvaliteter, som f.eks antall repetisjoner Som regel fokuserer vi på én faktor. Påvirkningen fra de andre faktorene fremstår som støy.

Praktisk eksempel ThreeSum.java DoublingTest.java

IV Matematisk analysen av kjøretid

Donald Knuths Ideal Målsetning Skrive opp en formel for kjøretiden til et dataprogam: Kjøretid = f (input) Viktigste faktorer Hva er kjøretiden til hver instruksjon? Hvor mange ganger utføres hver enkelt instruksjon?

Problem I: Uforutsigbar kjøretid Kjøretiden til hver enkelt instruksjon: Varierer fra maskin til maskin Påvirkes av ytre faktorer

Problem I: Uforutsigbar kjøretid Kjøretiden til hver enkelt instruksjon: Varierer fra maskin til maskin Påvirkes av ytre faktorer Strategi Vi kan nøye oss med å telle hvor mange ganger instruksjonene utføres. Det resulterende tallet er antagelig tett knyttet til kjøretiden.

Eksempel: Enkel løkke sum = 0; for (int i = 1; i <= n; i++){ sum+=i; }

Eksempel: Enkel løkke sum = 0; for (int i = 1; i <= n; i++){ sum+=i; } Denne løkken har frekvens n. Instruksjonene inne i løkken gjentas n ganger. I koden kan vi skrive: sum = 0; for (int i = 1; i <= n; i++){ sum+=i; } // frekvens: n

Eksempel: Dobbel løkke for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ dosomething(); } } Ytre løkke: Frekvens = n.

Eksempel: Dobbel løkke for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ dosomething(); } } Ytre løkke: Frekvens = n. For hver verdi av i gjentas den indre løkken n ganger.

Eksempel: Dobbel løkke for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ dosomething(); } } Ytre løkke: Frekvens = n. For hver verdi av i gjentas den indre løkken n ganger. Indre løkke: Frekvens = n + n + cdots + n = n 2.

Eksempel: Dobbel løkke for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ dosomething(); } } Ytre løkke: Frekvens = n. For hver verdi av i gjentas den indre løkken n ganger. Indre løkke: Frekvens = n + n + cdots + n = n 2. Hvis dosomething() tar omtrent 400 millisekunder, så vil den totale kjøretiden bli omtrene 400 n 2 millisekunder. Hvis n = 10, er altså kjøretiden omtrent 40 sekunder.

Eksempel: ThreeSum.java public static int count(int[] a) { int N = a.length; int cnt = 0; for (int i = 0; i < N; i++) { for (int j = i+1; j < N; j++) { for (int k = j+1; k < N; k++) { if (a[i] + a[j] + a[k] == 0) { cnt++; } } } } return cnt; }

Konklusjon Vi konkluderer med at den indre loopen har frekvens f (N) = 1 N(N 1)(N 2) 6

Problem II: Vanskelig matematikk Vi har sett at regningen kan bli veldig vanskelig Strategi Tilde-notasjon Orden

Tilde-notasjon Vi infører følgende notasjon for positive funksjoner f (n), g(n):

Tilde-notasjon Vi infører følgende notasjon for positive funksjoner f (n), g(n): Definisjon Vi sier at dersom for store n. f (n) g(n) f (n) g(n) 1

Regneregler for tilde-notasjon Hvis f 1 (n) g 1 (n) og f 2 (n) g 2 (n), og a og b er konstanter, så er

Regneregler for tilde-notasjon Hvis f 1 (n) g 1 (n) og f 2 (n) g 2 (n), og a og b er konstanter, så er af 1 (n) + bf 2 (b) ag 1 (n) + bg 2 (n)

Regneregler for tilde-notasjon Hvis f 1 (n) g 1 (n) og f 2 (n) g 2 (n), og a og b er konstanter, så er af 1 (n) + bf 2 (b) ag 1 (n) + bg 2 (n) og f 1 (n)f 2 (n) g 1 (n)g 2 (n)

Polynomer Vi behøver kun å bry oss om det leddet som har høyest grad: an 2 + bn + c an 2

Polynomer Vi behøver kun å bry oss om det leddet som har høyest grad: an 2 + bn + c an 2 Bevis: an 2 + bn + c an 2 = 1 + b 1 a n + c 1 a n 2 De to siste leddene 0 for store n, så brøken 1.

3n 2 (4n + 5n 2 ) 15n 4 3n 2 (4n + 5n 2 ) = 12n 3 + 15n 4 15n 4 180000 160000 3*n**2*(4*n+5*n**2) 15*n**4 140000 120000 100000 80000 60000 40000 20000 0 1 2 3 4 5 6 7 8 9 10

3n 2 (4n + 5n 2 ) 15n 4 plott av y = 3n 2 (4n + 5n 2 ) og y = 15n 4 : 1.6e+09 1.4e+09 3*n**2*(4*n+5*n**2) 15*n**4 1.2e+09 1e+09 8e+08 6e+08 4e+08 2e+08 0 10 20 30 40 50 60 70 80 90 100

3n 2 (4n + 5n 2 ) 15n 4 plott av y = 3n 2 (4n + 5n 2 ) og y = 15n 4 med logaritmisk skala. 1e+14 1e+12 3*n**2*(4*n+5*n**2) 15*n**4 1e+10 1e+08 1e+06 10000 100 1 1 10 100 1000

3n 2 (4n + 5n 2 ) 15n 4 Plott av y = 3n2 (4n + 5n 2 ) 15n 4 2 (3*n**2*(4*n+5*n**2))/(15*n**4) 1 1.5 1 0.5 0 5 10 15 20 25 30 35 40 45 50

Eksempel Vi tar utgangspunkt i et kjent resultat: 1 + 2 2 + + n 2 = n(n + 1)(2n + 1) 6 Dette er et faktum som det dessverre ikke er enkelt å bevise.

Eksempel Vi tar utgangspunkt i et kjent resultat: 1 + 2 2 + + n 2 = n(n + 1)(2n + 1) 6 Dette er et faktum som det dessverre ikke er enkelt å bevise. Vil ha enklere formel på høyre side.

Utregning 1 + 2 2 + + n 2 = n(n + 1)(2n + 1) 6 = 1 6 (2n3 + 3n 2 + n) = 1 3 n3 + 1 2 n2 + 1 6 n 1 3 n3

Konklusjon 1 + 2 2 + + n 2 1 3 n3

Anvendelse på TreeSum.java Frekvensen til den indre loopen i TreeSum.java er 1 6 N(N 1)(N 2) 1 6 N3

Anvendelse på TreeSum.java Frekvensen til den indre loopen i TreeSum.java er Utifra dette skulle vi forvente for en eller annen konstant a. 1 6 N(N 1)(N 2) 1 6 N3 kjøretid an 3

Anvendelse på TreeSum.java Frekvensen til den indre loopen i TreeSum.java er Utifra dette skulle vi forvente for en eller annen konstant a. 1 6 N(N 1)(N 2) 1 6 N3 kjøretid an 3 Praktisk demonstrasjon. Se doublingtestoutput.xls

Anvendelse på TreeSum.java Frekvensen til den indre loopen i TreeSum.java er Utifra dette skulle vi forvente for en eller annen konstant a. 1 6 N(N 1)(N 2) 1 6 N3 kjøretid an 3 Praktisk demonstrasjon. Se doublingtestoutput.xls Disse målingene gir estimatet kjøretid 10 10 N 3 sekunder

Hva har vi gjort Observasjon av kjøretiden (Målinger) Matematisk analyse Hypotese: Basert på analysen Sammenligning av hypotensen med målingene. Oppstilling av et brukbart estimat.