PG4200, Forelesning 1: Faginformasjon Måling av kjøretid Lars Sydnes 4. september 2015 I – Oversikt I dag: • Presentasjon av faget I dag: • • Presentasjon av faget Lab: Måling av kjøretid Faglærer: Lars Sydnes [email protected] Underviser matematikk og algoritmer ved Westerdals høyskole. • Ph.D. Matematikk fra NTNU (2012) • Siv.Ing. Industriell Matematikk fra NTNU (2007) • Musikkvitenskap grunnfag fra UiO (ca. 2001) Faglærer: Lars Sydnes [email protected] Underviser matematikk og algoritmer ved Westerdals høyskole. • Ph.D. Matematikk fra NTNU (2012) • Siv.Ing. Industriell Matematikk fra NTNU (2007) • Musikkvitenskap grunnfag fra UiO (ca. 2001) Veileder: Magnar Kleppe [email protected] 3. klasse, spillprogrammering. Bruk ham flittig! Hvor vil vi • Utvikle terminologi: Hvordan snakker vi om kjøretid og ressursbruk? • Kjenne klassiske problemer og algoritmer. • Kjenne de datastrukturene og algoritmene vi omgir oss med. • Utvikle oss som programmerere. Eksempel: Jvisualvm. Offisielle kompetansemål (Fra emnebeskrivelsen) Studenten skal • kjenne klassisk analyse av dataprogrammer, Offisielle kompetansemål (Fra emnebeskrivelsen) Studenten skal • kjenne klassisk analyse av dataprogrammer, • kunne bruke eksisterende bibliotek og egenutviklede algoritmer og datastrukturer til å løse praktiske problemer, Offisielle kompetansemål (Fra emnebeskrivelsen) Studenten skal • kjenne klassisk analyse av dataprogrammer, • kunne bruke eksisterende bibliotek og egenutviklede algoritmer og datastrukturer til å løse praktiske problemer, • ha et språk og begrepsapparat som egner seg for å drøfte ressursbruken til dataprogrammer, Offisielle kompetansemål (Fra emnebeskrivelsen) Studenten skal • kjenne klassisk analyse av dataprogrammer, • kunne bruke eksisterende bibliotek og egenutviklede algoritmer og datastrukturer til å løse praktiske problemer, • ha et språk og begrepsapparat som egner seg for å drøfte ressursbruken til dataprogrammer, • ha den kunnskapen om algoritmer og datastrukturer som kreves i videre informatikkstudier. Grovarkitektur Analysere ressursbruk • Kjøretid • minnebruk Grovarkitektur Analysere ressursbruk • Kjøretid • minnebruk Bruke datastrukturer • Lagring og søk • Problemløsning Grovarkitektur Analysere ressursbruk • Kjøretid • minnebruk Bruke datastrukturer • Lagring og søk • Problemløsning Implementere kjente datastrukturer • Hva befinner seg under panseret? Arbeidsform Forelesninger: Gjennomgang av gammelt og nytt stoff. Arbeidsform Forelesninger: Gjennomgang av gammelt og nytt stoff. øvinger: • Drøfte teorispørsmål. • Små programmeringsprosjekter. Lærebok Robert Sedgeqick, Kevin Wayne (2011) ISBN: 978-0-321-57351-3 Vurdering Innlevering 1: Uke 40 20% Implementasjon av køer, sammenligning av kjøretid. Innlevering 2: Uke 45, Lagring og søk. 20% Vurdering Innlevering 1: Uke 40 20% Implementasjon av køer, sammenligning av kjøretid. Innlevering 2: Uke 45, 20% Lagring og søk. Eksamen: Uke 51, Skriftlig, ingen hjelpemidler, 3 timer. 60% Vurdering Innlevering 1: Uke 40 20% Implementasjon av køer, sammenligning av kjøretid. Innlevering 2: Uke 45, 20% Lagring og søk. Eksamen: Uke 51, Skriftlig, ingen hjelpemidler, 3 timer. Eksakte datoer kunngjøres i dag! 60% II – Læringsressurser Læringsressurser Alt materiale er tilgjengelig via it’s learning • Det vi bruker er lenket opp fra planleggeren Læringsressurser Alt materiale er tilgjengelig via it’s learning • Det vi bruker er lenket opp fra planleggeren • Se også arkiv i venstre panel på it’s learning. Læringsressurser Alt materiale er tilgjengelig via it’s learning • Det vi bruker er lenket opp fra planleggeren • Se også arkiv i venstre panel på it’s learning. • Alt er fysisk lagret på Roterommet Læringsressurser Alt materiale er tilgjengelig via it’s learning • Det vi bruker er lenket opp fra planleggeren • Se også arkiv i venstre panel på it’s learning. • Alt er fysisk lagret på Roterommet Ellers: Webside med informasjon Utskriftvennlig versjon III – Algoritmer og datastrukturer Vår forenklede modell av datamaskinen • En lang tabell med tall 010010 1000111 1010010110 101 100101001 101001011 ··· Vår forenklede modell av datamaskinen • En lang tabell med tall 010010 1000111 1010010110 101 100101001 101001011 ··· 101001011 ··· • En enhet som leser og fortolker ett ord om gangen ⇓ 010010 1000111 1010010110 101 100101001 Vår forenklede modell av datamaskinen • En lang tabell med tall 010010 1000111 1010010110 101 100101001 101001011 ··· 101001011 ··· 101001011 ··· • En enhet som leser og fortolker ett ord om gangen ⇓ 010010 1000111 1010010110 101 100101001 1010010110 101 100101001 • .... SENERE: ⇓ 010010 1000111 Vår forenklede modell av datamaskinen • En lang tabell med tall 010010 1000111 1010010110 101 100101001 101001011 ··· 101001011 ··· 101001011 ··· • En enhet som leser og fortolker ett ord om gangen ⇓ 010010 1000111 1010010110 101 100101001 1010010110 101 100101001 • .... SENERE: ⇓ 010010 1000111 Hvordan kan vi bruke dette til noe vettugt? Datastrukturer Vi strukturerer dataene. Datastrukturer Vi strukturerer dataene. 1 Data som hører sammen kan ligge på rekke og rad, i tabeller Datastrukturer Vi strukturerer dataene. 1 Data som hører sammen kan ligge på rekke og rad, i tabeller 2 Vi kan tolke data som adresser, altså pekere. Datastrukturer Vi strukturerer dataene. 1 Data som hører sammen kan ligge på rekke og rad, i tabeller 2 Vi kan tolke data som adresser, altså pekere. Java-manifestasjon Datastrukturer Vi strukturerer dataene. 1 Data som hører sammen kan ligge på rekke og rad, i tabeller 2 Vi kan tolke data som adresser, altså pekere. Java-manifestasjon 1 Bruk av arrays: String[]. Datastrukturer Vi strukturerer dataene. 1 Data som hører sammen kan ligge på rekke og rad, i tabeller 2 Vi kan tolke data som adresser, altså pekere. Java-manifestasjon 1 Bruk av arrays: String[]. 2 Objekter som refererer til andre objekter. Eksempel: Lenket liste public class Liste { public Object firstElement; public Liste tail; } Eksempel: Lenket liste public class Liste { public Object firstElement; public Liste tail; } Liste data Videreutviklet versjon: ListeTest.java null Eksempel: Lenket liste public class Liste { public Object firstElement; public Liste tail; } Liste Liste data data Videreutviklet versjon: ListeTest.java null Eksempel: Lenket liste public class Liste { public Object firstElement; public Liste tail; } Liste Liste Liste data data data Videreutviklet versjon: ListeTest.java null Algoritmer Algoritme == Fremgangsmåte Algoritmer Algoritme == Fremgangsmåte • Kokebokoppskrift. Algoritmer Algoritme == Fremgangsmåte • Kokebokoppskrift. • Del av et dataprogram. Algoritmer Algoritme == Fremgangsmåte • Kokebokoppskrift. • Del av et dataprogram. Ulike typer spesifikasjon: • Noen detaljer kan være underforstått. • Det skal likevel være klinkende klart hva som skal gjøres. Spørsmål å stille • Er spesifikasjonen komplett? Spørsmål å stille • Er spesifikasjonen komplett? • Er algoritmen korrekt? Spørsmål å stille • Er spesifikasjonen komplett? • Er algoritmen korrekt? • Hvilke ressurser kreves? Spørsmål å stille • Er spesifikasjonen komplett? • Er algoritmen korrekt? • Hvilke ressurser kreves? • Hvor lang tid tar det? Spørsmål å stille • Er spesifikasjonen komplett? • Er algoritmen korrekt? • Hvilke ressurser kreves? • Hvor lang tid tar det? Terminologi • Et program implementer / benytter en algoritme. Terminologi • Et program implementer / benytter en algoritme. • Et program er en konkret ting. Terminologi • Et program implementer / benytter en algoritme. • Et program er en konkret ting. • En algoritme er en abstrakt ting. Terminologi • Et program implementer / benytter en algoritme. • Et program er en konkret ting. • En algoritme er en abstrakt ting. • Vi kan gi mange ulike spesifikasjoner av en og samme algoritme. Terminologi • Et program implementer / benytter en algoritme. • Et program er en konkret ting. • En algoritme er en abstrakt ting. • Vi kan gi mange ulike spesifikasjoner av en og samme algoritme. • Når du lager et dataprogram spesifiserer du overfor datamaskinen hvilken algoritme som skal benyttes. Begrensninger Vi tar ikke hensyn til at moderne datamaskiner virker på en mer komplisert måte: • Moderne hardware favoriserer data som ligger samlet i minnet. • Parallell prosessering. Begrensninger Vi tar ikke hensyn til at moderne datamaskiner virker på en mer komplisert måte: • Moderne hardware favoriserer data som ligger samlet i minnet. • Parallell prosessering. Vi kan gjennomføre mange resonnementer fordi modellen er forenklet. Vi må være kritiske til konklusjonene fordi modellen er forenklet. IV – Lab Bakgrunn Ulike databeholdere Bakgrunn Ulike databeholdere • java.util.ArrayList Bakgrunn Ulike databeholdere • java.util.ArrayList • java.util.LinkedList Bakgrunn Ulike databeholdere • java.util.ArrayList • java.util.LinkedList • java.util.HashSet Bakgrunn Ulike databeholdere • java.util.ArrayList • java.util.LinkedList • java.util.HashSet • java.util.TreeSet Bakgrunn Ulike databeholdere • java.util.ArrayList • java.util.LinkedList • java.util.HashSet • java.util.TreeSet Viktige operasjoner: Lagring og søk. Tilgjengelig i: java.util.Arrays Generiske typer Vi skal arbeide med String-objekter: Collection<String> arrayList = new ArrayList<String>(); Collection<String> linkedList = new LinkedList<String>() Collection<String> hashSet = new HashSet<String>(); Collection<String> treeSet = new TreeSet<String>(); Arbeidsoppgaver 1 Måle tidsbruken for metodene add, contains. Arbeidsoppgaver 1 Måle tidsbruken for metodene add, contains. 2 Sammenligne ytelsen til implementasjonene ArrayList, LinkedList, HashSet, TreeSet Arbeidsoppgaver 1 Måle tidsbruken for metodene add, contains. 2 Sammenligne ytelsen til implementasjonene ArrayList, LinkedList, HashSet, TreeSet 3 Visualisere tidsbruk som funksjon av antall objekter i beholderen. (Regneark) Arbeidsoppgaver 1 Måle tidsbruken for metodene add, contains. 2 Sammenligne ytelsen til implementasjonene ArrayList, LinkedList, HashSet, TreeSet 3 Visualisere tidsbruk som funksjon av antall objekter i beholderen. (Regneark) 4 Drøfte målemetodene Måling av tid Det finnes mange verktøy for å måle ytelse: Måling av tid Det finnes mange verktøy for å måle ytelse: • Programvare: JVisualVM, YourKit, JProfiler,.. Måling av tid Det finnes mange verktøy for å måle ytelse: • Programvare: JVisualVM, YourKit, JProfiler,.. • Kjøre java med enkel profiling: java -Xprof Måling av tid Det finnes mange verktøy for å måle ytelse: • Programvare: JVisualVM, YourKit, JProfiler,.. • Kjøre java med enkel profiling: java -Xprof I dette kurset: Målinger i koden. Måling av tid Det finnes mange verktøy for å måle ytelse: • Programvare: JVisualVM, YourKit, JProfiler,.. • Kjøre java med enkel profiling: java -Xprof I dette kurset: Målinger i koden. Stopwatch timer = new Stopwatch(); collection.contains(target); double timeUsage = timer.elapsedTime(); Her har vi brukt edu.princeton.cs.introcs.Stopwatch Gjentatte målinger Problem Unøyaktige målinger. Gjentatte målinger Problem Unøyaktige målinger. Løsning Ta gjennomsnittet over N målinger Stopwatch timer = new Stopwatch(); for(int i = 0; i < N; i++) collection.contains(target[i]); double time = timer.elapsedTime() / N; Sammenligning av beholdere Spørsmål Hvordan avhenger kjøretiden for kall av metodene add, contains av antall objekter i beholderen? Sammenligning av beholdere Spørsmål Hvordan avhenger kjøretiden for kall av metodene add, contains av antall objekter i beholderen? Vi ser bort fra andre faktorer men fornekter dem ikke. Første utfordring: Mål tiden Sett opp et java-program for måling av kjøretid. Her har du et brukbart utgangspunkt: CollectionTest.java Første utfordring: Mål tiden Sett opp et java-program for måling av kjøretid. Her har du et brukbart utgangspunkt: CollectionTest.java Her skriver vi ut beholderstørrelse og tidsbruk: Out out = new Out("output.csv") /*....*/ out.printf("%d,%d\n",size,timeUsage); 511,1765 1084,3807 1738,6564 2486,7683 Andre utfordring: Analyse i regneark Spørsmål • Kjøretiden til add. Spørsmål • Kjøretiden til add. • Kjøretiden til contains. Spørsmål • Kjøretiden til add. • Kjøretiden til contains. • Hvordan avhenger tidsbruken av antallet objekter i de ulike Collection-objektene? Spørsmål • Kjøretiden til add. • Kjøretiden til contains. • Hvordan avhenger tidsbruken av antallet objekter i de ulike Collection-objektene? • øker kjøretiden? dramatisk? Spørsmål • Kjøretiden til add. • Kjøretiden til contains. • Hvordan avhenger tidsbruken av antallet objekter i de ulike Collection-objektene? • øker kjøretiden? dramatisk? • avtar kjøretiden? hvordan? Spørsmål • Kjøretiden til add. • Kjøretiden til contains. • Hvordan avhenger tidsbruken av antallet objekter i de ulike Collection-objektene? • øker kjøretiden? dramatisk? • avtar kjøretiden? hvordan? • er kjøretiden konstant? Kritikk av målingene • Akselerasjon i kjøremiljøet (javas virtuelle maskin) • Går noen operasjoner gradvis raskere? • Stabiliserer kjøretiden seg etterhvert? • Kan vi eliminere effekten fra målingene? Kritikk av målingene • Akselerasjon i kjøremiljøet (javas virtuelle maskin) • Går noen operasjoner gradvis raskere? • Stabiliserer kjøretiden seg etterhvert? • Kan vi eliminere effekten fra målingene? • Randomisering • Får vi andre resultater om vi gjør forsøk uten randomisering? • Har randomisering noe å si for akselerasjonseffekten? Kritikk av målingene • Akselerasjon i kjøremiljøet (javas virtuelle maskin) • Går noen operasjoner gradvis raskere? • Stabiliserer kjøretiden seg etterhvert? • Kan vi eliminere effekten fra målingene? • Randomisering • Får vi andre resultater om vi gjør forsøk uten randomisering? • Har randomisering noe å si for akselerasjonseffekten? • Har antallet forsøk stor betydning? Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) (3) Drøfte metodene (hadde vært fint) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) (3) Drøfte metodene (hadde vært fint) (4) Stille flere spørsmål (kan – har du lyst?) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) (3) Drøfte metodene (hadde vært fint) (4) Stille flere spørsmål (kan – har du lyst?) Notat med informasjon om laben (html) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) (3) Drøfte metodene (hadde vært fint) (4) Stille flere spørsmål (kan – har du lyst?) Notat med informasjon om laben (html) Utskriftsvennlig (pdf) Oppsummering av mål: (0) Ta standardbiblioteket i bruk (stdlib-package.jar). (1) Få til å måle kjøretid. (skal) (2) Analysere noen data i regneark (bør) (3) Drøfte metodene (hadde vært fint) (4) Stille flere spørsmål (kan – har du lyst?) Notat med informasjon om laben (html) Utskriftsvennlig (pdf) Lykke til! Lekse Friske opp matematikk: - Potensregning - Logaritmeregning (- Geometriske rekker)
© Copyright 2024