Informatik II - Übung 11

Ähnliche Dokumente
Informatik II - Übung 11

Informatik II (D-ITET) Übungsstunde 11,

Informatik II Übung 11 Gruppe 3

Informatik II - Übung 10

Informatik II Übung 11. Pascal Schärli

Informatik II - Übung 10

Informatik II Übung 9. Pascal Schärli

Informatik II Übung 09. Benjamin Hepp 3 May 2017

Informatik II Übung 09

Informatik II - Tutorium 12

Informatik II - Übung 12

Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT

Übung Algorithmen und Datenstrukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Informatik II - Übung 08

Informatik II - Übung 07

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmus Analyse. Johann Basnakowski

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Übung Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen

Informatik II - Übung 08

Informatik II - Übung 07. Christian Beckel

II.3.1 Rekursive Algorithmen - 1 -

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Übung Algorithmen und Datenstrukturen

Informatik II Übung 10. Pascal Schärli

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Datenstrukturen und Algorithmen (SS 2013)

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016

Komplexität von Algorithmen OOPM, Ralf Lämmel

Algorithmen und Datenstrukturen

Komplexität von Algorithmen:

Informatik II Übung 10. Benjamin Hepp 10 May 2017

Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Backtracking mit Heuristiken

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Übung Algorithmen und Datenstrukturen

Übung Algorithmen I

Algorithmen und Datenstrukturen

3. Übungsblatt zu Algorithmen I im SoSe 2017

Prüfung Algorithmen und Datenstrukturen I

Grundlagen: Algorithmen und Datenstrukturen

Übung Algorithmen I

Übung Algorithmen und Datenstrukturen

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

Anwendungsbeispiel MinHeap

Algorithmen und Datenstrukturen

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

Komplexität von Algorithmen

Probeklausur zur Vorlesung

Ziele. Kapitel 10: Komplexität von Algorithmen und Sortierverfahren. Beispiel: Lineare Suche eines Elements in einem Array (1)

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 7. Entrekursivierung

Übung Algorithmen und Datenstrukturen

Sortieren & Co. KIT Institut für Theoretische Informatik

Algorithmen. Sortieren durch Auswählen, Sortieren durch Mischen und Vergleich der Laufzeit. Abschätzung der Laufzeit eines Algorithmus, O-Notation.

Rekursive Funktionen und ihre programmtechnische Umsetzung

Übung Algorithmen und Datenstrukturen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Algorithmen und Datenstrukturen 1 Kapitel 5

Rekursive Funktionen

Informatik II Prüfungsvorbereitungskurs

Informatik II Übung 2. Pascal Schärli

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Abschnitt 19: Sortierverfahren

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Programmieren und Problemlösen

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1-3. Seminar -

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Datenstrukturen & Algorithmen

Transkript:

Informatik II - Übung 11 Christian Beckel beckel@inf.ethz.ch 15.05.2014 Blatt 10 1) Merge sort 2) Türme von Hanoi 3) Reversi: alpha-beta-suche Außerdem: Sortierverfahren und ihre Komplexität Christian Beckel 15/05/14 2

U10.A1: Merge sort (manuell) 21 15 9 63 45 44 8 88 98 67 45 6 62 21 15 63 9 45 44 88 8 98 67 45 6 62 63 21 15 9 88 45 44 8 98 67 45 6 62 88 63 45 44 21 15 9 8 98 67 62 45 6 98 88 67 63 62 45 45 44 21 15 9 8 6 Christian Beckel 15/05/14 3 U10.A1: Merge sort (Pseudo-Code: sort) ArrayList sort (ArrayList unsorted, int begin, int end ) if ( end - begin == 0 ) return new ArrayList ( 0 ) if ( end - begin == 1 ) ArrayList result = new ArrayList ( 1 ) result.add ( unsorted[begin] ) return result // divide.. ArrayList lhs = sort ( unsorted, begin, (begin+end) / 2 ) ArrayList rhs = sort ( unsorted, (begin+end) / 2, end ) //..et impera return merge ( lhs, rhs ) Christian Beckel 15/05/14 4

U10.A1: Merge sort (Pseudo-Code: merge) ArrayList merge (ArrayList lhs, ArrayList rhs ) int left = 0, right = 0 ArrayList result = new ArrayList ( lhs.size + rhs.size ) loop if ( left == lhs.size ) result.addall ( rhs.sublist ( right, rhs.size ) ) break if ( right == rhs.size ) result.addall ( lhs.sublist ( left, lhs.size ) ) break result.add ( lhs[left]>rhs[right]? lhs[left++] : rhs[right++] ) return result Christian Beckel 15/05/14 5 U10.A1: Merge sort (Measure) ms Elemente Christian Beckel 15/05/14 6

U10.A2: Türme von Hanoi Nicht benutzt wird: 3 2 1 Zusammenfassung: Anzahl der Scheiben (n): 4 Anzahl der Schritte (2 n-1 ): 15 Nicht benutzt werden: 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 Christian Beckel 15/05/14 7 U10.A2: Türme von Hanoi (n Scheiben) Zusammenfassung: 5 Scheiben (31 Schritte): 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 Scheiben (15 Schritte): 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 Scheiben (7 Schritte): 2 3 1 2 3 1 2 Christian Beckel 15/05/14 8

U10.A2: Türme von Hanoi (Pseudocode) moves = 2^n-1; counter = 0; if n even then while (counter < moves) make possible move between tower 1 and tower 2 make possible move between tower 1 and tower 3 make possible move between tower 2 and tower 3 increment counter by 3 units else [n is odd] while (counter < moves-1) make possible move between tower 1 and tower 3 make possible move between tower 1 and tower 2 make possible move between tower 3 and tower 2 increment counter by 3 units make available move between tower 1 and tower 3 make possible move! es gibt immer nur eine Möglichkeit (die kleinere Scheibe, oder die einzige Scheibe) Christian Beckel 15/05/14 9 U10.A3: Reversi (Alpha-Beta-Spieler) " Realisieren Sie eine Bewertungsfunktion, die nach dem α-β-verfahren arbeitet, ansonsten jedoch das gleiche leistet wie die reine Minmax-Methode des letzten Übungsserie. " Am Einfachsten: " 2 Funktionen: min und max, die sich abwechselnd aufrufen. " Die eine ändert die Beta-Schranke, die andere die Alpha-Schranke Christian Beckel 15/05/14 10

U10.A3: Reversi (Alpha-Beta-Spieler) BestMove max (int maxdepth, long timeout, GameBoard gb, int depth, int alpha, int beta) throws Timeout if (System.currentTimeMillis() > timeout) throw new Timeout(); if (depth==maxdepth) return new BestMove(eval(gb),null,true); ArrayList<Coordinates> availablemoves = new ArrayList<Coordinates>(gb.getSize()* gb.getsize()); for (int x = 1; x <= gb.getsize(); x++) for (int y = 1; y <= gb.getsize(); y++) { Coordinates coord = new Coordinates(x, y); if (gb.checkmove(mycolor, coord)) availablemoves.add(coord); } if (availablemoves.isempty()) if (gb.ismoveavailable(othercolor)) { BestMove result = min(maxdepth, timeout, gb, depth+1, alpha, beta); return new BestMove(result.value, null, false); } else return new BestMove(finalResult(gb), null, false); [...] Christian Beckel 15/05/14 11 U10.A3: Reversi (Alpha-Beta-Spieler) BestMove max (int maxdepth, long timeout, GameBoard gb, int depth, int alpha, int beta) throws Timeout [...] boolean cut = false; Coordinates bestcoord = null; for (Coordinates coord : availablemoves) { GameBoard hypothetical = gb.clone(); hypothetical.checkmove(mycolor, coord); hypothetical.makemove(mycolor, coord); BestMove result = min(maxdepth, timeout, hypothetical, depth+1, alpha, beta); } if (result.value > alpha) { alpha = result.value; bestcoord = coord; } if (alpha >= beta) { return new BestMove(alpha, null, false); } cut = cut result.cut; return new BestMove(alpha, bestcoord, cut); Christian Beckel 15/05/14 12

Reversi-Turnier! " Mittwoch, den 28.05.2014 um 14:15 Uhr, Stuz 2 http://www.vs.inf.ethz.ch/edu/fs2014/i2/ reversi/ " Abgabe " Bis Mittwoch, den 21.05.2013 bis 23:59 (Zürich Time) " An Leyna Sadamori (leyna.sadamori@inf.ethz.ch) " Alleine, in Zweiergruppen, oder in Dreiergruppen (Aber: die Preise sind für Zweiergruppen ausgelegt!) Christian Beckel 15/05/14 13 Blatt 11 1) Sortieren mit Suchbäumen 2) Komplexitätsanalyse und O-Notation 3) Komplexität 4) Ein Springer auf dem Schachfeld Christian Beckel 15/05/14 14

Aufwand von Algorithmen " Problemumfang: n " Oft: Anzahl der Eingabewerte " Komplexität eines Problems " Geringstmöglicher Aufwand, der mit einem Lösungsalgorithmus erreicht werden kann " Aufwand " Oft ist der Aufwand eines Algorithmus nicht nur von der Problemgrösse n, sondern von den konkreten Eingabewerten bzw. deren Reihenfolge abhängig. " Dann unterscheidet man i.a. folgende Fälle: " Günstigster Aufwand ( best case ) " Mittlerer Aufwand ( average case ) " Ungünstigster Aufwand ( worst case ) Christian Beckel 15/05/14 15 Zeitkomplexität " Landau-Symbole " Abschätzung durch Analyse " wächst... als " O-Notation " Obere Schranke " Omega-Notation " Untere Schranke Notation f Ο( g) f ο( g) f Ω( g) f ω( g) f Θ( g) Anschauliche Bedeutung f wächst nicht wesentlich schneller als g f wächst langsamer als g f wächst nicht wesentlich langsamer als g f wächst schneller als g f wächst genau so schnell wie g http://de.wikipedia.org/wiki/landau-symbole Christian Beckel 15/05/14 16

Aufwand von Sortierverfahren Quelle: wikipedia.org Christian Beckel 15/05/14 17 U11.A1 Sortieren mit Suchbäumen " 3 Theoretische Fragen Christian Beckel 15/05/14 18

U11.A2: Komplexitätsanalyse // Fragment 1 for (int i=0; i<n; i++) a++; // Fragment 2 for (int i=0; i<2n; i++) a++; for (int j=0; j<n; j++) a++; // Fragment 4 for (int i=0; i<n; i++) for (int j=0; j<i; j++) a++; // Fragment 5 while(n >=1 ) n = n/2; // Fragment 3 for (int i=0; i<n; i++) for (int j=0; j<n; j++) a++; // Fragment 6 for (int i=0; i<n; i++) for (int j=0; j<n*n; j++) for (int k=0; k<j; k++) a++; Christian Beckel 15/05/14 19 U11.A2 - Beispiel // Fragment 1 for (int i=0; i<n; i++) a++; c 0 c 1 *n + = c 0 + c 1 n Christian Beckel 15/05/14 20

U11.A3: Komplexität Zeit pro Operation Grösse der Eingabe Totale Laufzeit Christian Beckel 15/05/14 21 U11.A3: Komplexität Christian Beckel 15/05/14 22

U11.A4: Ein Springer auf dem Schachbrett Christian Beckel 15/05/14 23 U11.A4 a) Erreichbare Felder " Finde Menge von Feldern: " Erreichbar mit n Zügen " Gegeben: startposition Christian Beckel 15/05/14 24

U11.A4 a) Erreichbare Felder " Klasse Position " p = new Position(0,0); " Position next = p.add(new Position(offX, offy)); " Implementiert compareto, equals, etc. " Methode getreachableset " ArrayList<Position> getreachableset(position p, int n) " p: Startposition " n: Anzahl Hops " returns: Knoten in der Menge Christian Beckel 15/05/14 25 U11.A4 b) Backtracking " Finde einen Weg, der... "... alle Felder besucht "... Jedes Feld nur 1x besucht " Frühzeitiger Abbruch " Falls erreichbare Felder alle besucht " Backtracking: löschen der letzten Züge bis Abbruchbedingung nicht mehr erfüllt Christian Beckel 15/05/14 26

viel Spass! Christian Beckel 15/05/14 27