Fundamentale Ideen der Informatik - Canvas

Werbung
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
Herunterladen