Universität Mannheim
Lehrstuhl für Praktische Informatik IV
Prof. Dr. W. Effelsberg
R. Lienhart 416
S. Pfeiffer 417
Bitte unbedingt beachten:
Die Programme müssen in ANSI-C geschrieben werden.
Sie müssen im Pool mit dem GNU C-Compiler gcc -Wall -ansi
-pedantic fehlerfrei übersetzbar und lauffähig sein.
Wenn mehrere Dateien mit der abox abgegeben werden sollen, müssen
sie vorher mit dem Befehl tar zu einer Datei zusammengebunden
werden.
Übungsblatt 3
Abgabe: 16.11.95 um 12:00 Uhr
Aufgabe 1 [10 Punkte]
Schreiben Sie zwei Funktionen zum Ein- und Auslesen von Daten aus
einer Datei in einen/von einem Array:
int readData ( FILE *fileptr, int *arrayptr )
int writeData ( FILE *fileptr, int *arrayptr )
Dabei soll die Funktion readData die ihr übergebene
Datei von Anfang bis Ende in den Array einlesen, wobei genau ein
malloc-Befehl eingesetzt werden soll. Die Datei ist so
aufgebaut, daß in jeder Zeile genau ein Integerwert
steht. writeData soll eine entsprechende Datei erzeugen.
Aufgabe 2 [20 Punkte]
- Berechnen Sie den Aufwand an Speicherplatz und an Rechenzeit,
den der Algorithmus 3 aus der Vorlesung zur Lösung des
N-Damen-Problems benötigt (auf Papier). Begründen Sie
detailliert Ihre Ergebnisse.
- Implementieren Sie den Algorithmus 3 aus der Vorlesung und
führen Sie Laufzeitmessungen durch, indem Sie die
Bibliotheksfunktion times (-> man-pages)
verwenden. Testen Sie Ihr Programm dazu mit so vielen Damen wie
möglich. Messen Sie auf Ihrem Praktikumsrechner, für
wieviele Damen das Programm
- 1 Sekunde,
- 10 Sekunden und
- 1 Minute
benötigt.
Aufgabe 3 [50 Punkte]
In der Vorlesung haben Sie den Algorithmus von Prim zur Berechnung des
minimal spannenden Baumes für einen gewichteten, ungerichteten
Graphen kennengelernt. Sie sollen diesen Algorithmus nun
implementieren. Der Graph sei dabei in einer Datei gespeichert, die
wie folgt aufgebaut ist:
\Anzahl_Knoten\
\Knoten1_von_Kante\ \Knoten2_von_Kante\ \Kantengewicht\
\Knoten1_von_Kante\ \Knoten2_von_Kante\ \Kantengewicht\
...
\Knoten1_von_Kante\ \Knoten2_von_Kante\ \Kantengewicht\
Beispiel:
- Überlegen Sie sich zunächst Datenstrukturen (auf
Papier), mit denen Sie den Graphen effizient speichern
können. Begründen Sie ihre Wahl kurz.
- Implementieren Sie dann ihre Datenstrukturen, eine Routine zum
Einlesen des Graphen von der Datei in Ihre Datenstrukturen und
den Algorithmus von Prim.
- Überlegen Sie, welchen Aufwand der Algorithmus
größenordnungsmäßig hat und begründen
Sie.
- Führen Sie Laufzeitmessungen an ihrem Programm durch,
indem Sie die Bibliotheksfunktion times
verwenden. Testen Sie Ihr Programm dazu mit Graphen mit bis zu
20 Knoten.
Last modified: Thu Nov 9 12:37:45 MET 1995