Fundamentale Ideen der Informatik PH Weingarten • Sommersemester 2014 Paul Libbrecht • CC-BY Vorlesung 7: Datenstrukturen Themenkarte Verschlüsselung Netzwerk Programmverlauf Java Instruktionen n Neumann Modell Betriebsystem Versionierung Maschinelles Lernen Datenstrukturen Komplexität Repräsentationen Komprimierung Klassen & Instanzen Suche, Index Darstellungsvideo • Themenverteilung (link) • Heute: Netzwerk Menü • Prüfungsskizze • Java Interfaces, Datenstrukturen • Arrays • Listen, andere Sammlungen • Hash • Abbildungen ihre Prüfung • Geteilt • ½ Fundamentale Ideen ½ Ruby-Programmierung • Ein Portfolio für jedes Fach • Einen Überblick über das Fach • F: ein Schwerpunkt: von der Vorlesung hinaus • P: ein programmiertes Projekt • Sie beschreiben das Thema • wir stellen Fragen fragen: detaillierte Ideen Erklärung, in einem Debug ein Programm erklären, (P): ein Stück Programm schreiben... Java “Interfaces” • Fast wie eine Klasse • aber keine Instanzen, kein Konstruktor, keine Eigenschaften • eine Sammlung von Methoden • Pflichtenheft für Klassen • zB java.util.Comparable (link): eine Methode public int compareTo(Object o) vergleicht selbst mit o ↳DemoComparable Datenstrukturen • Eine Sammlung von Daten • typisch mit Objekte einer oder zwei Klassen • mit Variablen gesammelt • leicht zugänglich für bestimmte Algorithmen • in Reihe, in Gruppen, in Verbindungen, ... Java Arrays • Array: Englisch für Matriz • Reihe von Objekte, feste Größe int[] zahlen = new int[5]; ↳DemoArrays • wie Variablen: • schreiben: zahlen[2] = 314159; • lesen: zahlen[3]+zahlen[2]; 343 4 0 0 -45 4 0 4 • Grösse (lesen) if(i < zahlen.length) {…} 0 1 2 3 4 Java Arrays • Array: Englisch für Matriz • Reihe von Objekte, feste Größe int[] zahlen = new int[5]; ↳DemoArrays • wie Variablen: • schreiben: zahlen[2] = 314159; • lesen: zahlen[3]+zahlen[2]; 343 4 0 314 01 -45 4 0 4 59 • Grösse (lesen) if(i < zahlen.length) {…} 0 1 2 3 4 Java Arrays • Array: Englisch für Matriz • Reihe von Objekte, feste Größe int[] zahlen = new int[5]; ↳DemoArrays • wie Variablen: • schreiben: zahlen[2] = 314159; • lesen: zahlen[3]+zahlen[2]; 0 314 01 -45 4 0 0 1 2 3 4 314 1 59 343 4 4 59 • Grösse (lesen) if(i < zahlen.length) {…} Java Arrays • Array: Englisch für Matriz • Reihe von Objekte, feste Größe int[] zahlen = new int[5]; ↳DemoArrays • wie Variablen: • schreiben: zahlen[2] = 314159; • lesen: zahlen[3]+zahlen[2]; 314 01 -45 4 0 1 2 3 4 314 1 -45 4 0 0 59 343 4 4 59 • Grösse (lesen) if(i < zahlen.length) {…} Java Arrays • Array: Englisch für Matriz • Reihe von Objekte, feste Größe int[] zahlen = new int[5]; ↳DemoArrays • wie Variablen: • schreiben: zahlen[2] = 314159; 370 5 • lesen: zahlen[3]+zahlen[2]; -45 4 0 2 3 4 =31 314 01 1 314 1 -45 + 4 0 0 59 343 4 4 59 • Grösse (lesen) if(i < zahlen.length) {…} Ausflug: Arrays in C • C Sprache: Urgrossvater von Java • noch sehr benutzt, besonders als C++ • Arrays? Addressen • Variablen x von Typ Pointer String p: char c = ‘A’; char *p = &c; • lesen: printf(“\n %p”, p) ; *p==’A’ • schreiben *p = ‘B’ • Effekte von Array Overflows Listen • Flexibler als Array • als Objekt mit Methoden • mit TypParametern List<String> l = new ArrayList<String>(); l.add("Friedrich"); l.add("der"); l.add("Grosse"); for(int i=0;i<3;i++) { String s= l.get(i); System.out. println(s); } ↳DemoList Listen List<String> l = new • FlexiblerArrayList<String>(); als l.add("Friedrich"); Array l.add("der"); l.add("Grosse"); • als Objekt mit for(String s: l) { Methoden System.out. • mit Typ- println(s); } Parametern ↳DemoList Komplexität von Listenoperatonen • Liste von Größe n ↳DemoBigList • Komplexitäten: LinkedList ArrayList lesen Position i n 1 einfügen am Pos i 1 n durchgehen n n List-Implementationen • Welches Java Code macht Listen? • es gibt Arrays und Variablen… also? • zwei Strategien: • Ein Entry Objekt, zum Nachbarn verlinkt • Eine Array von Objekt • unterschiedliche Vorangehenweise • einfügen, lesen, suchen, kopieren... ↳DemoList Idee Hash Eine Funktion die Objekte einer Klasse mit einem “Ziffer” zusammenfasst so dass zwei Objekte mit den selben Werten die selbe Zusammenfassungen haben heisst eine Hashfunktion. • leicht für jedes Objekt zu lagern • Um den Vergleichen zu kürzen: • a.equals(b) ? • unterschiedlichen Hash => nicht gleich! • Aufgabe: Fundamental? Hash Praktisch • in Java, jedes Objekt hat ein int hashCode • demo • MD5, SHA1, PGP... • zB um Downloads zu prüfen • zB von http://tomcat.apache.org/ download-70.cgi ↳DemoHash Abbildungen • von einer Grundmenge zu einer Zielmenge • von java.util.Map (link) spezifiziert • schreiben: map.put(“max”, 136); • lesen: map.get(“max”); • durchgehen: map.entrySet() map.keySet() • wie kann mann eine Abbildung String => String gestalten? Map<String,String> Hashmap • Idee: per “Gruppen” sammeln Gruppe ist ein Interval von Hashen • Lineare Suche nur in kleinen Mengen • umorganisieren wenn nötig (zB zuviel in einer Gruppe) ↳DemoMap Andere Maps? • zB mit Ordnung der Keys • wie ein Wörterbuch • unterschiedliche Anforderungen • Performanz für Operationen (durch Komplexität begrenzt, hängt von den Daten ab!) • soll sie von vielen parallel benutzt? • implements Map: alle Methoden • Aufgabe: fünf herausfinden und vergleichen Take Away • Datenstrukturen organisieren Information • damit es besser operiert wird • lesen, schreiben, re-organisieren • Essenz um machbares Software • Viele andere Beispiele: Queue, Stack, TreeSet, B-Tree, Heaps... • Weiter: • viele viele Vorlesungen nur darüber • mehrere Visualisierungen können helfen danke schön https://canvas.instructure.com/courses/930416