Informatik II Übung 2

Ähnliche Dokumente
Informatik II Übung 2. Pascal Schärli

Informatik II Übung 2

Informatik II Übung 3. Pascal Schärli

Informatik II Übung 2. Gruppe 4. Lukas Burkhalter (Folien teils von Christian B. und Leyna S.)

Informatik II Übung 3

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

Kapitel 12: Induktive

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B4.1 Definitionen und Eigenschaften. B4.2 Traversierung. B4.

Tutoraufgabe 1 (Listen):

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

9. Natürliche Suchbäume

Informatik II Übung 10. Benjamin Hepp 10 May 2017

Informatik II Übung 5

Informatik II - Übung 07

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Informatik II Übung 7. Gruppe 2 Carina Fuss

elementare Datenstrukturen

Übung 4: Die generische Klasse AvlBaum in Java 1

Mengen. Binäre Suchbäume. Mengen: Anwendungen (II) Mengen: Lösung mit Listen 12/3/12. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Bäume 1. Thomas Röfer

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume

Informatik II Vorlesung am D-BAUG der ETH Zürich

Algorithmen und Datenstrukturen

Einführung in die Informatik 2

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 139

Informatik II Übung 7 Gruppe 3

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

13. Bäume: effektives Suchen und Sortieren

Software Entwicklung 1

Informatik II Prüfungsvorbereitungskurs

13. Bäume: effektives Suchen und Sortieren

Übung 1: Object Inspector

Informatik II - Übung 12

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

5 Bäume. 5.1 Suchbäume. ein geordneter binärer Wurzelbaum. geordnete Schlüsselwertmenge. heißt (schwach) sortiert, g.d.w. gilt:

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Informatik II Übung 5 Gruppe 4

Probeklausur zur Vorlesung

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Software Entwicklung 1

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Semestralklausur Informatik I - Programmierung

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1

Geordnete Binärbäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

7. Arrays. Beim Deklarieren und Initialisieren der Liste bräuchte man oft zueinander sehr ähnlichen Code:

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

Bäume. Martin Wirsing. Ziele. Implementierung von Knoten. Bäume (abstrakt) Standardimplementierungen für Bäume kennen lernen

Aufgaben, Hilfestellungen und Musterlösungen zum Modul 5 Druckversion

Algorithmen und Datenstrukturen

Transkript:

Informatik II Übung 2 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös und Simon Mayer gabor.soros@inf.ethz.ch, simon.mayer@inf.ethz.ch 7.3.2013 1 1

Inhalt Administratives Nachbesprechung U1 Vorbesprechung U2 Bäume Traversierung Speicherung in Array Informatik II

Abgabe Ordnerstruktur beibehalten u1 u1a1 Mult.java Tests.java Nicht zu viele Dateien abgeben! Nur Source Dateien, d.h. *.java Keine *.class Dateien Keine Versteckte Dateien (beginnen mit.) Keine html-files mit Dokumentation -> Im Code ist okey. Betreff: Info2-U[xx]-G[yy]-[Nachname A]-[Nachname B] wird zu Info2-U01-G01-Mustermann1-Mustermann2 Theorie nur in *.pdf oder *.txt Informatik II

Gruppen 4

Wo liegt der Fehler? Quelle: G02 Informatik II

Wo liegt der Fehler? OK!! Informatik II

Besprechung U1 Genau lesen Geometrische Reihe Bei Abschätzung nur relevante Terme beachten 7

Hinweise U2 1. Wurzelbäume Trennung von Struktur und Darstellung Klammerdarstellung Darstellung in eingerückter Form 2. Rekursives Sortieren Ausgabe von Objekten mittels tostring() Rekursiver Sortieralgorithmus 3. Binärbäume als Arrays Wichtigste Sache: checktree() 8

Bäume - Binärbaum: wenn jeder Knoten höchstens zwei Kindknoten besitzt - Voller Baum: kein Halbblatt existiert - Vollständiger Baum: alle Blätter haben die selbe Tiefe - Entarteter Baum: unbalancierter Baum, enthält nur ein Pfad - Höhe A B E Aufgabe: Umgang mit verschiedenen Darstellungen C D 9

Traversieren von Bäumen Quelle: 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 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 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, 13, 14, 10, 8 13

Hinweise U2.A2 Sortieren Konstruktor Array von zufällig generierten Zahlen erzeugen Random Klasse verwenden (package java.util) import java.util.random; //RandomGenerator erzeugen: Random r = new Random(); //Array erzeugen... //1 random number generieren: r.nextint(1000); tostring() (Format in Javadoc vorgegeben) String s = ""; for ( int i=0; i<array.length, i++ ) return s; 14

Hinweise U2.A2 Sortieren recursivesort(int until) Zuerst nachdenken, dann programmieren.. Aufruf aus sort() mit array.length Kernidee der Rekursion: Reduzieren einer Probleminstanz auf eine kleinere Probleminstanz. Gegeben: Liste mit n Elementen Um eine Teilliste mit i Elementen absteigend zu sortieren, brauche ich nur...... die ersten (i 1) Elemente absteigend sortieren... das groesste Element im Rest der Liste suchen... und an die erste Stelle des Restes der Liste setzen Die leere Liste ist selbstverständlich schon sortiert... ;-) 15

[ 5 1 9 2 ] [ 5 1 9 2 ] [ 5 1 9 2 ] [ 5 1 9 2 ] [ 5 1 9 2 ] [ 5 1 9 2 ] [ 5 1 9 2 ] [ 9 1 5 2 ] [ 9 1 5 2 ] [ 9 5 1 2 ] [ 9 5 1 2 ] [ 9 5 2 1 ] [ 9 5 2 1 ] Animation von Simon Mayer recursivesort(4) recursivesort(3) recursivesort(2) recursivesort(1) recursivesort(0) Ist sortiert! 9 <- findlargest(0,3) Swap 5 <- findlargest(1,3) Swap 2 <- findlargest(2,3) Swap Kein swap mehr noetig... àliste absteigend sortiert! 16

Hinweise U2.A3 Binärbaum als Array Binärbäume kann man leicht in einem Array speichern, wenn dieses geeignet interpretiert wird. Die Idee besteht darin: Die Wurzel an Index 0 des Arrays zu setzen und Die beiden direkten Nachfolger von i an den Positionen 2i + 1 und 2i + 2 zu speichern Wie gross ist das Array, welches den Binärbaum speichert? 2Höhe-1 array.length < 2Höhe 17

Hinweise U2.A3 Binärbaum als Array char[] tree = new char[7]; D B A F C E tree[0] = A ; tree[1] = B ; tree[2] = C ; tree[3] = D ; tree[4] = ; tree[5] = F ; tree[6] = E ; 18

Hinweise U2.A3 Binärbaum als Array tostring() Idee: tostring() ruft tostring(int node, String identation)auf z.b. tostring(0, ); checktree() Idee: Wurzel an Index 0 Direkte Nachfolger von i an 2i + 1 und 2i + 2 2Höhe-1 array.length < 2Höhe Prüfen ob das für das übergebene Array erfüllt ist Teste: Jedes Element braucht einen Vater "The root is its own father." Was passiert mit Leeren Knoten? 19

viel Spass! 20