Übungen zu Einführung in die Informatik II

Werbung
Technische Universität München
Fakultät für Informatik
Prof. Dr. M. Broy
SS 2002
Übungsblatt 2
25. April 2002
Übungen zu Einführung in die Informatik II
Aufgabe 5
Sortieren durch Einfügen
Ziel dieser Aufgabe ist die Implementierung eines Sortieralgorithmus. Es handelt sich hierbei um
das Sortieren durch Einfügen. Speziell soll hier ein Array von natürlichen Zahlen aufsteigend
sortiert werden; d.h am Ende des Verfahrens enthält das erste Element die kleinste Zahl. Der
Einfachheit halber nehmen wir an, alle Zahlen seien verschieden.
Der Algorithmus wird folgendermaßen beschrieben:
Zu Beginn des Verfahrens ist das unsortierte Array s1 der Länge n und ein zunächst leeres Array s2 (ebenfalls der Länge n) vorhanden (In letzteres sollen die Elemente sortiert
eingefügt werden).
Im i-ten Schritt ( 1 i n) des Verfahrens nimmt man vom unsortierten Array das i-te
Element und fügt es im Array s2 an der Stelle j ein, so dass gilt s2(j) < s2(i) für alle j < i und
s2(j) > s2(i) für alle j > i.
a) Formulieren Sie in Pascal die Funktion function insert (nn : array [1 .. max] of
Integer) : array [1 .. max] of Integer , die den angegebenen Algorithmus implementiert.
b) Formulieren Sie ein Hauptprogramm, das ein unsortiertes Feld ganzer Zahlen mit Hilfe der
Funktion insert sortiert.
c) Die Hauptarbeit bei der praktischen Durchführung des Sortieralgorithmus entfällt auf das
richtige Einfügen der Zahlen; im wesentlichen müßen dabei benachbarte Elemente des
Feldes unter Umständen vertauscht werden. Geben Sie an, wieviele Vertauschungen im
schlechtesten Fall durchgeführt werden müßen!
d) Wie muß der Algorithmus geändert werden, damit er effizienter ist ?
Aufgabe 6
Rechenstrukturen mit Feldern: Warteschlange
a) Definieren Sie eine unbeschränkte Warteschlange (FIFO-Puffer) als Rechenstruktur mit den
Operationen insert (Einfügen) und remove (Entfernen) sowie aller weiterer Operationen, die
Sie benötigen. Geben Sie dazu die Signatur und die wesentlichen Axiome an.
b) Geben Sie eine Implementierung einer beschränkten Warteschlange in Pascal unter Verwendung von Feldern und mit obigen Operationen an.
c) Diskutieren Sie kurz die Bezüge zwischen Rechenstruktur und Implementierung hinsichtlich Partialität der Spezifikation, Realisierbarkeit mit beschränktem Speicher, sowie die Verwendung von Seiteneffekten. Begründen Sie kurz informell, ob bzw. unter welchen Nebenbedingungen die Pascal-Lösung eine geeignete Implementierung der Rechenstruktur darstellt.
–2–
Aufgabe 7
Lispbäume in Gofer
Sei M eine beliebige, gegebene Menge. LISP bezeichne die Menge der ”Lispbäume” (beblätterte
Binärbäume) über M. Sie hat die folgenden Eigenschaften.
- Zu jedem Element m aus M gibt es genau ein Element aus LISP, das als ”Atom” bezeichnet wird. Dieser Baum besitzt die Markierung m und keine Teilbäume (linke oder rechte
Teilbäume).
- Zu jedem x aus LISP, das nicht Atom ist, gibt es genau einen Lispbaum, der als ”linker
Teilbaum” von x bezeichnet wird. Entsprechend gibt es genau einen ”rechten Teilbaum”
von x.
- Zu Lispbäumen x und y gibt es genau einen Lispbaum z, sodaß x linker Teilbaum von z, y
rechter Teilbaum von z ist.
Um ”unendliche” Bäume auszuschließen fordern wir, daß jedem Lispbaum z eindeutig eine natürliche Zahl height z zugeordnet ist, die ”Höhe” von z genannt wird, wobei gilt
- height z 1 max height x height y , falls x rechter Teilbaum von z und y linker Teilbaum von z ist,
- height z 0, falls z ein Atom ist.
Wir erhalten nun eine Schnittstellenbeschreibung SLISP einer Rechenstruktur wie folgt. Seien F
und S die folgenden Mengen von Funktions- bzw. Sortensymbolen der Schnittstelle SLISP.
- S LISP M Bool Nat - F Atom Tree lTree rTree getmark isAtom height In SLISP sind die Sortenbezeichner Nat und Bool als Menge der natürlichen Zahlen bzw. Wahrheitswerte, M als Menge M der Markierungen, die Sorte LISP als Menge von Lispbäumen mit den
oben genannten Eigenschaften zu interpretieren. Das Funktionssymbol Atom ist als Funktion zu
interpretieren, die zu einer Markierung m ein Atom liefert. Die Interpretation von getmark liefert
zu einem Atom dessen Markierung. Die Interpretationen lTree, rTree bzw. height sollen zu
einem Baum z die zugeordneten Elemente linker Baum, rechter Baum bzw. Höhe von z liefern.
Die Interpretation von Tree liefere zu einem Paar x y den Baum, der x als linken Teilbaum und
y als rechten Teilbaum enthält. Die Interpretation von isAtom liefere für einen Baum z den Wert
”wahr” genau dann, wenn z ein Atom ist, und ansonsten ”falsch”.
a) Als Sorte M der Markierungen wird nun Int gewählt. Geben Sie eine rekursive Datendeklaration in Gofer (vgl. Arbeitsblatt 3) für die Sorte LISP an.
b) (P) Implementieren Sie in Gofer die Schnittstelle SLISP als Rechenstruktur, ausgehend von
der Definition in Teilaufgabe (a).
c) (P) Erweitern Sie Ihre Implementation von SLISP um eine Funktion occurrences, die für
einen Baum z und eine Markierung m angibt, wie oft m in z vorkommt.
Herunterladen