|
Dozent: | Prof. Dr. Ernst W. Mayr |
Zeit: |
Praktikumsbesprechung (voraussichtl. Mo 14:00 (c.t) - 16:00) (2 SWS),
4 Stunden Lösen der Programmieraufgaben (6 SWS) 1. Termin: Montag, 22. Oktober 2001 |
Raum: | S0143 |
Sprechstunden: | Dienstag 16:00 - 17:00, Donnerstag 14:00 - 15:00 |
Bereich: | Informatik III (Theoretische Informatik) |
Voraussetzungen: | bestandenes Vordiplom; Besuch der Vorlesung Effiziente Algorithmen I in früherem Semester oder gleichzeitig zum Praktikum ist verpflichtend; Vorlesung Effiziente Algorithmen II empfehlenswert |
Praktikumsleiter: | Hanjo Täubig, Martin Raab |
Anmeldung: | Zentralanmeldung in der Sun-Halle (19.-23.7.2001) |
Scheinerwerb: | Schein für Lösen aller Programmieraufgaben (in Dreiergruppen) und mündliche Prüfung am Semesterende |
Viele Probleme, die in der Praxis auftreten, lassen sich sehr gut mit Hilfe von Graphen modellieren und lösen. Aus diesem Grund beschäftigen sich seit mehreren Jahrzehnten Wissenschaftler aus den Bereichen Informatik und Mathematik intensiv mit der Entwicklung von Algorithmen zur effizienten Lösung typischer Problemstellungen für Graphen. Dabei hat sich gezeigt, daß es für viele Probleme, bei denen ein naiver Lösungsansatz zu exponentiellen Laufzeiten führt, doch sehr schnelle Algorithmen gibt.
Ein Beispiel sind sogenannte Matching-Algorithmen, die viele unterschiedliche Zuordnungsprobleme lösen können. Ein solches Problem könnte etwa darin bestehen, Dozenten und Kurse einander so zuzuordnen, daß möglichst viele Kurse gehalten werden können. Dabei soll jeder Dozent nur einen Kurs halten, und jeder Kurs soll nur von einem Dozenten gehalten werden. In diesem Fall läßt sich das Problem als bipartiter Graph modellieren (siehe Bild). Die obere Reihe von Knoten entspricht den Dozenten, die untere Reihe den Kursen. Eine Kante zwischen einem Dozent und einem Kurs bedeutet, daß der Dozent fähig ist, den Kurs zu halten. Eine unter diesen Bedingungen gültige Zuordnung von Dozenten zu Kursen entspricht genau einem Matching. Im Beispiel können maximal sechs der acht Kurse gehalten werden, und die fett dargestellten Kanten entsprechen einer solchen Zuordnung. Der Algorithmus von Hopcroft und Karp löst das Matching-Problem in bipartiten Graphen in Zeit O(sqrt(n)*m), wobei n die Anzahl der Knoten und m die Anzahl der Kanten des Graphen ist.
Neben ihrer Nützlichkeit für die Lösung praktischer Probleme sind Graphenalgorithmen vor allem auch aufgrund der eingesetzten algorithmischen Techniken und der verwendeten Datenstrukturen interessant. Student(inn)en, die an dem Praktikum teilnehmen wollen, sollten daher die Bereitschaft haben, sich auch in kompliziertere Algorithmen hineinzudenken.
Tiefensuche, Breitensuche | |
Zusammenhangskomponenten | |
Minimale Spannbäume | |
Kürzeste Pfade | |
Matchings | |
Netzwerkfluß | |
Färbung planarer Graphen | |
Approximation des Traveling Salesman Problem |
Neben diesen Graphenproblemen werden aber auch einige Probleme behandelt, die aus einem anderen Anwendungsbereich kommen und nur indirekt mit Graphen zu tun haben. Beispiele hierfür sind:
Suchen von Strings in Texten | |
Berechnung der Edit-Distance zweier Strings |
Viele der Algorithmen werden in den Vorlesungen "Effiziente Algorithmen und Datenstrukturen" und "Effiziente Algorithmen und Datenstrukturen II" besprochen. Die Vorkenntnisse aus diesem Veranstaltungen sind nützlich, können aber auch parallel zum Praktikum erworben werden. Auf spezielle Fragen, welche die Implementierung betreffen und in den Vorlesungen nur knapp behandelt werden, wird in der Praktikumsbesprechung eingegangen.
Das Praktikum soll ein tieferes Verständnis für die Arbeitsweise effizienter Algorithmen, insbesonders von Graphenalgorithmen, vermitteln und den Student(inn)en die für effiziente Implementierungen notwendigen höheren Datenstrukturen nahebringen.
LEDA ist eine Klassenbibliothek, die häufig verwendete Datenstrukturen wie Stacks, Queues, Priority-Queues, Listen, Graphen usw. zur Verfügung stellt und damit eine große Erleichterung für C++-Programmierer bringt. Auch die Visualisierung von Graphenalgorithmen kann sehr komfortabel mittels der LEDA-Klasse GraphWin erfolgen.
Die Bearbeitung der Praktikumsaufgaben kann entweder auf unseren Lehrstuhl-Rechern (S 2237), in der Sun-Halle oder auch auf einem Linux-Rechner zu Hause erfolgen (in letzterem Fall muß dann eine freie LEDA-Version auf dem Rechner installiert werden). Die Aufgaben sollen in Dreiergruppen bearbeitet werden, wobei wir dringend empfehlen, die Aufgaben nicht aufzuteilen, sondern wirklich in Zusammenarbeit zu lösen und zu implementieren. Bei der Prüfung am Ende des Praktikums wird erwartet, daß jede(r) Student(in) bei allen Praktikumsaufgaben auch zur Implementierung, die von seiner/ihrer Gruppe abgegeben wurde, Fragen beantworten kann.
Während des Praktikums findet einmal pro Woche eine zweistündige Besprechung statt, bei der die neuen Aufgaben und die zu implementierenden Algorithmen erläutert werden. Die Abgabe der Lösungen (Source-Codes) erfolgt per E-Mail an algoprak@informatik.tu-muenchen.de oder algoprak@in.tum.de. Die Lösungen werden von einem Betreuer korrigiert, der seine Kommentare und die Bewertung der Lösung dann ebenfalls per E-Mail den Student(inn)en mitteilt. Fragen der Student(inn)en bezüglich Algorithmen und etwaigen Problemen bei der Implementierung können entweder in der Praktikumsvorlesung oder direkt mit den Betreuern besprochen werden.
Die abgegebenen Lösungen werden nach den folgenden Kriterien beurteilt:
Um den unbenoteten Praktikums-Schein zu erhalten, müssen die folgenden Kriterien erfüllt werden:
Cormen, Leiserson, Rivest. Introduction to Algorithms MIT Press, 1990 | |
Turau. Algorithmische Graphentheorie. Addison Wesley, 1996 | |
Gibbons. Algorithmic Graph Theory. Cambridge University Press, 1985 | |
Mehlhorn. Data structures and algorithms 2: Graph algorithms and NP-Completeness, Springer-Verlag, 1984 | |
Papadimitriou, Steiglitz. Combinatorial Optimization: Algorithms and complexity. Prentice-Hall, 1982 | |
Sedgewick. Algorithms. Addison-Wesley, 1988 | |
Tarjan. Data Structures and Network Algorithms. SIAM, 1983 | |
Reingold, Nievergelt, Deo. Combinatorial Algorithms. Prentice-Hall, 1977 | |
Ahuja, Magnanti, Orlin. Network Flows: Theory, Algorithms, and Applications. Prentice Hall, 1993. |