TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Relevanta dokument
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Fördjupad Java. Undantagshantering. Fel

TDDC Terminologi Uppdaterad Fö #1

Algoritmer. Två gränssnitt

Föreläsning 9. Sortering

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

OOP Objekt-orienterad programmering

TDDC30 Programmering i Java, datastrukturer och algoritmer

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Språkkonventioner och redigering av tal.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Länkade strukturer, parametriserade typer och undantag

Föreläsning 11 Datastrukturer (DAT037)

Sökning och sortering

Tentamen i Algoritmer & Datastrukturer i Java

Vad har vi pratat om i kursen?

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

Föreläsning 13 Datastrukturer (DAT037)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 2 Datastrukturer (DAT037)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

JAVAUTVECKLING LEKTION 7

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30 Programmering i Java, datastrukturer och algoritmer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Facit Tentamen TDDC (7)

Programmering för språkteknologer II, HT2011. Rum

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 13 Datastrukturer (DAT037)

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering Föreläsning 11. Copyright Mahmud Al Hakim

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

SORTERING OCH SÖKNING

Tentamen Datastrukturer (DAT037)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Magnus Nielsen, IDA, Linköpings universitet

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Föreläsning 12. Söndra och härska

Tentamen: Programutveckling ht 2015

Att skriva till och läsa från terminalfönstret

Föreläsning 12. Söndra och härska

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Tentamen , Introduktion till Java, dtaa98, dtea53

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Tommy Färnqvist, IDA, Linköpings universitet

Objektorienterad Programmering (TDDC77)

Föreläsning 12 Innehåll

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Datastrukturer D. Föreläsning 2

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Java Direkt, upplaga 5 Innehåll

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Teoretisk del. Facit Tentamen TDDC (6)

Några saker till och lite om snabbare sortering

Föreläsning Datastrukturer (DAT037)

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Programmering för språkteknologer II, HT2014. Rum

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på layout, ett GUI-baserat program Frågor

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Föreläsning 12: Exempel och problemlösning

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

Facit Tentamen TDDC kl (6)

Tentamen TEN1 HI

Tentamen , Grundläggande programmering i Java

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 8 Innehåll

Föreläsning 15: Repetition DVGA02

Tentamen Datastrukturer D DAT 036/DIT960

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Bubblesort, Shakersort, Mergesort Strömmar, Datum, Formatering 1

Hittills, och vidare! Objektorientering och Java Objekt, klasser, instanser Arv, polymorfism Dölj implementationen Private/Public (inkapsling) Abstrakta datatyper (ADT) Datastruktur med algoritmer Listor, köer och stackar Gränssnitt vs implementation Analys av algoritmer 100 Komplexitet: tids-, rums- 50 Fallstudie: Sorteringsalgoritmer 2 0 0 10 20

Bubblesort Jämför med närliggande element Start från höga index void bubblesort(int[] a) { for (int i = 0; i < a.length; ++i) { for (int j = a.length-1; j > i; --j){ if (a[j] < a[j-1]) { byt plats på a[j] och a[j-1]; Asymptotisk (tids)komplexitet? Stabil? O(n 2 ) Ja Låg overhead n n 2 3

Shakersort Tvåvägs bubblesort Små element bubblar upp Stora element sjunker ner Fram och tillbaka Jämför med närliggande element Bubbla ner eller bubbla upp Gör om för varje element O(n) O(n) T shakersort? Stabil? O(n 2 ) Ja 4

Kort om rekursion Ibland när man delar upp ett problem, uppstår samma problem igen! T.ex. N! = 1 * 2 * 3 * kan även skrivas: N! = 1 då N = 0, N * (N-1)! annars I java kan en metod anropa sig själv! int fak(int N) { N : 2 if (N == 0) { return 1; return N * fak(n-1) 2 = 2 * 1 svar = fak(2); int fak(int N) { N : 1 if (N == 0) { return 1; return N * fak(n-1) 1 = 1 * 1 int fak(int N) { N : 0 if (N == 0) { return 1; return N * fak(n-1) 5

Divide and Conquer (sv. söndra och härska) En rekursiv strategi: 1. Om datamängden är liten, lös direkt (härska). 2. Annars: dela upp datamängden (söndra) och applicera söndra och härska (rekursivt) på varje del. 3. Sammanfoga lösningarna för varje del till lösningen för hela. 6

Mergesort Strategi: Divide and conquer : Tag två sorterade delmängder och sortera ihop dessa. Algoritm: Då mängden innehåller 0 eller 1 element: Redan sorterad => Klart! Annars: Dela upp mängden i två lika stora delar och sortera dessa Med mergesort! (rekursion) Sortera ihop dessa två delar (en. Merge) 7

Mergesort(2) Utnyttjar att det krävs få jämförelser att sortera små mängder Vanlig optimering: Byt ut sorteringsalgoritmen när delmängden är tillräckligt liten! Komplexitet: Antal uppdelningar av arrayen Mergar på varje nivå O(log(n)) O(n) T mergesort = O(log(n)) * O(n) = O(nlog(n)) R mergesort = O(n) (O(1) möjlig men impl. ger dålig prestanda) Stabil? Ja (om sammanslagningsalgoritmen är väl vald) 8

Sammanfattning Kvadratiska algoritmer Insertionsort Selectionsort Bubblesort Shakersort Mer avancerade algoritmer Shellsort Mergesort Quicksort Enkla, långsamma Komplexa, snabba 9

In- och utmatning Definition: En ström (en. Stream) är en sekvens av data från någon källa och/eller till något mål. In och utmating i Java utförs av strömmar Vanliga exempel System.out (av klassen PrintStream) Vanligen kopplad till terminalen System.err (av klassen PrintStream) Vanligen kopplad till terminalen System.in (av klassen InputStream) Vanligen ihopkopplad med annan ström som formaterar indatat, ex. BufferedReader, BufferedLineReader, Scanner 10

In- och utmatning(2) Exempel // connect reader to inputstream BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); // read a line and convert to int int num = Integer.parseInt(input.readLine()); // open file for reading FileInputStream stream = new FileInputStream( new File("test.txt")); Scanner scanner = new Scanner(stream); // read from file System.out.println(scanner.nextInt()); 11

Formatering Ofta vill man skriva ut på en viss form double d = 10.0/3.0; System.out.println(d); // 3.3333333333333335 Metoden format i PrintStream kan hjälpa till: System.out.format("Värdet %1.2f är bra grejor.\n", d); // 3,33 Locale.setDefault(Locale.UK); // format adjust itself by looking at default locale! System.out.format("The value %1.2f is indeed good\n.", d); // 3.33 12

Formatering(2) Formatspecificerare är på följande form: %[flagga][bredd]typ Typ Förklaring Flaggor Förklaring d Heltal, decimal form - Vänsterjustering x Heltal, hexadecimal form + Talets tecken skrivs ut f Reellt tal, decimalform blankt Positivt tal inleder med blank e Reellt tal, exponentform, Siffrorna grupperas tre och tre 13 Fler specificerare finns, se Javas API-dokumentation

Datum och tid Klassen Date sparar en tid // num = number of milliseconds since Jan 1, 1970 Date date = new Date(num); Klassen Calendar är mer användbar, och kan ta fram nuvarande tid som ett Date. Calendar cal = Calendar.getInstance(); System.out.format("The time is: %tc \n", cal.gettime()); int minute = cal.get(calendar.minute); 14

Datum och tid(2) DateFormat: en (abstrakt) klass som formaterar datum åt oss DateFormat time = DateFormat.getTimeInstance(); DateFormat date = DateFormat.getDateInstance(); Date now = Calendar.getInstance().getTime(); // note that this is locale dependent System.out.println(time.format(now)); // 13:37:00 System.out.println(date.format(now)); // 2012-nov-14 (Mer kontroll? SimpleDateFormat!) 15

Scanner Scanner: En klass som hjälper oss att hantera inmatning Kopplas mot en InputStream // example usage of scanner Scanner keyboard = new Scanner(System.in); while (keyboard.hasnextint()) { mylist.add(keyboard.nextint()); 16

Hantering av strömmar Filer läses som strömmar För textfiler, använd FileReader resp. FileWriter String filename = "myfile.txt"; FileReader reader = new FileReader(new File(filename)); Scanner scanner = new Scanner(reader); //... scanner.close(); // always close your streams! scanner.nextint(); // error, since scanner + stream is now closed 17

Hantering av (binära) datafiler För binära filer, använd DataInputStream resp. DataOutputStream String filename = "myfile.dat"; DataInputStream input; try { input = new DataInputStream(new FileInputStream(filename)); while (true) { System.out.println(input.readInt()); catch (EOFException e) { System.out.println("Something went wrong while reading:"); e.printstacktrace(); // print the details! finally { input.close(); // always close! 18

Serialisering Det går att spara objekt på fil mellan körningar Java kan platta till ett objekt till en sekvens av bytes Perfekt för att spara Använd strömmarna ObjectInputStream och ObjectOutputStream Kräver att klassen implementerar interfacet Serializable Object readobject(); // casting is needed to be usable void writeobject(object o); ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(new File("test.dat"))); out.writeobject(new Cat("Isaac", 11)); // if Serializable! out.writeobject("hejsan"); // String is Serializable 19