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.