Slides - ETH Zürich

Werbung
Informatik II (D-ITET)
Übungsstunde 2
[email protected]
Distributed Systems Group, ETH Zürich
Ablauf
 Besprechung der Vorlesung
 Übungsbezogene Themen: Bäume, Rekursion, Sortieren
 Zeit zum Programmieren / für Demos
Informatik II
3
Informatik II
4
Informatik II
5
Ablauf
 Besprechung der Vorlesung
 Übungsbezogene Themen: Bäume, Rekursion, Sortieren
 Zeit zum Programmieren / für Demos
Übung 2
1. Wurzelbäume
 Trennung von Struktur und Darstellung
 Klammerdarstellung
 Darstellung in eingerückter Form (Skript Folie 170)
2. Rekursives Sortieren
 Ausgabe von Objekten mittels toString()
 Rekursiver Sortieralgorithmus
3. Binärbäume als Arrays
 Wichtig: checkTree
Übung 2 – Aufgaben 1 und 3
 Bäume in der Informatik...
vs.
Images:
http://kitabundsunnah.wordpress.com/, http://www.cs.lmu.edu/courses
Übung 2 – Aufgaben 1 und 3
Übersicht: Verschiedene Arten von Bäumen (mit Demos!)
 Allgemeiner Baum:
Jeder Knoten hat x Kinder
 Binärbaum:
Jeder Knoten hat maximal 2 Kinder
 Binärer/Triärer Suchbaum:
Geordnetes Speichern von Knoten
 Selbstbalancierender Suchbaum: Verhindert Baum-Degeneration
(z.B. Rot-Schwarz Baum)
 Trie (von «Retrieval»):
(z.B. Suffixbaum)
Nicht Knoteninhalt, sondern
Knotenposition ist wichtig
d.h.: Kanten enthalten Information!
Image:
Informatik II
Wikipedia
10
Durchlaufen von Bäumen...
preOrder(node) {
print(node)
if left != null then preOrder(left)
if right != null then preOrder(right)
}
 Pre-Order «Aussen» rumlaufen, Knoten beim «links» vorbeilaufen drucken
8, 3, 1, 6, 4, 7, 10, 14, 13
 In-Order «Aussen» rumlaufen, Knoten beim «unten» vorbeilaufen drucken
 Post-Order «Aussen» rumlaufen, Knoten beim «rechts» vorbeilaufen drucken
Informatik II
11
Durchlaufen von Bäumen...
inOrder(node) {
if left != null then preOrder(left)
print(node)
if right != null then preOrder(right)
}
 Pre-Order «Aussen» rumlaufen, Knoten beim «links» vorbeilaufen drucken
8, 3, 1, 6, 4, 7, 10, 14, 13
 In-Order «Aussen» rumlaufen, Knoten beim «unten» vorbeilaufen drucken
1, 3, 4, 6, 7, 8, 10, 13, 14
 Post-Order «Aussen» rumlaufen, Knoten beim «rechts» vorbeilaufen drucken
Informatik II
12
Durchlaufen von Bäumen...
postOrder(node) {
if left != null then preOrder(left)
if right != null then preOrder(right)
print(node)
}
 Pre-Order «Aussen» rumlaufen, Knoten beim «links» vorbeilaufen drucken
8, 3, 1, 6, 4, 7, 10, 14, 13
 In-Order «Aussen» rumlaufen, Knoten beim «unten» vorbeilaufen drucken
1, 3, 4, 6, 7, 8, 10, 13, 14
 Post-Order «Aussen» rumlaufen, Knoten beim «rechts» vorbeilaufen drucken
1, 4, 7, 6, 3, 10, 13, 14, 8
Informatik II
13
Übung 2 – Aufgabe 3
 Speichern von Binaerbaeumen als Arrays
[ 2 4 1 6 _ 3 4 9 5 4 ]
Geht das auch mit allgemeinen (=nicht-binaeren) Baeumen?
 Ueberpruefung der «Baumeigenschaft» eines Arrays:
[ 2 _ 1 6 _ 3 4 9 5 4 ] ist kein Baum!
Warum?
Wie stellt man das programmatisch fest?
Übung 2 – Aufgabe 2
 Kernidee der Rekursion:
 Gegeben:
Reduzieren einer Probleminstanz
auf eine kleinere Probleminstanz.
Liste mit n Elementen
Um eine Teilliste mit i Elementen absteigend zu sortieren,
brauche ich nur...
... die ersten (i – 1) Elemente absteigend sortieren
... das grösste Element im Rest der Liste suchen
... und an die erste Stelle des Restes der Liste setzen
 Die leere Liste ist selbstverständlich schon sortiert... ;-)
[
[
[
[
[
[
[
[
[
[
[
[
[
5
5
5
5
5
5
5
9
9
9
9
9
9
1
1
1
1
1
1
1
1
1
5
5
5
5
9
9
9
9
9
9
9
5
5
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
1
1
]
]
]
]
]
]
]
]
]
]
]
]
]
recursiveSort(4)
recursiveSort(3)
recursiveSort(2)
recursiveSort(1)
recursiveSort(0)
Ist sortiert!
2 <- findLargest(0,3)
swap(0,2)
2 <- findLargest(1,3)
swap(1,2)
3 <- findLargest(2,3)
swap(2,3)
Kein swap mehr noetig...
 Liste absteigend sortiert!
 Zufallszahlengeneratoren
Random rng = new Random(System.currentTimeMillis());
rng.nextInt(555);
12.05.2011
Informatik II
17
Ablauf
 Besprechung der Vorlesung
 Übungsbezogene Themen: Bäume, Rekursion, Sortieren
 Zeit zum Programmieren / für Demos
Projekt: Bäume und Rekursion
 Idee: Um eine Liste von Zahlen zu sortieren, könnten wir sie in einen
binären Suchbaum einfügen und dann in-order auslesen...
 Archiv mit Programmgerüst habt ihr im Posteingang...
 Eingeführte Java Konzepte:
 Interfaces: Kurzeinführung
 Generics: java.util.List, java.util.ArrayList
Informatik II (D-ITET)
Übungsstunde 2
[email protected]
Distributed Systems Group, ETH Zürich
Herunterladen