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