Raphael Fischer fischrap@student.ethz.ch 11.05.2014 Informatik II - Übung 10 Raphael Fischer fischrap@student.ethz.ch 11.05.2014.

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

DNA-Array oder DNA-Chip
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS 03/041 Algorithmentheorie 01 - Einleitung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Binäre Bäume Richard Göbel.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren 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.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Geometrisches Divide and Conquer
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
Mergesort Divide and Conquer
Informatikunterricht mit Java
Teil 5: Kollisionsvermeidung & Wegplanung
Rekursion Richard Göbel.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Rekursion mit Listen: Quicksort
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Parallel Matrix Multiplication
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mergesort.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Suchen und Sortieren.
Rekursion – Speicherverwaltung
Zwei Denkansätze zur Klasse Schlange
Felder in Java.
Allgemeine Befehle für die allgemeine Liste
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
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Raphael Fischer Informatik II - Übung 08 Raphael Fischer
Algorithmen und Datenstrukturen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Informatik Kurse
PGdP Tutorstunde 4 Gerald Mahlknecht Technische Universität München Informatik Divide and Conquer.
Grundkurs Informatik 11-13
Arrays of Objects, a 3 part process
 Präsentation transkript:

Raphael Fischer fischrap@student.ethz.ch 11.05.2014 Informatik II - Übung 10 Raphael Fischer fischrap@student.ethz.ch 11.05.2014

Divide and conquer Algorithmen Raphael Fischer 18.02.2019

Divide and conquer: Grundprinzip Teile Problem in mind. zwei Teilprobleme auf Löse diese rekursiv Füge Lösung der Teilprobleme zu Lösung des ursprünglichen Problems zusammen Manchmal aufteilen schwierig Manchmal zusammenfügen schwierig Raphael Fischer 18.02.2019

Divide and conquer: Beispiel 14 Array: 5, 4, -7, 2, 5, 5, -20, 4, 7, -1 Finde den Ausschnitt mit der grössten Summe Divide: Teile Array in zwei Hälften Rekursion gibt Teillösungen Zusammefügen: Wenn grösster Ausschnitt komplett in einer Hälfte: einfach Was, wenn Schnitt ihn Teilt? Für beide Hälften: Finde grössten Abschnitt, der am Schnitt anfängt Meistens so, wenn Array gegeben ist Raphael Fischer 18.02.2019

Divide and conquer: Mergesort Array: 5, 4, -7, 2, 5, 5, -20, 4, 7, -1 Sortiere es Divide: Teile Array in zwei Hälften Rekursion gibt zwei sortierte Arrays Zusammefügen: Zwei Pointer auf Beginn der Teilarrays Schaue, welches Element kleiner ist Füge dieses in neue Liste ein und verschiebe diesen Pointer Gehe zu 2. -7, 2, 4, 5, 5 -20, -1, 4, 5, 7 Achtung Implementation: Was, wenn ein Pointer am Ende angelangt ist? -20 , -7 , -1 , 2, 4, 4, 5, 5, 5, 7 Raphael Fischer 18.02.2019

Divide and conquer: Zeitkomplexität Jede Ebene: ∝𝑛 ∝log 2 𝑛 Laufzeit ist ∝𝑛 log 𝑛 ∈O(𝑛 log 𝑛) Raphael Fischer 18.02.2019

U10.A1) Divide and conquer a) Papieraufgabe b) Implementieren c) Laufzeitmessung Erstellen des Random-Array nicht mitzählen! Plotte gemessene Daten t(n) Plotte zusätzlich n*log(n) Raphael Fischer 18.02.2019

U10.A2) Türme von Hanoi Raphael Fischer 18.02.2019

Nachbesprechung Reversi-Aufgabe Minimax Raphael Fischer 18.02.2019

Nachbesprechung Reversi Aufgabe public class MinimaxWithTime implements ReversiPlayer   {       int myColor;       int oppColor;          long timeout;       long timeLimit;              @Override       public void initialize(int color, long timeout) {           myColor = color;           oppColor = Utils.other(color);           timeLimit = timeout - 10;       } int heuristic(GameBoard gb) {        return gb.countStones(myColor) - gb.countStones(oppColor);   }   Raphael Fischer 18.02.2019

timeout = System.currentTimeMillis() + timeLimit; public Coordinates nextMove(GameBoard gb) { //Actually just a slight variation of the max function       timeout = System.currentTimeMillis() + timeLimit;              Coordinates lastBestC = null;       try {           for(int depth = 0; true; depth++) {               Coordinates bestC = null;               int mx = Integer.MIN_VALUE;                              for(int i = 1; i <= 8; i++)                   for(int j = 1; j <= 8; j++){                       Coordinates coord = new Coordinates(i, j);                       if (gb.checkMove(myColor, coord)) {                           GameBoard hypothetical = gb.clone();                           hypothetical.checkMove(myColor, coord);                           hypothetical.makeMove(myColor, coord);                                              int value = min(hypothetical, depth);                           if(value > mx) {                               mx = value;                               bestC = coord;                           }                       }                   }               if(bestC == null)                   return null;               lastBestC = bestC;           }       }       catch(Exception e){}       return lastBestC;   }    Raphael Fischer 18.02.2019

int max(GameBoard gb, int depth) throws TimeoutException {         if(System.currentTimeMillis() > timeout)               throw new TimeoutException();                      if(depth == 0)               return heuristic(gb);           int mx = Integer.MIN_VALUE;           for(int i = 1; i <= 8; i++)               for(int j = 1; j <= 8; j++){                   Coordinates coord = new Coordinates(i, j);                   if(gb.checkMove(myColor, coord)){                       GameBoard hypothetical = gb.clone();                       hypothetical.checkMove(myColor, coord);                       hypothetical.makeMove(myColor, coord);                                              mx = Math.max(mx, min(hypothetical, depth-1));                   }               }           //If no move available           if(mx == Integer.MIN_VALUE){               if(gb.isMoveAvailable(oppColor))                    return min(gb, depth-1);               else    //Game finished                   return heuristic(gb);           }           return mx;       }   Raphael Fischer 18.02.2019

int min(GameBoard gb, int depth) throws TimeoutException {         if(System.currentTimeMillis() > timeout)               throw new TimeoutException();                      if(depth == 0)               return heuristic(gb);           int mn = Integer.MAX_VALUE;           for(int i = 1; i <= 8; i++)               for(int j = 1; j <= 8; j++) {                   Coordinates coord = new Coordinates(i, j);                   if(gb.checkMove(oppColor, coord)){                       GameBoard hypothetical = gb.clone();                       hypothetical.checkMove(oppColor, coord);                       hypothetical.makeMove(oppColor, coord);                                              mn = Math.min(mn, max(hypothetical, depth-1));                   }               }           //If no move available           if(mn == Integer.MAX_VALUE) {               if(gb.isMoveAvailable(myColor))                    return max(gb, depth-1);               else    //Game finished                   return heuristic(gb);           }           return mn;       }   Raphael Fischer 18.02.2019

Nachbesprechung Alpha-Beta-Tree Alpha: Ich habe schon einen Wert mit α. Mich interessieren nur noch grössere Werte Beta: Ich habe schon einen Wert mit β. Mich interessieren nur noch kleinere Werte Liefere Wert 𝑥 ∈[𝛼, 𝛽] Raphael Fischer 18.02.2019

Alpha-Beta: Aufgabe lösen Alpha: Ich habe schon einen Wert mit α. Mich interessieren nur noch grössere Werte Beta: Ich habe schon einen Wert mit β. Mich interessieren nur noch kleinere Werte Liefere Wert 𝑥 ∈[𝛼, 𝛽] Raphael Fischer 18.02.2019

Alpha-Beta Aufgabe: Lösung Raphael Fischer 18.02.2019

TicTacToe: Erweiterung und Alpha-Beta 4x4-Feld Heuristik: 4-er Reihe gibt 100 Punkte Reihe mit 3 eigenen Steinen gibt 1 Punkt Beispiel: o x o o o x x o x o x x _______ End of game: heuristic = 2 Raphael Fischer 18.02.2019

…viel Spass! Raphael Fischer 18.02.2019