Übungen zu Praktische Informatik: Datenstrukturen

Mitteilungen für Gruppen 2+3, LVA-Leiter: Reinhard Wolfinger

Datum Kategorie Mitteilung
Betrifft:
Übung 5 - Zahlenmenge - tabSize?
Frage:
Wir sollen alle Zahlen vom Datentyp long speichern können. Ein Array in Java kann aber nur mit  Integerwerten indiziert werden und somit maximal 2^31-1 Werte speichern. Da es aber 2^64 mögliche long Werte gibt kann das Array irgendwann nicht mehr vergrößert werden.
Antwort:
Sie müssen den 8 Byte-Schlüssel (long) mit Hilfe einer Hashfunktion auf einen Tabellenplatz (Adresse) abbilden. Die Hashtabelle darf auf keinen Fall mit einer Größe 2^32 Byte angelegt werden. Bedenken Sie wie viel Speicherplatz in diesem Fall schon eine leere Datenstruktur Zahlenmenge belegen würde.

In die Hashtabelle soll zwar jeder mögliche Long-Wert gespeichert werden können. Aber jeweils nur eine Auswahl, niemals alle 2^64 verschiedenen Long-Werte gleichzeitig.

Eine Zahlenmenge kann etwa so aussehen:

{ 3, 24, 1004, 2345, 1000032 }

Legen Sie die Hashtabelle zunächst mit kleiner tabSize an und vergrössern sie bei Bedarf mittels Rehash.
18.05.2006 FAQ Betrifft:
Übung 5 - Zahlenmenge - Differenz/Vereinigung
Frage:
Die Funktionen welche die Schnittmenge, Vereinigungsmenge und Differenzmenge bilden, sollen die Objekte von denen sie aufgerufen werden direkt verändern oder eine Kopie anlegen, die dann verändert und zurückgegeben wird und somit das aufrufende Element unverändert bleibt?
Antwort:
Die Methode für den Mengendurchschnitt würde wie folgt aussehen.

class Set
{
 public Set Intersect(final Set set)
 {
   ...
   return .....
 }

Diese Methode darf weder this noch den Eingangsparameter set verändern. Sie muss ein neues Set-Objekt erzeugen. Eine Kopie davon anlegen würde ich aber nicht. Einfach die Schnittmenge neu erzeugen.
18.05.2006 FAQ Betrifft:
Übung 5 - Zahlenmenge - Duplikate?
Frage:
Soll die Zahlenmenge in Aufgabe1 mehrere gleiche Zahlen enthalten können?
Antwort:
Die Zahlenmenge soll eine Zahl nur einmal enthalten. Keine Duplikate.
10.04.2006 FAQ Betrifft:
Übung 3 - Methode remove()
Frage:
Der Suchbaum kann ja Punkte mehrfach enthalten. Soll nun die Methode remove() alle Knoten mit diesem Punkt löschen oder nur einen einzigen davon?
Antwort:
Nur einen Punkt löschen.
06.04.2006 Info Betrifft:
Übung 3 - Fehler in der Vorgabe
Problem:
In der der Methode testPerformance() der Klasse TestPointList wird in Zeile 359 die falsche Methode aufgerufen. Statt findInRangeX muss es hier findInRangeY heissen. Die aktualisierte Vorgabe finden Sie hier,
05.04.2006 FAQ Betrifft:
Übung 3 - Duplikate im 2D-Suchbaum
Frage:
Sind im 2D-Suchbaum Duplikate, also mehrere Punkte mit gleichen X/Y-Koordinaten, erlaubt?
Antwort:
Ja. Der 2D-Suchbaum kann Punkte mehrfach enthalten.
22.03.2006 FAQ Betrifft:
Übung 2 - Methoden find() und remove() in WordList2 implementieren?
Frage:
Müssen wir bei dieser Übung die Methoden find() und remove() implementieren, oder handelt es sich  lediglich um eine Verbesserung der Wordlist0?
Antwort:
Nein. find() und remove() müssen nicht implementiert werden. Wenn Sie die Schnittstelle der abstrakten Klasse WordList implementieren, ist das ausreichend.
09.03.2006 FAQ Betrifft:
Übung 1 - WordList1 als Erweiterung von WordList0
Frage:
Auf dem Angabezettel steht "Implementieren Sie WordList1 als Erweiterung von WordList0...". In der vorgegebenen Klasse WordList1 steht public class WordList1 extends WordList, die Angabe lässt allerdings eher auf public class WordList1 extends WordList0 schließen. Sollen wir die Funktionen von WordList0 nach WordList1 übernehmen und die restlichen Funktionen hinzufügen, oder WordList0 per extend verwenden?
Antwort:
Bei dieser Übung liegt der Schwerpunkt auf den Algorithmen für die verkettete Liste, daher sind beide Lösungen zulässig und gleichwertig:
  1. Sie können wie in der Vorgabe WordList1 extends WordList lassen und wo notwendig Teile der Implementierung aus WordList0 kopieren. Die dabei entstehende Codedopplung ist in diesem Fall akzeptabel.
  2. Sie können aber auch, wie in der Frage angesprochen, WordList1 extends WordList0 machen und die Implementierung erben. Achten Sie dabei auf korrekte Sichtbarkeit bei den Feldern der Klasse.