PG4200, Forelesning 1: Faginformasjon Måling av kjøretid

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)