Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Raphael Fischer fischrap@student.ethz.ch 17.04.2014 Informatik II - Übung 08 Raphael Fischer fischrap@student.ethz.ch 17.04.2014."—  Präsentation transkript:

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

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

3 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

4 Theorie: Backtracking
Raphael Fischer

5 Theorie: Backtracking
Raphael Fischer

6 Theorie: Backtracking
Tree-pruning Raphael Fischer

7 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

8 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

9 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

10 U8.A2 Rucksackproblem und Backtracking
Raphael Fischer

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

12 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

13 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

14 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

15 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

16 Reversi Raphael Fischer

17 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

18 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

19 …viel Spass! Raphael Fischer


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

Ähnliche Präsentationen


Google-Anzeigen