¢¡¤£¦¥¤§© ¤

Werbung
http://www.mpi-sb.mpg.de/~hannah/info5-ws00
IS
UN
R
S
WS 2000/2001
E R SIT
S
Bast, Schömer
SA
IV
A
Grundlagen zu
Datenstrukturen und Algorithmen
A VIE N
4. Übungsblatt
Abgabetermin: 21. November 2000
Aufgabe 1 (10 Punkte) Unser Checker für die Multiplikation check_mult meldet niemals einen
Fehler, wenn das Ergebnis korrekt ist, während er mit einer nicht verschwindenden Wahrscheinlichkeit p einen tatsächlichen Fehler nicht erkennt (wir hatten bewiesen p ≤ 1/B). Entwerfen Sie
einen Checker, für den diese Wahrscheinlichkeit noch kleiner ist, und zwar höchstens q, für ein
beliebig vorgegebenes q mit 0 < q < p. Sie sollen dabei check_mult nicht modifizieren, sondern
in dem neuen Checker als Unterroutine verwenden.
Aufgabe 2 (10 Punkte) Zeigen Sie, dass für alle k ∈ gilt, dass (k/e)k ≤ k! ≤ k k . Hinweis für
die linke Ungleichung: Schreiben Sie ln(k!) als Summe, und schätzen Sie diese durch ein geeignetes
Integral ab.
Aufgabe 3 (10 Punkte) Erklären Sie, warum es egal ist, ob in Ausdrücken wie O(n · log n),
Θ((log n)2 ) oder log(n)/ log(m) der Logarithmus zur Basis 2, e, oder 10 gemeint ist, aber warum
das nicht für einen Ausdruck wie O(nlog 3 ) gilt.
Aufgabe 4 (10 + 10 Punkte) Spezifizieren und implementieren Sie einen Datentyp b_stack<T>,
der einen Keller von beschränkter Kapazität (engl. bounded stack ) von Elementen vom Typ T
realisiert. Unterstützt werden sollen dabei die üblichen Operationen push, pop und is_empty,
und die Kapazität (= maximale Anzahl von Elementen) des Kellers soll ein Parameter sein, der
bei der Erzeugung einer Instanz übergeben wird. Bezüglich der Spezifikation sollten Sie analog
zu der Spezifizierung von array<T> vorgehen; insbesondere sollten sie die Vorbedingungen für
die einzelnen Operationen angeben. Ihre Implementierung sollte (genau) ein array<T> benutzen,
und alle Operationen sollten in O(1) Zeit laufen.
Aufgabe 5 (0 + 10 + 5 + 10 + 5 Punkte) Eine Warteschlange (engl. queue) ist eine Datenstruktur ähnlich einem Keller, nur dass Elemente ausschließlich von unten hinzugefügt (Operation
enqueue) und ausschließlich von oben entnommen werden können (Operation dequeue)1 . Werden zum Beispiel in eine leere Warteschlange nacheinander die Zahlen 2, 3 und dann 4 enqueued,
gibt das nächste dequeue die Zahl 2 zurück.
(a) Überlegen Sie sich, wie sich eine Warteschlange mit beschränkter Kapazität mit einem array
realisieren lässt, und verarbeiten Sie dann, dass es für diesen Teil keine Punkte gibt.
(b) Zeigen Sie, wie sich eine Warteschlange mit beschränkter Kapazität mit zwei Kellern mit
beschränkter Kapazität realisieren lässt, d.h. implementieren Sie einen entsprechenden Da1
Falls Sie sich Warteschlangen lieber waagerecht vorstellen, ersetzen Sie hier unten“ durch links“ und oben“
”
”
”
durch rechts“.
”
tentyp b_queue<T> unter Verwendung von zwei b_stack<T>s. Achten Sie darauf, dass Sie
für ihre Konstruktion Teil (d) beweisen können. Hinweis: Benutzen Sie einen Keller für die
Elemente aus enqueue Operationen und einen für die dequeue Operationen, und überlegen
Sie sich, was man tun sollte, wenn bei einem dequeue der zweite Keller leer ist.
(c) Bestimmen Sie die Größenordnung Θ(·) der Laufzeit einer einzelnen enqueue bzw. dequeue
Operation in Abhängigkeit von der Anzahl der zum Zeitpunkt der Operation vorhandenen
Elemente in der Schlange.
(d) Zeigen Sie, dass die Gesamtlaufzeit für eine Folge von n enqueue und dequeue Operationen
(beliebig gemischt, wobei die Vorbedingungen jeweils erfüllt sind) auf einer anfangs leeren
Schlange Θ(n) ist.
(e) Warum steht Ihr Ergebnis aus (d) nicht im Widerspruch zu Ihrem Ergebnis aus (c)?
Aufgabe 6 (10∗ Punkte) Implementieren Sie einen Datentyp two_b_stacks<T>, der zwei Keller
für Elemente vom Typ T und mit (bei der Instanziierung festgelegter) beschränkter Gesamtkapazität n realisiert. Genauer gesagt sollte die Vorbedingung für ein push_1 (Element auf den ersten
Keller legen) bzw. ein push_2 (Element auf den zweiten Keller legen) lediglich sein, dass in beiden
Kellern zusammen weniger als n Elemente enthalten sind. Sie dürfen dabei nur ein array<T> der
Größe n verwenden, und alle Operationen sollen in O(1) Zeit laufen.
Aufgabe 7 (10∗ Punkte) Finden Sie Fehler in den bisherigen Fragmenten aus den Vorlesun”
gen“ 2 . Ein inhaltlicher Fehler zählt dabei fünf Punkte, alle anderen Fehler jeweils einen Punkt.
Falls Sie diese Aufgabe machen, benutzen Sie dafür bitte ein separates Blatt.
2
http://www.mpi-sb.mpg.de/~hannah/info5-ws00/fragmente
Herunterladen