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