Raphael Fischer fischrap@student.ehtz.ch 18.05.2014 Informatik II - Übung 11 Raphael Fischer fischrap@student.ehtz.ch 18.05.2014.

Slides:



Advertisements
Ähnliche Präsentationen
DNA-Array oder DNA-Chip
Advertisements

Geometrische Datenstrukturen Haozhe Chen Aaron Richardson.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
Suche in Texten (Stringsuche )
Kapitel 7. Sortier-Algorithmen
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
Lösung 6.3 Denksportaufgabe
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. 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.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) 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.
Geometrisches Divide and Conquer
Vortrag: Ingo Gensch, Mathias Reich am:
Mergesort Divide and Conquer
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren.
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Kapitel 6: Suchbäume und weitere Sortierverfahren
Komplexität von Algorithmen
Freitag Informatik II, 3. Teil Repetition und Prüfungstipps
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
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,
Algorithmen und Datenstrukturen
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Suchen und Sortieren.
Algorithmen und Datenstrukturen
Seminar im Fach Geoinformation IV
Das Problem des Handlungsreisenden
Wiederholung TexPoint fonts used in EMF.
Wiederholung TexPoint fonts used in EMF.
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
Raphael Fischer Informatik II - Übung 10 Raphael Fischer
Algorithmen und Datenstrukturen
Komplexität und Berechenbarkeit
Algorithmen und Datenstrukturen
Arrays of Objects, a 3 part process
 Präsentation transkript:

Raphael Fischer fischrap@student.ehtz.ch 18.05.2014 Informatik II - Übung 11 Raphael Fischer fischrap@student.ehtz.ch 18.05.2014

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 13.11.2018

U10.A1 b): Divide and conquer / Mergesort public ArrayList<T> sort(ArrayList<T> items) {       if(items.size() <= 1)           return items;              int middle = items.size()/2;       ArrayList<T> res1 = sort(new ArrayList<T>(items.subList(0, middle)));       ArrayList<T> res2 = sort(new ArrayList<T>(items.subList(middle, items.size())));       int pt1 = 0, pt2 = 0;       ArrayList<T> sorted = new ArrayList<T>();       while(pt1 < res1.size() || pt2 < res2.size()) {           if(pt2 == res2.size() || res1.get(pt1).compareTo(res2.get(pt2)) < 0)               sorted.add(res1.get(pt1++));           else               sorted.add(res2.get(pt2++));       }       return sorted;   }   trivialer Fall Divide Die beiden Pointer Diese Liste wird aus den anderen aufgebaut Wenn beide Pointer am Ende, höre auf Wenn pt2 am Ende, nimm in jedem Fall Liste 1 Achtung Fehler: Wenn pt1 == res1.size(), gibt es beim if eine Exception Raphael Fischer 13.11.2018

U10.A1 b): Divide and conquer / Mergesort public ArrayList<T> sort(ArrayList<T> items) {       if(items.size() <= 1)           return items;              int middle = items.size()/2;       ArrayList<T> res1 = sort(new ArrayList<T>(items.subList(0, middle)));       ArrayList<T> res2 = sort(new ArrayList<T>(items.subList(middle, items.size())));       int pt1 = 0, pt2 = 0;       ArrayList<T> sorted = new ArrayList<T>();       while(pt1 < res1.size() || pt2 < res2.size()) {           if(pt1 == res1.size())               sorted.add(res2.get(pt2++));           else if(pt2 == res2.size())               sorted.add(res1.get(pt1++));           else if(res1.get(pt1).compareTo(res2.get(pt2)) < 0)           else       }       return sorted;   }   trivialer Fall korrigiert Divide Die beiden Pointer Diese Liste wird aus den anderen aufgebaut Wenn beide Pointer am Ende, höre auf Wenn pt2 am Ende, nimm in jedem Fall Liste 1 «Normaler» Fall Raphael Fischer 13.11.2018

U10.A1 c): Merge sort (Measure) Legende: ms Elemente Raphael Fischer 13.11.2018

U10.A2 a): Türme von Hanoi 3 2 1 3 2 1 3 … Zusammenfassung: Nicht benutzt wird: Zusammenfassung: Anzahl der Scheiben (n): 4 Anzahl der Schritte (2n-1): 15 Nicht benutzt werden: 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 … Raphael Fischer 13.11.2018

U10.A2 b): 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 3 and tower 2 make available move between tower 1 and tower 3 make possible move  es gibt immer nur eine Möglichkeit (die kleinere Scheibe) Raphael Fischer 13.11.2018

U10.A2 c): Was ist mit n=5? Es geht nicht. Argument? 25-1 = 31 Züge 30. Zug ist 1, 31. Zug ist 3 letzte Scheibe sollte auf 3 Raphael Fischer 13.11.2018

U10.A2 c): Was ist mit n=5? Genauer (ohne Begründung): 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 2 3 1 wenn ungerade 3 2 1 wenn gerade Raphael Fischer 13.11.2018

U10.A3: Reversi (Alpha-Beta-Spieler) Kleine Änderungen gegenüber der Minimax-Version Der Code ist auf der Website Raphael Fischer 13.11.2018

Komplexität von Algorithmen Ziel: Algorithmen vergleichen (die sich ganz Grundsätzlich in ihrer Struktur unterscheiden) Unabhängig von der Hardware Bsp.: Tatsächliche Zeit: 𝑡 𝑛 = 2𝑛 2 ∙ms+3𝑛∙s + 6 𝑛 ∙ms 𝑡 𝑛 ≈2𝑛 2 ∙ms 𝑡 𝑛 ∝𝑛 2 𝑡 𝑛 =𝑂(𝑛 2 ) bzw. 𝑡 𝑛 ∈𝑂(𝑛 2 ) Man kann auch die Komplexität des Speicherverbrauchs analysieren 𝑛 gross Nehme nur den grössten Term und lasse Konstanten weg Raphael Fischer 13.11.2018

Aufgabe 1: Komplexität von Funktionen Lösung: 𝑓 1 𝑛 =4 𝑛 2 +𝑛+9 𝑛 3 ∈𝑂( 𝑛 3 ) 𝑓 2 𝑛 = 2 𝑛 + 𝑛 8 +9ln 𝑛 ∈𝑂( 2 𝑛 ) 𝑓 3 𝑛 =4 𝑛 2 +5 𝑛 2 +9 𝑛 ∈𝑂( 𝑛 2 ) 𝑓 4 𝑛 = 2 𝑛 +10∙ 3 𝑛 ∈𝑂 (3 𝑛 ) 𝑓 5 𝑛 =5 𝑛 + ln 𝑛 ∈𝑂( 𝑛 ) 𝑓 6 𝑛 = n 2 log 2 𝑛 +4⋅ ln 𝑛 2 + 5 𝑛 2 log 4 𝑛 𝑛 ∈𝑂( n 2 log 𝑛 ) 𝑓 7 𝑛,𝑚 =4 𝑛 2 +6𝑚∈𝑂( 𝑛 2 +𝑚)   Raphael Fischer 13.11.2018

Aufgabe 2: Komplexität von Algorithmen Lösung: Code 1: 𝑂 𝑛 2 Code 2: 𝑂 𝑛 log⁡𝑛 Code 3: 𝑂 𝑛 Code 4: 𝑂 𝑛 2 Code 5: 𝑂 𝑛 log 𝑛 //Code 4   LinkedList<String> ll = new LinkedList<String>();   for(int i = 0; i < n; i++)       ll.add(getRandomString());       System.out.println(ll.get(i));   Get von LinkedList muss die ganze Liste durchlaufen und braucht O(i) //Code 5   ArrayList<Integer> al = new ArrayList<Integer>();   //Fill al with n random integers   void foo(int a) {      if(a == 0) return;      for(int i = 0; i < n; i++)         al.set(i, al.get(i)+a);      foo(a/2);   } Get und set von ArrayList braucht aber nur O(1) Raphael Fischer 13.11.2018

Nun mathematisch etwas präziser: 𝑡 𝑛 ∈𝑂 𝑓 𝑛 ⇔ ∃ 𝑛 0 ,𝑐>0 s.t. ∀𝑛≥ 𝑛 0 holds 𝑡(𝑛)≤𝑐⋅𝑓(𝑛) c=0.5 wäre hier noch zu klein Das bedeutet aber, dass z.B. 𝑛∈𝑂(5𝑛)∈𝑂(𝑛 log 𝑛)∈𝑂 𝑛 2 ∈𝑂( 2 𝑛 ) Das schreibt aber niemand so… Hoffentlich (für den Prof), sind die Aufgaben in der Prüfung gut gestellt (geben Sie die minimale Schranke an, oder so) Raphael Fischer 13.11.2018

Nun mathematisch etwas präziser: Es gibt auch eine untere Schranke Omega: (Algorithmus ist mind. so schlecht wie): 𝑡 𝑛 ∈Ω 𝑓 𝑛 ⇔ ∃ 𝑛 0 ,𝑐>0 s.t. ∀𝑛≥ 𝑛 0 holds 𝑡 𝑛 ≥𝑐⋅𝑓(𝑛) Und die scharfe Schranke Theta: 𝑡 𝑛 ∈Θ 𝑓 𝑛 ⇔𝑡 𝑛 ∈𝑂 𝑓 𝑛 ∩Ω(𝑓 𝑛 ) Raphael Fischer 13.11.2018

Übungsblatt 11 rückwärts Raphael Fischer 13.11.2018

U11.A4: Ein Springer auf dem Schachbrett Raphael Fischer 13.11.2018

U11.A4 a) Erreichbare Felder Finde Menge von Feldern: Erreichbar mit maximal n Zügen Gegeben: startPosition Komplexität der Laufzeit ist egal (nicht optimieren) Fokus auf Implementierung: Schöner Code = wenig copy- paste Schaut euch Fähigkeiten der Position-Klasse an Raphael Fischer 13.11.2018

U11.A4 b) Kompletter Pfad Finde einen Weg mit dem Springer, der ... ... alle Felder besucht ... Jedes Feld nur 1x besucht Dieses mal optimieren: Backtracking Abbruchbedingung: Alle Sprungmöglichkeiten wurden schon mal angesprungen Raphael Fischer 13.11.2018

U11.A3) Komplexität Angenommen, ein Algorithmus hat 𝑂 𝑡(𝑛) und kann in 𝑇 auf einem langsamen Rechner Daten der grösse 𝑀 bearbeiten. Ein neuer Recher sei 3x schneller: Wie viele Daten 𝑀′ kann dieser in 𝑇 bearbeiten? Raphael Fischer 13.11.2018

U11.A2) Komplexität von Codefragmenten Genau wie die Aufgabe in der Übungsstunde Achtung: Solche Aufgaben kommen praktisch sicher an der Prüfung! Raphael Fischer 13.11.2018

U11.A1) Sortieren mit Suchbäumen a) Wie benutzt man Suchbäume dafür? Nur grobe Beschreibung, kein Pseudocode b) Wie verändert sich die Geschwindigkeit, wenn die ursprünglichen Daten Aufsteigend sortiert, absteigend sortiert oder durchmischt sind? Annahme: Wir wollen aufsteigend sortieren c) Angabe der Laufzeit-Komplexität für schlechtesten & besten Fall Raphael Fischer 13.11.2018

Sortieralgorithmen Schon kennengelernt: Insertionsort 𝑂 𝑛 2 Gehe durch Liste, suche kleinstes Element, setze es an Anfang etc. Mergesort 𝑂 𝑛 log 𝑛 Sort with search-Trees 𝑂 ?? Werdet ihr noch kennenlernen: Heapsort 𝑂 𝑛 log 𝑛 <- Letztes wichtiges Thema für Prüfung! Raphael Fischer 13.11.2018

Weitere Sortieralgorithmen >> Sortieren geht i.A. nicht effizienter als O(n log(n)) Raphael Fischer 13.11.2018

Bogosort Komplexität: 𝑂(𝑛⋅𝑛!) Raphael Fischer 13.11.2018

Halfhearted Mergesort Raphael Fischer 13.11.2018

Stacksort StackSort connects to StackOverflow, searches for ‘sort a list’, and downloads and runs code snippets until the list is sorted. http://gkoberger.github.io/stacksort/ Raphael Fischer 13.11.2018

Reversi-Turnier: Mittwoch, den 31.05.2014 um 12:30 Uhr, Stuz2 http://www.vs.inf.ethz.ch/edu/FS2017/I2/reversi/ Abgabe: Bis Mittwoch, den 23.05.2013 bis 23:59 über Reversi-Plattform Raphael Fischer 13.11.2018

…viel Erfolg und Glück bei der Prüfung! Raphael Fischer 13.11.2018