Freitag Informatik II, 3. Teil Repetition und Prüfungstipps

Slides:



Advertisements
Ähnliche Präsentationen
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Advertisements

Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Schnelle Matrizenoperationen von Christian Büttner
Sortieren I - Bubblesort -
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
Ü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.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Sortierverfahren Richard Göbel.
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
Motivation Richard Göbel.
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
Parameterübergabe von zweidimensionalen Feldern in Funktionen.
Polymorphie (Vielgestaltigkeit)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (08 - Einfache Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
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.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
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
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Vortrag: Ingo Gensch, Mathias Reich am:
Teil 5: Kollisionsvermeidung & Wegplanung
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Java programmieren mit JavaKara
Ideen der Informatik Suchen und Sortieren [Ordnung muss sein…]
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt SS
Polynome und schnelle Fourier-Transformation
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Letzte Übung.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Donnerstag Informatik II, 2. Teil
Dienstag Informatik 1 Tag 2
Komplexität von Algorithmen
Mittwoch Informatik II, 1. Teil
Algorithmen und Datenstrukturen 1 SS 2002
DSD I Trainingsstunde 4 LESEVERSTEHEN Teil 4.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Binärbäume.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Suchen und Sortieren.
Raphael Fischer Informatik II - Übung 11 Raphael Fischer
Raphael Fischer Informatik II - Übung 10 Raphael Fischer
Felder in der Informatik
 Präsentation transkript:

Freitag Informatik II, 3. Teil Repetition und Prüfungstipps Informatik I/II PVK Freitag Informatik II, 3. Teil Repetition und Prüfungstipps

Ablauf heute Komplexitätsrechnen (Big O, Landau) Vergleich zwischen Mergesort und Heapsort Backtrackingaufgabe Repetition C++ C++ Programmieraufgabe (OO) Prüfungstipps Informatik I/II PVK

Komplexität Computer sollen uns helfen eine grosse Zahl von Daten möglichst schnell zu verarbeiten Toll ist auch, wenn wir nicht viel Speicher allozieren müssen Der Komplexitätsgrad eines Algorithmus ist meist abhängig von der Anzahl Eingabewerte n (Grösse der Daten) und manchmal auch von deren Reihenfolge Man schreibt die Komplexität also in Abhängigkeit von n Bei der Reihenfolge unterscheiden wir zwischen bestem Fall, durchschnittlichen Fall und schlimmsten Fall Informatik I/II PVK

O-Notation Eine Funktion f ∊ O(g) wächst nicht schneller als die Funktion g O(g) beschreibt aber eine ganze Klasse von Funktionen Oft ist man jedoch nur am asymptotischen Aufwand eines Algorithmus in Abhängigkeit von n interessiert (n → ∞) Wir schreiben die Komplexität eines Algorithmus deshalb als eine Funktion von n: O(f(n)) Mit dieser Information können wir herausfinden, ob unser Algorithmus skalierbar ist Informatik I/II PVK

Rechenregeln Es gilt: Für ein Polygon: f = O(f) c O(f) = O(f) (für eine Konstante c) Für ein Polygon: f(n) = 12n²+3n-4 → O(f(n)) = O(n²) Für n → ∞ ist nur noch der höchste Grad eines Polygons relevant (Anteil der am schnellsten ansteigt) Informatik I/II PVK

Beispiele für O(1) Bedeutung: Der Algorithmus übersteigt einen gewissen konstanten Wert nie (der konstante Wert kann aber auch 10'000 sein) → unabhängig von n if (x%2 == 0) // do something Die push(Element e) Funktion des Stacks hat konstante Komplexität, weil es egal ist, wie viele Elemente schon im Stack sind, die Zeit die es braucht um das Element zuoberst auf den Stack zu legen ist immer gleich. Auch die add(int value) Funktion für die verkettete Liste Generell mögen wir Algorithmen mit O(1) ;-) Informatik I/II PVK

Beispiele für O(n) for (int i = 0; i < n; i++) Bedeutung: Der Algorithmus ist linear abhängig von n. Verdoppeln wir also die Anzahl n, verdoppeln wir auch den Aufwand des Algorithmus for (int i = 0; i < n; i++) if (x[i]%2 == 0) // do something Suchen eines Elements in einer unsortierten Liste oder Array oder einem schlecht balancierten Baumes Informatik I/II PVK

Beispiele für O(n²) for (int i = 0; i < n; i++) { Bedeutung: Der Algorithmus ist quadratisch abhängig von n. Wenn wir also n verdoppeln, wird der Aufwand vervierfacht. for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) if (x[i][j]%2 == 0) // do something } Insertion sort und selection sort haben im Schnitt eine Komplexität von O(n²) Algorithmen mit O(n²) sind schlecht skalierbar! Informatik I/II PVK

Beispiele für O(log n) Bedeutung: Der Algorithmus ist logarithmisch von n abhängig. Wenn wir n also verdoppeln steigt der Aufwand des Algorithmus konstant an. int i = n; while (i > 0) { // do something i = i / 2; } Mit der Binärsuche finden wir ein Element in einem sortierten Array der Länge n in log n Schritten. Auch bei einem gutartigen Suchbaum ist dies der Fall. int binsearch (int s) { int m; int li = 0; int re = A.length-1; while ( re>=li ) { m = (li+re)/2; if (s == A[m]) return m; if (s < A[m]) re = m-1; else li = m+1; } return (-1); Informatik I/II PVK

Beispiele für O(n log n) Bedeutung: Der Aufwand des Algorithmus ist quasilinear. Oft sind diese Algorithmen optimal für den allgemeinen Fall. Sortieren mit Mergesort und Heapsort fallen in diese Kategorie void mergesort(int li, re) { … if (…) { m = (li+re)/2; mergesort(li, m); mergesort(m+1, re); } t(n) = n + 2*t(n/2) Beweis im Script mit n=2k Informatik I/II PVK

Vergleich von Heapsort und Mergesort Heapsort hat ebenfalls die Zeitkomplexität von O(n log n) Wir können aber Mergesort einfach parallelisieren und so einen Zeitaufwand von fast O(n) erreichen Was den Platzaufwand angeht, so ist Heapsort mit Arrays sicher günstiger. Falls wir aber verkettete Listen verwenden benötigt Mergesort ebenfalls keinen zusätzlichen (von n abhängigen) Platz (es müssen nur die Referenzen neu angepasst werden) Die Adressierung die bei Heapsort verwendet wird ist abhängig von Random Access, was wir bei Arrays garantiert haben. Für verkettete Listen, ist das Adressierungsverfahren von Heapsort ungünstig und langsam. Informatik I/II PVK

Ab jetzt ist alles anders Versucht die Aufgaben selbst zu lösen Ich bin da für Fragen (nicht nur betreffend der Aufgaben, sondern auch allgemein bei Unklarheiten) Informatik I/II PVK

Backtracking Wir haben folgendes Murmelspiel mit 2*n+1 Feldern, n schwarze und n weisse Murmeln. Das Ziel des Spieles ist, dass die Murmeln die Seiten tauschen: Informatik I/II PVK

Backtracking Dabei sind 4 Arten von Zügen erlaubt: Schwarz rückt ein Feld vor Weiss springt Weiss rückt ein Feld vor Schwarz springt Informatik I/II PVK

Backtracking-Aufgabe Implementiere einen Algorithmus mit Backtracking der alle möglichen Züge durchtestet Initialisiere erst das Spielfeld. Dabei soll das Programm eine Zahl n annehmen und das Spielfeld der Länge 2*n+1 bilden Implementiere eine Funktion, die das Spielfeld auf der Konsole ausgibt. Dann implementiere eine Funktion, die testet welche Züge möglich sind und diese in einem Array zurückgibt. Implementiere makeMove(int i) welche den i-ten Zug ausführt Nun implementiere die Funktion solve() welche das Backtracking durchführt. Verwende dabei die Funktion testWin() um zu überprüfen, ob das Rätsel gelöst ist. Informatik I/II PVK

Das Zeichen & Bei C++ hat das Zeichen & 4 Bedeutungen Bitweises UND: & Boolsches UND: && Referenz: void func(MyClass& myObject ) { myObject.method(); } Adressoperator: int i = 5; int* p = &i; int** pp = &p; Informatik I/II PVK

Das Zeichen * In C++ hat das Zeichen * 3 Bedeungen Multiplikation: int a = b * c; Pointer: int* p = &a; int** pp = &p; Dereferenzierung: *p = 10; // p zeigt auf Typ int *pp = &b; // pp zeigt auf Typ int* Informatik I/II PVK

Objektorientierung C++ Schreibe in C++ eine Klasse, die komplexe Zahlen verwaltet. Eine komplexe Zahl kann geschrieben werden als z=a+bi wobei a der Realteil und b der Imaginärteil ist. Für i gilt i²=-1 Schreibe eine Klasse Complex welche die beiden Komponenten einer komplexen Zahl mit grosser Genauigkeit definiert. Verkapsle diese Komponenten. Deklariere eine Methode set(...) und eine Methode get(...) welche jeweils beide Werte annimmt bzw. zurück liefert. Implementieren musst du sie aber nicht Schreibe einen Konstruktor, dem man den Realteil und Imaginärteil übergibt Informatik I/II PVK

Prüfungstipps Je 1 Stunde für Informatik 1 und Informatik 2 Bei 7 bis 8 Aufgaben ergibt das 10 bis 20 Minuten pro Aufgabe Theorieaufgaben meist schneller gelöst Programmieraufgaben teils recht aufwendig Bleibt also nicht zu lange an einer Aufgabe falls ihr stecken bleibt (z.B. die Rekursion nicht seht) Bei ETH Prüfungen reichen oft 40% der Punkte für eine 4 Nehmt mich aber nicht beim Wort, falls es nicht so ist Informatik I/II PVK

Zusammenfassung Bei Informatik 1 dürft ihr eine Zusammenfassung mitnehmen. Schreibt euch die wichtigsten Dinge drauf wie Präzedenzliste ASCII Zeichensatz Beispielklassendefintion Beispiel zu Stack und verketteten Liste Syntax (z.B.: wie man ein Array initialisiert) Schreibt eure Zusammenfassungen selbst, dann wisst ihr wo was ist und wie ihr es verwenden sollt. Informatik I/II PVK

Prüfungsvorbereitung Cellier-Skript ist ganz okay. Falls ihr etwas nicht versteht schaut auf www.cplusplus.com nach Übt das Programmieren auf Papier Für Informatik II haben wir nur prüfungsrelevante Dinge besprochen. Zum Lernen solltet ihr das Besprochene im Skript suchen und repetieren. Es stehen manchmal auch noch nützliche Dinge dazu, die ich nicht besprochen habe Zum Beispiel: Negamax-Algorithmus zur Bestimmung des Minimax-Wertes Falls ihr ganz sicher gehen wollt, dann lest auch noch den Teil zu Threads und zu den Türmen von Hanoi durch. Die Generics aus den Informatik II Übungen funktionieren analog zu den Templates aus Informatik I. Informatik I/II PVK