¨Ubungen zur Vorlesung Datenstrukturen WS 1999/2000 Blatt 2

Werbung
Hanno Lefmann
S. Droste/M. Müller-Olm/H. Tatlıtürk/H. Yoo
Dortmund, den 18.10.1999
Abgabe bis 25.10.1999 um 12:00 Uhr
Übungen zur Vorlesung
Datenstrukturen
WS 1999/2000
Blatt 2
Aufgabe 2.1 (5 Punkte)
Betrachten Sie folgende Verallgemeinerung des MAXSUMMEN-Problems aus der Vorlesung:
zu n · m reellen Zahlen ai,j (mit i ∈ {1, . . . , n} und j ∈ {1, . . . , m}) sollen vier Indizes
1 ≤ i1 ≤ i2 ≤ n und 1 ≤ j1 ≤ j2 ≤ m gefunden werden, so dass
j2
i2 X
X
ai,j
i=i1 j=j1
unter allen Summen dieser Form maximal ist.
(Informale, aber vielleicht anschaulichere Definition des Problems: in einem gegebenen Rechteck von reellen Zahlen mit n Zeilen und m Spalten soll ein Teilrechteck gefunden werden, so
dass die Summe seiner Zahlen maximal ist.)
Geben Sie einen Algorithmus (etwa in Pseudocode) an, der dieses Problem z. B. unter Verwendung des eindimensionalen MAXSUMMEN-Algorithmus aus der Vorlesung löst. Kommentieren Sie den Algorithmus und bestimmen Sie seine Laufzeit in O-Notation, die asymptotisch besser als die des naiven Ansatzes sein soll.
Aufgabe 2.2 (5 Punkte)
Füllen Sie in der folgenden Tabelle von Funktionen die Wachstumsverhältnisse zwischen den
Funktionen aus. Wenn also in der Zeile f (n) und in der Spalte g(n) steht, tragen Sie das
Zeichen α aus {O, Ω, o, ω, Θ} ein, so dass f (n) = α(g(n)) gilt. Seien Sie dabei so genau wie
möglich (z. B. ist 3 · n2 = o(n3 ) genauer als 3 · n2 = O(n3), weil letzteres aus ersterem folgt).
Funktion
2 log(n)
√
n
3
(1, 5)n
1/n
3n
en
5n2
(2+(−1)n )n
√
log(n) 9 n
7
(1, 5)n 99/n
n
en
10n2
(2+(−1)n )n
Aufgabe 2.3 (5 Punkte)
Es seien a > 1, b > 1 und c ≥ 0 von n unabhängige Konstanten. Bestimmen Sie für folgende
Rekursionsgleichung eine explizite Gleichung in Abhängigkeit von n, a, b und c, wobei n = bk
für ein k ≥ 1 gilt:
R(n) = a · R(n/b) + c und R(1) = 1.
Verifizieren Sie die Richtigkeit Ihrer Lösung.
Aufgabe 2.4 (5 Punkte)
Schreiben Sie ein Registermaschinenprogramm, das in einem Array ein maximales Element
findet. Dabei hat die Eingabe folgendes Format: in c(3) steht der größte Index n ≥ 4 des
Arrays und in c(4), . . . , c(n) das Array. Wenn Ihr Programm endet, soll in c(0) der Index
eines der Maxima stehen, d. h. c(c(0)) = max{c(i) | i ∈ {4, . . . , n}}.
Wieviele Befehle führt Ihr Programm in Abhängigkeit von n im schlimmsten Fall durch?
Ist diese Zahl nur von der Länge des Arrays abhängig oder auch von der Anordnung seiner
Elemente? Vergessen Sie nicht, Ihr Programm zu kommentieren, und begründen Sie die
Korrektheit des Programms.
(Wir haben ein Programm mit 17 Zeilen gefunden, das höchstens 11n−36 Befehle durchführt.
Vielleicht finden Sie ja eines, das einen der beiden Werte verkleinert, ohne den anderen zu
vergrößern.)
Die Ausgabe der Übungszettel erfolgt immer montags in der Vorlesung. Die Bearbeitungen
müssen bis zum darauffolgenden Montag 12:00 Uhr in die gekennzeichneten Briefkästen im
Pav. 6 eingeworfen werden. Bitte Namen und die Gruppennummer nicht vergessen.
Herunterladen