WS 2002/2003 Übung
2
H. Schweppe
Ausgabe: 24.10.2002
Abgabe: 5.11.2002
Aufgabe 2.1 ( 10
P)
Wir betrachten die Kurse a[0],..a[n-1] einer Aktie an n aufeinanderfolgenden
Tagen. Die (positive) Spanne si am Tag i ist die Anzahl der
aufeinander folgenden Tage bis zum Tag i einschließlich, an denen der Kurs
kleiner oder gleich a[i] war.
Formal: si = max {k | k <= i+1, a[j] <= a[i] für j =
i-k+1,...i}
a[0] a[1]
...
a[6]
Gesucht ist ein Programm, das in linearer
Zeit s[i], 0 <= i < n berechnet.
Zu spezifizieren sind Voraussetzung
und Effekte ("pre and post") sowie ggf. Schleifeninvarianten. Hinweis:
verwenden Sie einen Stapel (stack).
Implementieren Sie das Programm als Java-Klasse, geben Sie eine knappe
Begründung für die lineare Laufzeit und messen Sie die Laufzeit für
verschiedene n. Die Ergebnisse sollen graphisch mit dem Benchmark-Werkzeug (VL,
siehe auch Web-Seite) ausgegeben werden.
Aufgabe 2.2 ( 4 P)
Folgendes Codefragment ist gegeben:
public class Sort {
public void quickSort(Sortable a[]) {
....}
...}
public interface
Sortable {
public boolean lessThan (Sortable s);
}
class
Country implements Sortable {....}
class Student implements Sortable {....}
class SortTest {
// sorts an array of country names (strings)
// and then outputs them
...
}
a) geben Sie ein Klassendiagramm mit der in der Vorlesung eingeführten graphischen Notation an.
b) Ergänzen Sie den Code der Klasse SortTest. Das Wort Sortable soll nicht im Code vorkommen. (Trockenübung).
Aufgabe 2.3 ( 6 P)
Während eines großen Software-Crash bei der
Firma MacroSoft wurden alle Datenstrukturen mit Ausnahme der class
FastStack implements StackADT {...}
zerstört. FastStack implementiert
einen Stapel (stack). Auf Anraten eines Beratungsunternehmens entschloss man
sich, alle sonstigen linearen Datenstrukturen mit Hilfe von FastStack
zu reimplementieren.
a) Tun Sie das
für Schlangen (Queue) mit den Operationen isEmpty(),
enqueue() und dequeue(). Hinweis: 2 Stapel
verwenden. (Trockenübung).
b) Geben Sie die Laufzeit im schlechtesten Fall an (O-Notation), wie immer mit
Begründung.
Aufgabe 2.4 ( 6 P)
Gesucht ist eine algebraische Spezifikation
des Datentyps Schlange (queue) mit den Operationen newQueue
(leere Schlange), enqueue,
dequeue,
head
(liefert nächstes Element ohne die Schlange zu verändern), isEmpty.
Aufgabe
2.5 ( 2P)
Geben Sie die Invariante für die innere Schleife des Programms maxDiffSlow()
an (siehe VL - Folien).
Aufgabe 2.6 ( 2P)
a) Geben Sie mindestens 4 verschiedene
Implementierungen für den Abstrakten Datentyp Schlange an.
b) Beschreiben Sie in maximal 3 Zeilen den Begriff "Geheimnisprinzip"
c) Richtig oder falsch (Begründung): wenn f(n) = O(n) ist, dann ist sie
auch
1/2 + O(n)
O(n log n)
O(log n)
d) Gegeben die naive Implementierung der
Fibonacci-Folge:
fib(0) = 0; fib(1)=1; fib(n) = fib(n-1)+fib(n-2)
.
Ist die Aussage: Der
Algorithmus hat das gleiche asymptotische
Laufzeitverhalten im besten, schlechtesten und
mittleren Fall sinnvoll?
ja/nein (kurze Begründung)
Viel interessanter als diese Frage ist die
Web-Seite:
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fib.html
Trockenübung heißt: kein lauffähiger Code mit Test etc. erforderlich. Alle für die Bearbeitung der Aufgabe wichtigen Code-Stücke müssen aber auf dem Papier stehen (Java oder Haskell).