Algorithmen & Datenstrukturen
Wintersemester 2000/2001
Veranstaltung: |
8803/8804 (Vorlesung mit Praktikum) |
Vorbesprechung: |
keine |
Termin: |
Dienstag, 14 Uhr ct, der prakt. Teil Donnerstags,
16 Uhr ct |
Beginn: |
2. Woche (also am 24. Oktober) |
Ort: |
Inf II, Raum 324 |
Dozent: |
Willem-Paul deRoever und Martin
Steffen |
Zur Vollständigkeit halber: die zentralen Daten zur Vorlesung im
Univis
Beachte: Aufgrund einer Überschneidung mit einer Vorbesprechung
in der ersten Vorlesungswoche verschiebt sich der Beginn der
Veranstaltung in die zweite Woche!!
Abstract:
Der Entwurf und die effiziente Implementierung von Datenstrukturen
und zugehöriger Algorithmen zu ihrer Manipulation gehört,
unabhängig von Anwendung und Programmiersprache, zum unverzichtbaren
Handwerkszeug jeden Programmierers.
Der Kurs behandelt verschiedene grundlegende und immer wiederkehrende
statische, dynamische und rekursive Datenstrukturen und ihre
Implementierung, wie beispielsweise Arrays, Listen, Stacks, Queues,
verschiedene Arten von Bäumen, Hashstrukturen, Graphen ... Hand in
Hand mit den Daten werden ausgewählte fundamentale Algorithmen wie
Suchen, Sortieren und Traversieren und andere mehr behandelt.
Schließlich soll die Vorlesung einen Einblick in allgemeine
Problemlösungsstrategien wie "`Divide-and-Conquer"', Backtracking,
u.a. geben.
Der Kurs legt besonderen Wert auf die praktische Umsetzung und
Implementierung der vorgestellten Algorithmen in den begleitenden
Übungen.
1 Organisatorisches
1.1 Anmeldung und Rechnerzugang
Zur Teilnahme bietet es sich an, sich einen account an der Uni zu
verschaffen. Die Anmeldung passiert seit diesem Semester
Siehe auch die
Hinweise
der RGB zum Thema.
Wir bitten um schriftliche (per email Anmeldung für den Kurs
und um die Angabe folgender Daten:
-
Name,
- Email-Adresse
- Semesterzahl
- Matrikelnummer
- Studiengang
1.2 Scheinkriterium
Für den Schein sind 50% der Punkte zu erreichen. Wer einen
benoteten Schein braucht oder will, bekommt ihn nach einer
zusätzlichen mündlichen Prüfung am Ende des Kurses. Was die
gestellten Programmieraufgaben betrifft, so gehen folgende Punkte in
die Bewertung ein:
-
(selbstverständlich) Korrektheit der Lösung, daneben aber auch
- sinnvolle Kommentierung des Kodes, Effizienz und
Sauberkeit der Lösung. Ferner soll für jedes Programm eine
- Kurzbeschreibung der Lösung abgegeben werden.
1.3 Abgabe
Die Übungen werden in Zweiergruppen gelöst. Die Gruppeneinteilung
befindet sich hier. Der verbindliche Abgabetermin ist
jeweils auf dem Übungszettel angegeben. Die Lösungen sollen per
email abgegeben werden, und zwar an
ms@informatik.uni-kiel.de. Dabei gilt:
-
Die Abgabe erfolgt per Übungszettel, d.h., bei mehreren
Aufgaben pro Zettel müssen diese zusammen in einer Mail gesendet werden.
- Das Subject/Betreff der Mail muß die Nummer des
Übungszettels und Namen der Studierende u. Gruppe enthalten. Bitte auch den
Code mit den Namen der Programmierer versehen. Dies gehört zur anständigen
Programmdokumentation dazu.
- Falls die Lösung aus mehreren Dateien besteht: bitte als Paket
verschicken, also ``taren'' oder mime-encoded.
Bei der Abgabe ist es erforderlich, ein einfaches Makefile
mit beizufügen, für die erste Aufgabe beispielsweise könnte das Auspacken
der abgegebenen Lösung folgende Struktur besitzen:
/home/<.....>/uebung1:
total 11
drwxr-xr-x 2 512 Nov 4 08:56 .
drwxr-xr-x 3 512 Nov 2 21:40 ..
-rw-r--r-- 1 1634 Nov 2 21:36 Readme
-rw-r--r-- 1 1159 Nov 2 20:23 mergesort.c
-rw-r--r-- 1 90 Oct 30 17:21 mergesort.h
-rw-r--r-- 1 2353 Nov 2 21:12 sorttest.c
-rw-r--r-- 1 224 Nov 4 08:55 Makefile
Ein einfaches Makefiles (im Falle von C) zu diesem Übungszettel könnte eventuell
entsprechend so aussehen:
######################################### Kommentare mit ``#''
CC = gcc ## Definition einer Variable
########
all: mergesort test
true
test: sorttest.o mergesort.o
$(CC) sorttest.o mergesort.o -o sorttest
sorttest.o: sorttest.c
$(CC) -c sorttest.c
mergesort.o: mergesort.c mergesort.h
$(CC) -c mergesort.c
clean:
\rm -f mergesort mergesort.o sorttest.o sorttest
Zur Erklärung: ein Makefile ist eine Datei mit eben diesem Namen
Makefile, welches einem hilft, (vor allem) Übersetzungen zu steuern.
Das Makefile besteht aus einer Reihe von Einträgen. Die Namen zu Beginn jedes
Eintrags heißen ``targets'' und was in der folgenden Zeile steht, wird bei
einem make <target> ausgeführt, beispielsweise
make clean
in diesem Beispiel räumt mittes eines rm die generierten Dateien
wieder auf. Der Aufruf von
make all
führt ein true aus (den erfolgreichen, nichtstuenden Befehl), das
heißt, für sich genommen tut es erstmal nichts, aber bevor es true
ausführt, wird vorher noch ein make mergesort und
make test gemacht, denn die Einträge in der Zeile nach dem Ziel,
also hier nach all, sind Abhängigkeiten, die zunächst
ausgeführt werden.
Defaultmäßig wird bei einem bloßen
make
das erste Ziel ausgeführt (in dem Beispiel ist es also analog zu
make all). Typische, oft verwendete Ziele sind, wie in dem
Beispiel sieht, make all und make clean für ``Alles in
der richtigen Reihenfolge übersetzen'' zum Beispiel bei uns, alle Aufgaben
einer Serie, und make clean ``Alles aufräumen'', natürlich
nicht die Quelldateien, sondern nur das, was durch Kompilation
erzeugt wurde.
Man kann noch sehr viel mehr mit Makefiles machen, für uns reicht dieser
simple Gebrauch, damit ich bei der Korrektur nicht lange suchen muß,
welchen Kompiler ich mit welchen Optionen auf welches File anwenden muß.
Bei Bedarf: weitere Informationen zu gnu's make finden sich
hier.
1.4 Nachbereitung
Mal schauen ...
2 Unterlagen
2.1 Folien
Als Unterlagen stellen wir die Vorlesungsfolien ins Netz, sie enthalten das
meiste des Vorlesungsstoffes (bis auf z.B. einige Bilder):
2.2 Aufgaben
Es wird meistens jede Woche einen Übungszettel geben, die Abgabe in der
Regel am Donnerstag drauf.
Zettel |
|
Thema |
|
Ausgabedatum |
|
Übung 1 |
|
Sortieren |
|
24. Oktober |
Übung 2 |
|
Heaps/Sortieren/Rekursion & Iteration |
|
31. Oktober |
Übung 3 |
|
Divide & Conquer |
|
7. November |
Übung 4 |
|
Sortieren, Listen, Suchbäume |
|
14. November |
Übung 5 |
|
Rot/Schwarzbäume |
|
22. November |
Übung 6 |
|
Graphen |
|
12. Dezember |
Übung 7 |
|
Graphen, starke Zusammenhangskomponenten |
|
9. Januar |
Übung 8 |
|
Spannbäume |
|
16. Januar |
Übung 9 |
|
kürzeste Pfade |
|
23. Januar |
2.3 Zettel und ähnliches
3 Literatur
In der Hauptsache stützt sich die Vorlesung auf
[CLR90], ein umfangreiches,
modernes Standardwerk zum Thema. Ein weiteres, nicht ganz so
schwergewichtiges Buch ist [Ski97]. Es zeichnet sich
dadurch aus, daß es zu jedem Problem auch auf praktische Anwendungen und
bekannte Implementierungen verweist. Daneben stellt der Autor eine sehr
gute Webseite zu dem Buch
zur Verfügung.
Weitere, bekannte und empfehlenswerte Bücher zum Thema sind beispielsweise
[AHU89], [Koz92],
[Sed88] oder [Sed90], und
[Wir86].
4 Links
Hier ein paar mehr oder minder ungeordnete Links zum Thema.
-
ganz aktuell:
P =
NP? oder Spinnerei? (wäre nicht das erste Mal...), falls es aber
standhalten sollte, kann man zur Not auch mit den anderen ungelösten
Problemen auf der Liste
noch genügend Geld und Ruhm ernten
- Dokumentation zu nützlicher Software
- Die Webseite zum
Buch [Ski97] ist hervorragend gemacht, man
bekommt viele Links zu Algorithmen und bekannten Implementierungen.
-
Das Kieler
RevView-System
- vergleichbare Kurse und Kursmaterialien
-
Was andere so machen:
Metaliste von
Algorithmenkursen amerikanischer Universitäten
- Zwei Sammlungen von Uni-Kursen zum Thema (sowohl für Undergraduates
und Fortgeschrittene):
hier
und hier
- Vorlesungsskripten
der TU-München vergleichbaren Veranstaltungen (Grundlegende
Algorithmen, Effiziente Algorithmen und Datenstrukturen)
- Ein
Skript zum Thema Graphen und ihre Algorithmen
- Mathematik & Mathematiker
- Sonstige Materialsammlungen und weitere Startpunkte in Netz
- Web-Server
References
- [AHU89]
-
Alfred Aho, John E. Hopcroft, and Jeffrey Ullman.
The Design and Analysis of Computer Algorithms.
Addison-Wesley, 1989.
- [CLR90]
-
Thomas H. Cormen, Charles E. Leierson, and Ronald L. Rivest.
An Introduction to Algorithms.
MIT Press, 1990.
- [Koz92]
-
Dexter C. Kozen.
The Design and Analysis of Algorithms.
Springer, 1992.
- [Sed88]
-
R. Sedgewick.
Algorithms.
Addison-Wesley, 2 edition, 1988.
- [Sed90]
-
Robert Sedgewick.
Algorithms in C.
Addison-Wesley, 1990.
- [Ski97]
-
Steven S. Skiena.
The Algorithm Design Manual.
Springer, Telos, 1997.
- [Wir86]
-
Niklaus Wirth.
Algorithmen und Datenstrukturen.
B. G. Teubner, 1986.
Pages last (re-)generated January 24, 2001
This document was translated from LATEX by
HEVEA.