Informatik II Übung 7

Ähnliche Dokumente
Java Einführung Abstrakte Klassen und Interfaces

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Datenstrukturen & Algorithmen

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Informatik II, SS 2014

Suchen und Sortieren

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

368 4 Algorithmen und Datenstrukturen

13. Binäre Suchbäume

Geordnete Binärbäume

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

2 Java: Bäume. 2.1 Implementierung von Bäumen. 2.2 Implementierung eines binären Suchbaums. 2.3 Traversierung von Bäumen

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Objektorientierte Programmierung

Algorithmen und Datenstrukturen Suchbaum

Java Einführung Collections

Binärbäume. Prof. Dr. E. Ehses,

8. Generics Grundlagen der Programmierung 1 (Java)

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Teil V. Generics und Kollektionen in Java

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Höhere Programmierkonzepte Testklausur

Objektorientierte Programmierung

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Algorithmen und Datenstrukturen 07

5.6 Vererbung. Vererbung

Probeklausur: Programmierung WS04/05

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Gebundene Typparameter

Tutorium Algorithmen & Datenstrukturen

Schnittstellen implementieren am Beispiel Suchbaum

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Einführung in die Programmierung

Java - Programmierung - Objektorientierte Programmierung 1

2.4.3 Polymorphie (Wiederholung von Alp2)

Handbuch für die Erweiterbarkeit

3 Objektorientierte Konzepte in Java

Typumwandlungen bei Referenztypen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Kapiteltests zum Leitprogramm Binäre Suchbäume

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Einstieg in die Informatik mit Java

Programmieren in Java

Client-Server-Beziehungen

Binäre Bäume Darstellung und Traversierung

3 Objektorientierte Konzepte in Java

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Javakurs für Anfänger

Java Schulung (Java 2 Java Development Kit 5 / 6)

Probeklausur: Programmierung WS04/05

Kapitel 6. Vererbung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prinzipien Objektorientierter Programmierung

Kapitel 6. Vererbung

Studentische Lösung zum Übungsblatt Nr. 7

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Computeranwendung und Programmierung (CuP)

1 Polymorphie (Vielgestaltigkeit)

Kap. 4.2: Binäre Suchbäume

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

JAVA KURS COLLECTION

Überschreiben von Methoden

Generische Datenstrukturen

Repetitorium Informatik (Java)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Algorithmen und Datenstrukturen

Abstrakte Datentypen.

Java-Schulung Grundlagen

Objektorientierte Programmierung

12) Generische Datenstrukturen

Kapitel 6. Vererbung

Programmieren in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

1. Grundlegende Konzepte in Java (6 Punkte)

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Algorithmen und Datenstrukturen

12) Generische Datenstrukturen

Suchen und Sortieren Sortieren. Heaps

Factory Method (Virtual Constructor)

Vererbung & Schnittstellen in C#

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Einführung in (Binäre) Bäume

Transkript:

Informatik II Übung 7 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 18.04.2013 Informatik II 1

Ist Schlüsselwort this nötig? public class Triangle extends GeometricObject { private int base; private int height; public int area() { return (this.base*this.height)/2; } public Triangle(int base, int height) { this.base = base; this.height = height; }

4

Tipps zu U7.A1 Generics Object U6 Generics Alle Klassen erben von Object (abstract base class) MyType cast beim Ausnehmen aus der Kontainer (hier List) MyType Elem = (MyType) Kollektion.getNext(); sowas kann in Laufzeit zur ClassCastException führen. Besser so: Object obj = Kollektion.getNext(); if( obj instanceof MyType ) dosomething( (MyType)obj ); mylist MyType next MyType next MyType next 5

Tipps zu U7.A1 Generics U7 Generics Kollektion mit Java Generics (generic class) class MyPair<T> { } public T first, second; Ein Objekt pair vom Typ MyPair<Float> enthält zwei Float-Referenzen: pair.first und pair.second Ein Objekt pair vom Typ MyPair<Int> enthält zwei Int-Referenzen: pair.first und pair.second Vorteil von generics: Typenprüfung durch Compiler auch bei der Aufnahme in den Kontainer d.h. kein dynamic cast nötig bei Ausnahme 6

Tipps zu U7.A1 Generics ArrayList Container Zweifach geschachtelt: ArrayList enthält Gruppen ArrayList<ArrayList<Student>> groups; Gruppen enthalten Studenten ArrayList<Student> group; Filter: Testat erhalten kann 7

Tipps zu U7.A1 Generics a. FilterFactory und (leere) IFilter-Implementierung b. Input: ArrayList von Gruppen, die eigentlich ArrayLists von Studenten sind c. Output: ArrayList von Studenten, die das Testat erhalten. d. Implementieren von filterraw e. Keine Generics: ArrayList als Raw Type (Compilerwarnungen) f. Alle Studenten rausfiltern, die nicht genug Punkte fuer das Testat haben... g. Beim Ausnehmen zuerst auf ArrayList, dann auf Student casten h. Implementieren von filtergeneric i. ArrayList<T> zeigt an, was darin gespeichert ist j. Type checking beim Hinzufuegen zur Liste k. ArrayList<T> liefert direkt Objekte des korrekten Typs (kein casting mehr nötig) 8

Tipps zu U7.A2 Binäre Bäume Jeder Knoten enthält Zeiger auf: W Linker Nachfolger Rechter Nachfolger (Vater) Rekursive Traversierung: L Pre-order: W-L-R In-order: L-W-R R Post-order: L-R-W 9

Tipps zu U7.A2 Warum nur Binäre Bäume? Allgemeine Bäume können auch als Binärbaume representiert werden: The binary tree can be thought of as the original tree tilted sideways, with the black left edges representing first child and the blue right edges representing next sibling.... This is called left-child-right-sibling binary tree (LCRS tree) http://en.wikipedia.org/wiki/binary_tree 10

8 Tipps zu U7.A2 Binäre Suchbäume 3 10 Struktur: Die Knoten enthalten Datenelemente, oder Zeigers auf Datenelemente (record) Jeder Knoten hat auch ein Schlüsselattribut (key) Die Menge der Schlüsselattribute ist total geordnet (a b) Suchen erfolgt durch Schlüsselvergleich 1 6 14 4 7 13 Für jeden Knoten mit Schlüsselattribut s gilt: Alle Schlüssel im linken Unterbaum sind kleiner als s Alle Schlüssel im rechten Unterbaum sind grösser als s Die Unterbäume sind auch binäre Suchbäume Siehe Elementare Methoden in Folien von Vorlesung 7! Was passiert wenn mehrere Objekte mit dem selben Schlüssel existieren? 11

Tipps zu U7.A2 Binäre Suchbäume Teilaufgabe a (von Hand) Löschen, ersetzen durch kleinstes Element des rechten Teilbaums Teilaufgabe b Implementation eines binären Suchbaums IBinarySearchTreeUtils<T> UtilsFactory.create() soll ein Utils für den Typ String erzeugen new MyTreeUtils<String>() UnlinkSmallestResult<T> enthält das Resultat aus unlinksmallest(): das kleinste Element und den Restbaum (also ein Paar) 12

Tipps zu U7.A2 Binäre Suchbäume Methoden zu implementieren: height, isleaf, hasonechild preorder, inorder, postorder insert find unlinksmallest & remove 13

Tipps zu U7.A3 Reversi Mit dieser Aufgabe startet eine Serie, die zum Ziel hat, ein Reversispieler zu implementieren. Spielregeln und weitere Infos: http://www.vs.inf.ethz.ch/edu/fs2012/i2/reversi Login für reversi-papers: username: i2bib password: reversi 14

Tipps zu U7.A3 Reversi Reversi-Turnier am Ende des Semesters Super Preise! Im Falle von Probleme mit dem Framework: 1. Dokumentation 2. Ich 3. Simon Mayer (simon.mayer@inf.ethz.ch) 15

Tipps zu U7.A3 Reversi Zuerst sollen die Grundprinzipien des Spiels implementiert werden Später werden Strategien entwickelt, die das Spiel des Computer-Players verbessern sollen Optimale Suche (MinMax, Alpha-Beta, ) Spieltheorie 16

Tipps zu U7.A3 Reversi Sourcen zu finden auf der Reversi-Webseite Beachtet die Installationsanleitung (Eclipse >3.2) HumanPlayer in u7a3 Trick: Macht euch erst eine Abstrakte Klasse (PlayerBase o.ä.) Implementiert darin eure allgemein nützliche Helferfunktionen für eure verschiedenen Players 17

Tipps zu U7.A3a Spielt! Framework aufsetzen Spielt eine Partie gegen euren Teammate (oder euch selbst) Snapshot schicken 18

Tipps zu U7.A3b ReversiPlayer package reversi; public interface ReversiPlayer { void initialize(int mycolor, long timelimit); Coordinates nextmove(gameboard gb); } package randoomteam; public abstract class PlayerBase implements ReversiPlayer { private int m_color = 0; private long m_timeout = 0; protected final int getcolor() { return m_color; } protected final long gettimout() { return m_timeout; } protected abstract void foo(); } package randoomteam; public class RandomPlayer extends PlayerBase { protected void foo() { } } 19

Tipps zu U7.A3b RandomPlayer Programmiert einen Computerspieler, der zufällig einen gültigen Zug auswählt Mögliche Strategie (naiv) Zug wird erst zufällig gewählt Dann wird überprüft, ob er gültig ist oder nicht wenn ja --> return wenn nein -->? Mögliche Strategie In einem Array alle möglichen Züge markieren Zufällig einen Zug aus diesem Array wählen extrem viel effizienter GameBoard.checkMove() Standardansatz für später Züge bewerten 20

viel Spass! 21