Uni-Konstanz Uni-Konstanz
Fachbereich Informatik und Informationswissenschaft   Datenstrukturen & Algorithmen
Alexander Wolff

> Ankündigung im Veranstaltungsverzeichnis
> Vorlesung: Di 8.30-10.00 Uhr in D434 (V) und Do 8.30-10.00 Uhr in G300 (V/Ü 14tägig im Wechsel)
> Praktische Übung: Do 8.30-10.00 Uhr in G300 (V/Ü 14tägig im Wechsel)
> Theoretische Übung: Fr 8.30-10.00 Uhr in F424 (Felicia Burkard), G305 (Martin Mader) und G306 (Florian Mansmann).
> Ergebnisse der Mini-Umfrage vor Weihnachten [pdf]
(Noten von 1 bis 6; beim Aufwand für die Übungen wurden die Antworten ja/naja/nein durch 1/2/3 ersetzt.)
> Ergebnisse [pdf] der Umfrage zur studentischen Lehrkritik [pdf] am Semesterende
(Falls nichts anderes angegeben, sollten Zahlen zwischen 1 und 5 angegeben werden, wobei 1 "stimmt" und 5 "stimmt nicht" bedeutet.)
Wem die Übungen hier nicht ausreichen oder wer sich anhand von Aufgaben aktiv auf die Vorlesung vorbereiten will, dem seien die Übungsblätter vom letzten Jahr empfohlen.
Theoretische Aufgaben

Die theoretischen Aufgaben werden immer dienstags in der Vorlesung verteilt. Sie sind bis vor Beginn der Dienstagsvorlesung der darauffolgenden Woche schriftlich zu bearbeiten und in der Vorlesung oder schon am Vorabend in den bereitgestellten Fächern im Treppenhaus vor dem Sekretariat E212 abzugeben. Die abgegebenen Aufgaben werden korrigiert, bewertet und freitags in Kleingruppen besprochen.

Im Laufe des Semesters müssen 50% der erreichbaren Punkte erzielt werden und zwar sowohl im Zeitraum vor Neujahr als auch in dem danach.

  • 1. Übung (O-Notation, Laufzeit)
  • 2. Übung (O-Notation, Laufzeit, Listen)
    Zum Angucken: Laufzeitgraphen [Farbe, SW]
    Musterlösung für Aufgabe 4 [pdf]
  • 3. Übung (Schlange, Divide-and-Conquer, O-Notation)
  • 4. Übung (Sortieren)
  • 5. Übung (Bäume, Sortieren, Heaps)
  • 6. Übung (Suchbäume)
  • 7. Übung (Rot-Schwarz-Bäume, Prioritätssuchbäume, Heaps)
  • 8. Übung (Sortieren, Prioritätsschlangen, Prioritätssuchbäume, Heaps)
  • 9. Übung (Hashing)
  • 10. Übung (Graphen)
  • 11. Übung (Durchlaufstrategien, Triangulierungen)
  • 12. Übung - 2 Dateien: [pdf, pdf] (Dijkstras Algorithmus, Bellman-Ford-Algorithmus, Matching, amortisierte Kosten)
  • 13. Übung (Kürzeste Wege und Matrizen, minimale aufspannende Bäume)
Im Internet gefunden: Prioritätssuchbäume (ohne Skelett) von einer Studentin gut erklärt [pdf].

Praktische Aufgaben

Die praktischen Aufgaben werden in einem ca. 14-tägigen Rhythmus donnerstags gestellt und besprochen. Neben der Aufgabenstellung in Form des zu implementierenden Interfaces wird auf dieser Seite ein Testprogramm bereitgestellt, das - soweit möglich - die Korrektheit einer Implementation automatisch überprüft.

Es wird insgesamt 6 oder 7 praktische Übungen geben. Sie können in Einer- oder Zweiergruppen gelöst werden. Von den ersten drei und den letzten 3-4 Aufgaben müssen jeweils alle bis auf eine Aufgabe korrekt gelöst werden.

Die jar-Dateien, die die zu implementierenden Schnittstellen oder abstrakten Klassen enthalten:

  • 1. Übung [jar, pdf] (Euklidischer Algorithmus)
    Abgabe bis Di, 22.10. (Besprechung am 24.10.)
  • 2. Übung [jar, pdf] (Stack und umgekehrte polnische Notation)
    Abgabe bis Mo, 11.11. (Besprechung am 14.11.)
    Für Interessenten: In dem Artikel A Tutorial for Designing Flexible Geometric Algorithms (Algorithmica 2002) geht es unter anderem um full logical inspectability im Rahmen von generischem Programmieren in C++.
  • 3. Übung [jar, pdf] (Sortierverfahren)
    Abgabe bis Mo, 2.12. (Besprechung am 5.12.)
  • 4. Übung [jar]
    Abgabe von Teil I (einfacher Suchbaum) bis Mi, 18.12.02.
    Abgabe von Teil II (Prioritätssuchbaum) bis Mi, 08.01.03.
    Tipp 1: Bei kurzen oder kryptischen Fehlermeldungen alle *.class-Dateien löschen und mit Option -g neu kompilieren: javac -g */ex4/*.java
    Tipp 2: Es lohnt sich fürs Debugging, in der Klasse, mit der man die Knoten eines Prioritätssuchbaums implementiert, eine private Variable index vom Typ int anzulegen, die die Nummer des Knotens speichert und die bei der toString-Methode ausgegeben werden kann. Bei toString ist es sinnvoll, zusätzlich die Indizes der nicht-null-Kinder auszugeben.
  • 5. Übung [jar]
    • Implementieren Sie ungerichtete Graphen mit einer Methode für Tiefensuche und zur Färbung seiner Zusammenhangskomponenten.
    • Verwenden Sie SimpleList für die Knotenliste Ihres Graphen und für die Listen der zu jedem Knoten inzidenten Kanten. Speichern Sie keine zusätzliche Listen der zu jedem Knoten adjazenten Knoten, sondern verwenden Sie die Kantenlisten, um die Methode Iterator adjacentNodes() der Klasse Node zu implementieren.
    • Abgabe bis Mi, 23.01.03.
  • 6. Übung [jar]
    • Implementieren Sie einen Sweep-Line-Algorithmus, der in O(k + n log n) Zeit alle k Paare von sich schneidenden Rechtecken in einer Menge von n gegebenen Rechtecken bestimmt.
    • Abgabe bis Mo, 10.02.03.
Lösungen:
  • 1. Aufgabe [jar] als Folien [zip]
  • 2. Aufgabe [jar] als Folien [zip]
  • 3. Aufgabe [jar] als Folien [zip]
  • 4. Aufgabe [jar] als Folien [zip]
  • 5. Aufgabe [jar] als Folien [zip]

Klausur
Voraussetzung für die Teilnahme an der Klausur ist die erfolgreiche Teilnahme an den theoretischen und praktischen Übungen. Scheinkriterium ist dann die bestandene Klausur. Für Diplom-Mathematiker, die über diese Vorlesung im Vordiplom geprüft werden, ist eine Teilnahme an der Klausur nicht erforderlich; sie bekommen einen Schein für die erfolgreiche Teilnahme an den Übungen.
Als Vorbereitung für die Klausur werden die Klausuren des letzten Jahrs empfohlen (ohne die Aufgaben über AVL-Bäume) [Haupttermin, Nachtermin] sowie die Beispielgraphen für die verschiedenen Durchlaufstrategien [Vorlesung, Übung] und für minimale aufspannende Bäume [pdf].

Eine Themenliste ist ebenfalls erhältlich.

Tim Rachor hat folgende Liste von Links zusammengestellt, wo viele der Algorithmen aus der Vorlesung visualisiert werden:

Für die, die an der Nachklausur teilnehmen wollen oder müssen, gibt es hier die Aufgaben vom Haupttermin dieses Semesters [pdf], die genaue Punkteverteilung [txt] sowie eine Übersicht, die zeigt, in welchem Maß die Klausur direkt auf die praktischen und theoretischen Übungsaufgaben aufgebaut hat [txt].

Mein Tipp zur Vorbereitung: Ich würde mir alle theoretischen Übungsaufgaben des Semesters so klar machen, dass ich sie jemand anderem erklären kann, und mindestens ein oder zwei der praktischen Aufgaben 3-6 programmieren. Auf Aufgaben zu Rot-Schwarz-Bäumen werde ich wie beim Haupttermin verzichten. Alles Gute!

Haupttermin:

Donnerstag

13. Februar

08:00 - 10:00 Uhr

Raum G300

Nachtermin:

Montag

28. April

12:00 - 14:00 Uhr

Raum G309


Literatur
  • T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introduction to Algorithms. 2. Auflage, McGraw-Hill, 2001.
  • M. Goodrich and R. Tamassia: Data Structures and Algorithms in JAVA. John Wiley & Sons, 1998.
  • T. Ottmann und P. Widmayer: Algorithmen und Datenstrukturen. 3. überarb. Auflage, Spektrum Akademischer Verlag, Heidelberg 1993.
  • R. Sedgewick: Algorithms. 2. Auflage, Addison-Wesley, Reading, Massachusetts 1988.

letzte Änderung: 16.12.2002 25.03.2003