|
|
Line 1: |
Line 1: |
| == Vorlesung Algorithmen und Datenstrukturen == | | UupFRF <a href="http://avdwvmkgsdna.com/">avdwvmkgsdna</a>, [url=http://djniwkhdfnuj.com/]djniwkhdfnuj[/url], [link=http://mojnvllmesvw.com/]mojnvllmesvw[/link], http://rhymaiiarndg.com/ |
| | |
| | |
| Dr. Ullrich Köthe, Universität Heidelberg, Sommersemester 2008
| |
| | |
| Die Vorlesung findet '''mittwochs''' um 11:15 Uhr in INF 227, HS 2 und '''donnerstags''' um 11:15 Uhr in INF 308, HS 2 statt.
| |
| | |
| === Klausur und Nachprüfung ===
| |
| | |
| Die '''Abschlussklausur''' findet am Mittwoch, dem 23.7.2008 von 10:00 bis 12:30 Uhr im HS1, INF 227 (KIP) statt. (Hinweis: Sie benötigen einen Lichtbildausweis, um sich bei der Klausur zu indentifizieren!)
| |
| | |
| * '''[[Media:Prüfungsteilnehmer.pdf|Liste der Studenten]], die sich verbindlich zur Klausur angemeldet und die notwendige Übungspunktzahl erreicht haben.'''
| |
| * '''[[Media:Ergebnis-Klausur-23-07-2008.pdf|Ergebnis der Klausur vom 23.7.2008]]''' (anonymisiert)
| |
| * '''Scheine''' können ab 1.9.2008 im Sekretariat Informatik bei Frau Tenschert abgeholt werden.
| |
| * Die '''Wiederholungsklausur''' findet am 1.10.2008 um 9:00 Uhr im Seminarraum des [http://hci.iwr.uni-heidelberg.de/contact.php HCI, Speyerer Str. 4], statt.
| |
| | |
| === Leistungsnachweise ===
| |
| Für alle Leistungsnachweise ist die erfolgreiche Teilnahme an den Übungen erforderlich. Für Leistungspunkte bzw. den Klausurschein muss außerdem die schriftliche Prüfung bestanden werden. Im einzelnen können erworben werden:
| |
| * ein benoteter Übungsschein (Magister mit Computerlinguistik im ''Nebenfach'', Physik Diplom)
| |
| * ein Klausurschein (Magister mit Computerlinguistik im ''Hauptfach'')
| |
| * ein Leistungsnachweis über 9 Leistungspunkte (B.A. Computerlinguistik - alte Studienordnung)
| |
| * ein Leistungsnachweis über 8 Leistungspunkte (B.Sc. Informatik, B.A. Computerlinguistik - neue Studienordnung)
| |
| * ein Leistungsnachweis über 7 Leistungspunkte (B.Sc. Physik).
| |
| | |
| === Übungsbetrieb ===
| |
| * Termine der Übungsgruppen:
| |
| ** Mo 11:00 - 13:00 Uhr, INF 350 (Otto-Meyerhof-Zentrum, Seiteneingang), Raum 014 (Tutor: Rahul Nair, [mailto:rnair(at)gmx(punkt)de rnair (at) gmx (punkt) de])
| |
| ** Di 11:00 - 13:00 Uhr, INF 350 (Otto-Meyerhof-Zentrum, Seiteneingang), Raum 014 (Tutor: Thomas Gerlach, [mailto:gerlach@kip.uni-heidelberg.de gerlach@kip.uni-heidelberg.de])
| |
| ** Mi 14:00 - 16:00 Uhr, '''neu: INF 327, Raum SR 5''' (Tutor: Christoph Sommer, [mailto:christoph.sommer@iwr.uni-heidelberg.de christoph.sommer@iwr.uni-heidelberg.de])
| |
| ** Do 14:00 - 16:00 Uhr, INF 294, Raum -113 (im Untergeschoss, Tutor: Daniel Kondermann, [mailto:daniel.kondermann@iwr.uni-heidelberg.de daniel.kondermann@iwr.uni-heidelberg.de])
| |
| * [[Main Page#Übungsaufgaben|Übungsaufgaben]] (Übungszettel mit Abgabetermin, Musterlösungen)
| |
| * [[Media:Punktestand.pdf|aktueller Punktestand]] (PDF, anonymisiert, so aktuell, wie von den Tutoren an mich übermittelt -- UK)
| |
| * Zur Klausur wird zugelassen, wer mindestens 50% der Übungspunkte erreicht. Außerdem muss jeder Teilnehmer eine Lösung (bzw. einen Teil davon) in der Übungsgruppe vorrechnen. Es gibt verschiedene Möglichkeiten, Zusatzpunkte zu erlangen (Bonusaufgaben, Anfertigung der Wiki-Seiten, gute Mitarbeit in den Übungen).
| |
| | |
| === Prüfungsvorbereitung ===
| |
| | |
| Zur Hilfe bei der Prüfungsvorbereitung hat Andreas Fay [http://de.neemoy.com/quizcategories/31/ Quizfragen] erstellt.
| |
| | |
| === Literatur ===
| |
| | |
| * R. Sedgewick: Algorithmen (empfohlen für den ersten Teil, bis einschließlich Graphenalgorithmen)
| |
| * J. Kleinberg, E.Tardos: Algorithm Design (empfohlen für den zweiten Teil, einschließlich Graphenalgorithmen)
| |
| * T. Cormen, C. Leiserson, R.Rivest: Algorithmen - eine Einführung (empfohlen zum Thema Komplexität)
| |
| * Wikipedia und andere Internetseiten (sehr gute Seiten über viele Algorithmen und Datenstrukturen)
| |
| | |
| === Gliederung der Vorlesung ===
| |
| <!------------->
| |
| # [[Einführung]] (9.4.2008)
| |
| #* Definition von Algorithmen und Datenstrukturen, Geschichte
| |
| #* Fundamentale Algorithmen: create, assign, copy, swap, compare etc.
| |
| #* Fundamentale Datenstrukturen: Zahlen, Container, Handles
| |
| #* Python-Grundlagen
| |
| <!------------->
| |
| # [[Container]] (10.4.2008)
| |
| #* Anforderungen von Algorithmen an Container
| |
| #* Einteilung der Container
| |
| #* Grundlegende Container: Array, verkettete Liste, Stack und Queue
| |
| #* Sequenzen und Intervalle (Ranges)
| |
| <!------------->
| |
| # [[Sortieren]] (16. und 17.4.2008)
| |
| #* Spezifikation des Sortierproblems
| |
| #* Selection Sort und Insertion Sort
| |
| #* Merge Sort
| |
| #* Quick Sort und seine Varianten
| |
| #* Vergleich der Anzahl der benötigten Schritte
| |
| #* Laufzeitmessung in Python
| |
| <!------------->
| |
| # [[Korrektheit]] (23. - 30.4.2008)
| |
| #* Definition von Korrektheit, Algorithmen-Spezifikation
| |
| #* Korrektheitsbeweise versus Testen
| |
| #* Vor- und Nachbedingungen, Invarianten, Programming by contract
| |
| #* Testen, Execution paths, Unit Tests in Python
| |
| #* Ausnahmen (exceptions) und Ausnahmebehandlung in Python
| |
| <!------------->
| |
| # [[Effizienz]] (30.4. - 14.5.2008)
| |
| #* Laufzeit und Optimierung: Innere Schleife, Caches, locality of reference
| |
| #* Laufzeit versus Komplexität
| |
| #* Landausymbole (O-Notation, <math>\Omega</math>-Notation, <math>\Theta</math>-Notation), Komplexitätsklassen
| |
| #* Bester, schlechtester, durchschnittlicher Fall
| |
| #* Amortisierte Komplexität
| |
| <!------------->
| |
| # [[Suchen]] (14. - 21.5.2008)
| |
| #* Lineare Suche
| |
| #* Binäre Suche in sortierten Arrays, Medianproblem
| |
| #* Suchbäume, balancierte Bäume
| |
| #* selbst-balancierende Bäume, Rotationen
| |
| #* Komplexität der Suche
| |
| <!------------->
| |
| # [[Prioritätswarteschlangen]] (28.5.2008)
| |
| #* Heap-Datenstruktur
| |
| #* Einfüge- und Löschoperationen
| |
| #* Heapsort
| |
| #* Komplexität des Heaps
| |
| <!------------->
| |
| # [[Hashing und assoziative Arrays]] (29.5.und 4.6.2008)
| |
| #* Implementation assoziativer Arrays mit Bäumen
| |
| #* Hashing und Hashfunktionen
| |
| #* Implementation assoziativer Arrays als Hashtabelle mit linearer Verkettung bzw. mit offener Adressierung
| |
| #* Anwendung des Hashing zur String-Suche: Rabin-Karp-Algorithmus
| |
| <!------------->
| |
| # [[Iteration versus Rekursion]] (5.6.2008)
| |
| #* Typen der Rekursion und ihre Umwandlung in Iteration
| |
| #* Auflösung rekursiver Formeln mittels Master-Methode und Substitutionsmethode
| |
| <!------------->
| |
| # [[Generizität]] (11.6.2008)
| |
| #* Abstrakte Datentypen, Typspezifikation
| |
| #* Required Interface versus Offered Interface
| |
| #* Adapter und Typattribute, Funktoren
| |
| #* Beispiel: Algebraische Konzepte und Zahlendatentypen
| |
| #* Operator overloading in Python
| |
| <!------------->
| |
| # [[Graphen und Graphenalgorithmen]] (12. bis 2.7.2008)
| |
| #* Einführung
| |
| #* Graphendatenstrukturen, Adjazenzlisten und Adjazenzmatrizen
| |
| #* Gerichtete und ungerichtete Graphen
| |
| #* Vollständige Graphen
| |
| #* Planare Graphen, duale Graphen
| |
| #* Pfade, Zyklen
| |
| #* Tiefensuche und Breitensuche
| |
| #* Zusammenhang, Komponenten
| |
| #* Gewichtete Graphen
| |
| #* Minimaler Spannbaum
| |
| #* Kürzeste Wege, Best-first search (Dijkstra)
| |
| #* Most-Promising-first search (A*)
| |
| #* Problem des Handlungsreisenden, exakte Algorithmen (erschöpfende Suche, Branch-and-Bound-Methode) und Approximationen
| |
| #* Erfüllbarkeitsproblem, Darstellung des 2-SAT-Problems durch gerichtete Graphen, stark zusammenhängende Komponenten
| |
| <!------------->
| |
| <!---#* Repetition--->
| |
| <!---#* Orthogonale Zerlegung des Problems--->
| |
| <!---#* Hierarchische Zerlegung der Daten (Divide and Conquer)--->
| |
| <!---#* Randomisierung--->
| |
| <!---#* Optimierung, Zielfunktionen--->
| |
| <!---#* Systematisierung von Algorithmen aus der bisherigen Vorlesung--->
| |
| <!------------->
| |
| <!---# [[Analytische Optimierung]] (25.6.2008)--->
| |
| <!---#* Methode der kleinsten Quadrate--->
| |
| <!---#* Approximation von Geraden--->
| |
| <!------------->
| |
| # [[Randomisierte Algorithmen]] (3. und 9.7.2008)
| |
| #* Zufallszahlen, Zyklenlänge, Pitfalls
| |
| #* Zufallszahlengeneratoren: linear congruential generator, Mersenne Twister
| |
| #* Randomisierte vs. deterministische Algorithmen
| |
| #* Las Vegas vs. Monte Carlo Algorithmen
| |
| #* Beispiel für Las Vegas: Randomisiertes Quicksort
| |
| #* Beispiele für Monte Carlo: Randomisierte Lösung des k-SAT Problems
| |
| #* RANSAC-Algorithmus, Erfolgswahrscheinlichkeit, Vergleich mit analytischer Optimierung (Methode der kleinsten Quadrate)
| |
| <!------------->
| |
| # [[Greedy-Algorithmen und Dynamische Programmierung]] (10. und 16.7.2008)
| |
| #* Prinzipien, Aufwandsreduktion in Entscheidungsbäumen
| |
| #* bereits bekannte Algorithmen: minimale Spannbäume nach Kruskal, kürzeste Wege nach Dijkstra
| |
| #* Beispiel: Interval Scheduling Problem und Weighted Interval Scheduling Problem
| |
| #* Beweis der Optimalität beim Scheduling Problem: "greedy stays ahead"-Prinzip, Directed Acyclic Graph bei dynamischer Programmierung
| |
| <!------------->
| |
| # [[NP-Vollständigkeit]] (16. und 17.7.2008)
| |
| #* die Klassen P und NP
| |
| #* NP-Vollständigkeit und Problemreduktion
| |
| <!------------->
| |
| <!-----# [[Quantum computing]] (17.7.2008)---->
| |
|
| |
|
| == Übungsaufgaben == | | == Übungsaufgaben == |