Raphael Fischer fischrap@student.ethz.ch 17.04.2014 Informatik II - Übung 08 Raphael Fischer fischrap@student.ethz.ch 17.04.2014.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Klassen - Verkettete Liste -
Java: Reversi Spielbrett
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Konstruktoren.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
Teil 5: Kollisionsvermeidung & Wegplanung
Template Pattern Richard Göbel.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Dynamische Datentypen
2.4 Rekursion Klassifikation und Beispiele
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Selection-Sort Insertion-Sort Bubble-Sort.
Java-Kurs Übung Besprechung der Hausaufgabe Listen und Mengen Komplexitäten Iteratoren (Durchlaufen von Listen/Mengen)
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Chiemsee-Alpenland Tourismus Reisegewinnspiele 2016 Reisegewinnspiele sind eine gute Möglichkeit, Ihr Haus bei einem großen Publikum bekannt zu machen.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Suchen und Sortieren.
Schnittstellen.
Hello World! Javakurs 2013 Arne Kappen
Rekursion – Speicherverwaltung
Zwei Denkansätze zur Klasse Schlange
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Der Abschluss einer Schlange
Felder in Java.
Kniffelergebnisse.
Allgemeine Befehle für die allgemeine Liste
Rainer Kunigk, Freiburg
Grundkurs Informatik 11-13
Gruppe 2 Carina Fuss Informatik II – Übung 4 Gruppe 2 Carina Fuss Carina Fuss
Raphael Fischer Informatik II - Übung 11 Raphael Fischer
Raphael Fischer Informatik II - Übung 07 Raphael Fischer
Raphael Fischer Informatik II - Übung 03 Raphael Fischer
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Cäsar-Verschlüsselung
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Cäsar-Verschlüsselung
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Raphael Fischer Informatik II - Übung 10 Raphael Fischer
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Genetische Algorithmen
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
Grundkurs Informatik 11-13
Heapsort-Algorithmus
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
 Präsentation transkript:

Raphael Fischer fischrap@student.ethz.ch 17.04.2014 Informatik II - Übung 08 Raphael Fischer fischrap@student.ethz.ch 17.04.2014

U8.A1 a) und b): Binäre Suche Entscheidungsbäume Hier eigentlich kein Baum sondern eine Kette von Entscheidungen Raphael Fischer 02.12.2018

U8.A1 d): Binäre Suche Implementierung Wieder Key-Value-Konzept: public Value find(List<Unit<Key, Value>> haystack, Key needle);   Generics FTW: public interface IBinarySearch<Key extends Comparable<Key>, Value> { Wichtig: Seid euch bewusst, ob end-Pointer past-the end ist oder nicht! Abstrakte Klasse. Konkrete Implementierungen: ArrayList LinkedList Spezielle Klasse für Key-Value Paare Raphael Fischer 02.12.2018

Theorie: Backtracking Raphael Fischer 02.12.2018

Theorie: Backtracking Raphael Fischer 02.12.2018

Theorie: Backtracking Tree-pruning Raphael Fischer 02.12.2018

Backtracking Grundgerüst Funktion, die einen Schritt näher zur Lösung gehen soll: Iteriere durch alle Möglichkeiten für diesen Schritt: 1. Prüfe, ob die Möglichkeit möglich ist Falls ja: Lösung kopieren Schritt in Kopie reinschreiben Rekursion mit Kopie Schritt in Lösung reinschreiben Rekursion Schritt rückgängig machen o d e r Raphael Fischer 02.12.2018

Aufgabe: Sudoku-Backtracking Funktion, die einen Schritt näher zur Lösung gehen soll: Iteriere durch alle Möglichkeiten für diesen Schritt: 1. Prüfe, ob die Möglichkeit möglich ist Falls ja: Lösung kopieren Schritt in Kopie reinschreiben Rekursion mit Kopie Schritt in Lösung reinschreiben Rekursion Schritt rückgängig machen o d e r Raphael Fischer 02.12.2018

U8.A2 Rucksackproblem mit Backtracking Problembeschreibung: k Gegenstände x1, ..., xk; Jeweils bekannter Wert und Gewicht Auswahl von Gegenständen, so dass Gesamtgewicht nicht überschritten wird Optimierungsproblem: Maximieren des Wertes der ausgewählten Gegenstände Raphael Fischer 02.12.2018

U8.A2 Rucksackproblem und Backtracking Raphael Fischer

U8.A2 a) Lösung eindeutig? Beweis Beweis-Aufgabe. Tipp: Etwas nachdenken und Vermutung anstellen Entweder Gegenbeispiel Falls nicht möglich: Beweis Raphael Fischer 02.12.2018

U8.A2 b) Implementierung: Bruteforce public interface IRucksack {          public Selection findBest(ArrayList<Integer> values,               ArrayList<Integer> weights, int maxWeight);   } Alle möglichen Kombinationen ausprobieren Raphael Fischer 02.12.2018

Summiert diejenigen Einträge in addends auf, bei denen das Bit 1 ist U8.A2 b) Implementierung: Bruteforce Nützlich: Selection-Klasse: public class Selection {       private int bits;       private int size;          public void setBits(int bits)//...       public int bits()//...       public void set(int index, boolean value)//...       public boolean get(int index) {           if (index < 0 || index >= size) {               throw new IndexOutOfBoundsException();           }           int mask = 1 << index;           return (bits & mask) != 0;       }       public int sum(ArrayList<Integer> addends)//...   }   Summiert diejenigen Einträge in addends auf, bei denen das Bit 1 ist Raphael Fischer 02.12.2018

U8.A2 b) Implementierung: Bruteforce Wie durch alle möglichen Selektionen iterieren? Binärzahl mit #Stellen = #Gegenstände Hochzählen von 00…000 bis 11…111 Selection benutzen Raphael Fischer 02.12.2018

U8.A2 c) Backtracking Iteration Gewicht 12 kg 1 kg 4 kg 2 kg Wert $4 $2 $10 $1 Genommen? Nein Ja Todo Funktion, die einen Schritt näher zur Lösung gehen soll: Iteriere durch alle Möglichkeiten für diesen Schritt: 1. Prüfe, ob die Möglichkeit möglich ist Falls ja: Lösung kopieren Schritt in Kopie reinschreiben Rekursion mit Kopie Hier nur zwei Möglichkeiten: Nehme es nehme es nicht Lösung = Selection Schritt in Lösung reinschreiben Rekursion Schritt rückgängig machen o d e r Raphael Fischer 02.12.2018

Reversi Raphael Fischer 02.12.2018

U8.A3: Reversi (Teil 2): checkMove() Implementation von ICheckMove ohne das Framework Alle 8 Richtungen durchgehen. Schöne Variante: for (int dx=-1; dx<=1; dx++) {       for (int dy=-1; dy<=1; dy++) {           if (x == 0 && y == 0) continue;           //Prüfe, ob es in diese Richtung eine Reihe von Gegner-Steinen gibt und dann ein eigener Nützliche Funktion: gb.getOccupation(coordinates) == GameBoard.empty Raphael Fischer 02.12.2018

U8.A3: greedyPlayer() Einfacher Computergegner Tipps Schaut einen Zug voraus Bester Zug: Zug, nach dessen Durchführung man maximal mehr Steine besitzt als der Gegner Tipps Code von letztem Mal recyceln Hier dürft ihr GameBoard.checkMove() verwenden Für alle möglichen Züge: Board kopieren (mit gb.clone()) Zug nochmal überprüfen Zug ausführen Bewerten mit gb.countStones(color) Raphael Fischer 02.12.2018

…viel Spass! Raphael Fischer 02.12.2018