Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Raphael Fischer fischrap@student.ehtz.ch 18.05.2014 Informatik II - Übung 11 Raphael Fischer fischrap@student.ehtz.ch 18.05.2014."—  Präsentation transkript:

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

2 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

3 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

4 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

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

6 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 Raphael Fischer

7 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

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

9 U10.A2 c): Was ist mit n=5? Genauer (ohne Begründung):
5 Scheiben (31 Schritte): 4 Scheiben (15 Schritte): 3 Scheiben (7 Schritte): 2 3 1 wenn ungerade 3 2 1 wenn gerade Raphael Fischer

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

11 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

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

13 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

14 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

15 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

16 Übungsblatt 11 rückwärts Raphael Fischer

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

18 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

19 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

20 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

21 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

22 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

23 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

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

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

26 Halfhearted Mergesort
Raphael Fischer

27 Stacksort StackSort connects to StackOverflow, searches for ‘sort a list’, and downloads and runs code snippets until the list is sorted. Raphael Fischer

28 Reversi-Turnier: Mittwoch, den um 12:30 Uhr, Stuz2 Abgabe: Bis Mittwoch, den bis 23:59 über Reversi-Plattform Raphael Fischer

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


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

Ähnliche Präsentationen


Google-Anzeigen