Aufgabenblatt 2  
Ausgabetermin: 30.10.00
Abgabetermin: Montag d. 6.11. um 14 Uhr per Email an die Übungsgruppenleiter 
Motivation: Begleitende Übungen zum Vorlesungsthema "Dynamische Datenstrukturen". Quantifizierte Erfahrungen mit "einfachen" und "gehobenen" Sortierverfahren. Dynamische Strukturen beim Problemlösen durch Suchen.
Aufgabe 1: In der Datei MixNamDat.txt finden Sie 20000 unsortierte Namen mit zugehörigem Geburtsdatum (aus dem 20. Jahrhundert). Dieselbe Datei gibt es komprimiert als MixNamDat.zip. Sortieren Sie die Namen nach dem Geburtsdatum und erzeugen Sie eine aufwärts und eine abwärts sortierte Datei. Implementieren Sie dazu die zwei Sortierverfahren BubbleSort und BucketSort (s. Vorlesung und z.B. Wirth, Algorithmen und Datenstrukturen). Messen Sie für jedes der zwei Verfahren die Laufzeit beim Aufwärtssortieren von
1. der unsortierten Datei
2. der abwärts sortierten Datei
3. der bereits aufwärts sortierten Datei.
Überlegen Sie, inwieweit Sie bei BucketSort auch den Namen (anstelle des Datums) als Sortierschlüssel verwenden können. Der Schlüssel sollte für beliebige Namen (nicht nur Meyer.....) geeignet sein.
5 Punkte
Aufgabe 2: Probleme lassen sich manchmal durch schrittweises Transformieren von einem Anfangszustand in einen Zielzustand lösen. In jedem Zustand stehen im Allgemeinen mehrere Operationen zur Zustandsveränderung zur Verfügung. Vermeidet man Duplizierungen, so ergibt sich ein Suchbaum, der im Laufe der Suche sukzessive erzeugt wird. Aufgabe eines Suchverfahrens ist es, die bereits erkundeten "alten" Zustände und die noch nicht erkundeten "neuen" Zustände effektiv zu verwalten (s. z.B. Nilsson, Problem-Solving Methods in Artificial Intelligence).
Beispiel: Suche nach einem Pfad in einem Labyrinth von A nach B (O ist Freiraum, X ist Hindernis). Es seien die Bewegungen GeheRechts, GeheLinks, GeheOben und GeheUnten erlaubt.
O O O O O O O O O O O O 
O X O X X X X X X O O O
O X O O O O O O X O O O
A X O X O X X X X O O O
O X O X O O O O O O O O
O O O X O O X X X X X X
O X O X O X X O O O O O
O O O O O O O O X O O O
O X O X O X X X X O O O
O O O X X X O B X X O O
O X O X O X X O O O O O
O X O O O O X O O O O O
Implementieren Sie eine Java-Klasse Labyrinth, mit der für obiges Labyrinth ein Pfad von A nach B gesucht und ausgegeben wird. Verwenden Sie dazu eine Klasse Zustand mit der Methode GibNachfolger, sowie die zwei Listen NeuList und AltList zur Verwaltung von Zuständen (s.o.). Prüfen Sie bei neuen Zuständen jeweils, ob diese bereits bearbeitet (in AltList) oder auf anderem Wege erzeugt wurden (in NeuList) und vermeiden Sie Zyklen durch geeignete Maßnahmen. Findet Ihr Verfahren den kürzesten Pfad?
5 Punkte
Abzugebende
Dokumente
Aufgabe 1: Kommentierter Quellcode und Protokoll der Laufzeitmessungen. Ergebnis Ihrer Überlegungen zu BucketSort.
Aufgabe 2: Kommentierter Quellcode und erzeugte Ausgabe für das Beispiel.
Schicken Sie bitte Ihre Dokumente - ein Exemplar je Übungsteam - als ein im Zip-Format komprimiertes Nur-Text-Attachment per Email an Ihren Übungsgruppenleiter.