Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Bella Kruse Geändert vor über 5 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.