Blatt 7

Werbung
Institut fur Informatik
der Universitat Munchen
Dr. Jan Johannsen
Jan Homann
WS 2007/08
4. Dezember 2007

Ubungen
zum Repetitorium Informatik 1
Blatt 7
Aufgabe H-16 (4 Punkte): Stellen Sie sie vor, Sie arbeiten bei einem deutschen Tele-
komunikationunternehmen, dessen Software in SML implementiert ist.
Aufgrund der gesetzlichen Neuregelung der Telekommunikationsuberwachung mussen Sie
die Anruisten Ihrer Kunden speichern. Dies soll soll so geschehen, dass entweder direkt die
angerufene Nummer gespeichert wird oder der Nachname, des Angerufenen Teilnehmers,
falls dieser in Ihrer Datenbank vorhanden ist.
Denieren Sie also einen SML-Typ mit dem Sie Listen darstellen konnen, die sowohl
Werte vom Typ int list (Telefonnummern) als auch vom Typ string (Namen) enthalten
konnen.
Aufgabe H-17 (6 Punkte): In der Datei 7-1.sml nden Sie die folgende Denition
eines SML-Typs fur knotenbeschriftete Binarbaume.
datatype ’a bintree = Empty |
Node of ’a * ’a bintree * ’a bintree;
In dieser Aufgabe sollen Sie Funktionen denieren, die die Beschriftungen der Knoten
eines Binarbaums in verschiedenen Reihenfolgen ausgeben.
(a) Schreiben Sie eine Funktion preorder: ’a bintree -> ’a list, die die Knotenbeschriftungen in
ausgibt. Das heit fur jeden Teilbaum T wird erst die
Beschriftung der Wurzel ausgegeben, dann die Beschriftungen im linken Teilbaum
von T , dann die Beschriftungen im rechten Teilbaum von T .
pre-order
(b) Schreiben Sie eine Funktion inorder: ’a bintree -> ’a list, die die Knotenbeschriftungen in
ausgibt. Das heit fur jeden Teilbaum T werden erst die
Beschriftungen im linken Teilbaum von T ausgegeben, dann die Beschriftung der
Wurzel und dann die Beschriftungen im rechten Teilbaum von T .
in-order
(c) Schreiben Sie eine Funktion postorder: ’a bintree -> ’a list, die die Knotenbeschriftungen in
ausgibt. Das heit fur jeden Teilbaum T werden erst
die Beschriftungen im linken Teilbaum von T ausgegeben, dann die Beschriftungen
im rechten Teilbaum von T und dann die Beschriftung der Wurzel von T .
post-order
Geben Sie Ihre Losung als Textdatei mit dem Namen h-17.sml ab.
Aufgabe H-18 (4 Punkte): Verwenden Sie wieder den Datentyp bintree aus der
vorherigen Aufgabe.
Hohe
(a) Die
eine Binarbaums ist das grote n, fur das Knoten k1 , . . . , kn existieren, so
dass fur i = 1, . . . , n − 1 ki+1 ein Kind von ki ist. Implementieren Sie eine Funktion
height: ’a bintree -> int, die die Hohe eines Binarbaums berechnet.
(b) Schreiben Sie eine Funktion maptree: (’a -> ’b) -> ’a bintree -> ’b
bintree, so dass der Aufruf maptree f t einen Baum liefert, der aus t entsteht,
indem man alle Beschriftungen a durch den Wert f(a) ersetzt.
Geben Sie Ihre Losung als Textdatei mit dem Namen h-18.sml ab.
Aufgabe P-16: Sie T ein Binarbaum. Der Level lev(k) eines Knoten k aus T kann wie
folgt rekursiv deniert werden. Falls k die Wurzel von T ist, so ist lev(k) = 0. Falls k ein
Kind des Knotens p ist, so ist lev(k) = lev(p) + 1.
(a) Schreiben Sie eine SML-Funktion level: ’a bintree -> ’a list list, die eine
Liste [l0 , . . . , ln ] ausgibt, so dass li die Liste der Knoten k mit lev(k) = i ist.
(b) Implementieren Sie eine SML-Funktion createtree: ’a list -> ’a bintree, die
einen Binarbau aus einer Liste erzeugt, so dass die Level des Baums sukzessive mit
Elementen aus der Liste gefullt werden. Das heit, dass aus einer Liste [a0 , . . . , an ]
ein Baum entstehen soll, in dem die Wurzel mit a0 beschriftet ist, die Knoten auf
Level 1 mit a1 und a2 , die auf Level 2 mit a3 , a4 , a5 , a6 , usw...
Aufgabe P-17: Die Funktionen foldr: (’a * ’b -> ’b) -> ’b -> ’a list -> ’b,
foldl: (’a * ’b -> ’b) -> ’b -> ’a list -> ’b und rev: ’a list -> ’a list
konnen in SML wie folgt implementiert werden.
fun rev []
= []
|
rev (x::xs) = (rev xs)@[x];
fun foldr f s []
= s
|
foldr f s (x::xs) = f (x,foldr f s xs);
fun foldl f s []
= s
|
foldl f s (x::xs) = foldl f (f (x,s)) xs;
Beweisen Sie das fur alle f s und l: foldl f s l = foldr f s (rev l).
Abgabe der Hausaufgaben u
ber UniWorx bis spatestens Dienstag, 11.12.2007, 14
Uhr. Besprechung am Dienstag, 11.12.2007.
Herunterladen