WS 97/98: Algorithmen und Programmierung III - Übungsblatt 11
Abgabe bis 29.1., 12.30 Uhr
Beachte: Der Allquantor über Mengen/Listen kann in Miranda wie folgt formuliert werden:
all list predicate = and (map predicate list)
Aufgabe 1 (4 Punkte)
Ein abstrakter Typ Abbildung sei wie folgt spezifiziert:
abstype mapping * ** || Modell: Abbildung von * nach **;
|| alternativ: ein Wert vom Typ [(*,**)]
|| (bei Ignorierung der Reihenfolge)
with notdef :: mapping * **
|| Die überall undefinierte Abbildung
change :: mapping * ** -> * -> ** -> mapping * **
|| a = change m x y unterscheidet sich von m allenfalls
|| an der Stelle x: a(x)=y
restrict :: mapping * ** -> * -> mapping * **
|| a = restrict m x unterscheidet sich von m allenfalls
|| an der Stelle x: a(x) ist undefiniert
apply :: mapping * ** -> * -> **
|| apply m x = m(x), falls m(x) definiert ist
isdef :: mapping * ** -> * -> bool
|| isdef m x gibt Antwort auf die Frage, ob m(x) definiert ist
invar :: mapping * ** -> bool
|| Die konkrete Invariante: ?
abstr :: mapping * ** -> [(*,**)]
|| Die Abstraktionsfunktion: ?
Repräsentiere mapping in Miranda als einfachen binären Suchbaum,
in dem die Einträge (s,d) gemäß s sortiert sind! Gib die konkrete Invariante
invar und die Abstraktionsfunktion abstr an - ebenfalls in
Miranda!
Aufgabe 2 (6 Punkte)
Unter Verwendung von mapping aus Aufgabe 1 werde der abstrakte
Datentyp Wörterbuch (= Menge von Wörtern) wie folgt als trie
repräsentiert:
abstype dict
with .....
trie ::= F(mapping char trie)
dict == trie
Ein Wort findet man im trie als Folge von Kleinbuchstaben von der Wurzel zu
einem Blatt wieder. In einem Blatt kann - muß aber nicht - das Sonderzeichen
'.' als Wortende-Markierung auftreten. Beispiel:
/|\
/ | \
d e s
/|\ \ \
a e u r o
/ \ \ \ |\
. s r . . g
Gib in Miranda die konkrete Invariante und die Abstraktionsfunktion an!
Aufgabe 3 (4 Punkte)
a) Implementiere die Operation insert :: [char]->dict->dict,
die ein Wort in das Wörterbuch aus Aufgabe 2 einfügt!
[ b) optional ] Es sollen Wörter mit maximaler Wortlänge l gespeichert
werden. Bestimme die worst-case-Komplexität des Suchens nach einem Wort, wenn für
die Speicherung das Wörterbuch aus Aufgabe 2 verwendet wird! Ist das besser
oder schlechter als wenn die Wörter direkt in einem Suchbaum von
Wörtern gespeichert würden? Wie kann die Komplexität weiter verringert werden?
20.1.1998