Übungen zur Vorlesung Informatik II WS 2009/10

Werbung
Übungen zur Vorlesung Informatik II
WS 2009/10
Prof. Dr. A. Clausing
Institut für Informatik
Abgabe bis Donnerstag, 6. 5. 2010, 1200 Uhr
Blatt 2
Aufgabe 4.
Überlegen Sie einen O(n2 )–Algorithmus, der eine längste nicht–fallende Teilfolge aus einer
Folge (a1 , . . . , an ) von Zahlen heraussucht. Die Elemente der Teilfolge müssen nicht nebeneinanderstehen. Beispiel: Für (1, 5, 3, 2, 3) ist (1, 3, 3) eine längste nicht-fallende Teilfolge.
Implementieren Sie Ihren Algorthmus in Java oder t.Scheme und begründen Sie Korrektheit
und Laufzeit Ihres Algorithmus.
Aufgabe 5.
Überlegen Sie einen Algorithmus, der mit höchstens n + dlog ne − 2 Vergleichen die zweitgrößte
Zahl aus n Zahlen heraussucht. Implementieren Sie Ihren Algorthmus in Java oder t.Scheme
und begründen Sie Korrektheit und Laufzeit Ihres Algorithmus.
(Tipp: Suchen Sie die größte Zahl mit einem Verfahren, das einem Tennisturnier ähnelt und
speichern Sie im Verlauf des Turniers die Gegner“ dieser Zahl. Eine davon ist die zweitgrößte
”
Zahl.)
Aufgabe 6.
Man kann den Euklidischen Algorithmus so umformulieren, dass er zu a, b ∈ Z neben dem
größten gemeinsamen Teiler d noch zwei Koeffizienten u, v ∈ Z liefert, so dass gilt
d = ua + vb.
Beispiel: Der ggT von 8 und 13 ist 1, es gilt 1 = 5 · 8 − 3 · 13. Die folgende t.Scheme–Funktion
beschreibt ein Verfahren zur Berechnung dieser Koeffizienten:
(define (extended-gcd a
(if (= b 0) (list a 1
(let
rec (extended-gcd
x (car rec)
y (cadr rec)
z (caddr rec)
(list x z (- y (*
b)
0)
b (mod a b))
(// a b) z))))))
a) Begründen Sie die Korrektheit des Programms.
b) Welches Resultat liefert (extended-gcd fn+1 fn )? (fn ist die n-te Fibonacci-Zahl)
Beweisen Sie Ihre Antwort.
c) Der ggT von n natürlichen Zahlen a1 , . . . , an ist rekursiv definiert durch ggT (a1 , . . . , an ) =
ggT (ggT (a1 , . . . , an−1 ), an ) für n > 2. Warum ist diese Definition unabhängig von der Reihenfolge der Argumente? Implementieren Sie eine Funktion in Java oder t.Scheme zur Bestimmung
ganzzahliger Koeffizienten u1 , . . . , un , für die ggT (a1 , . . . , an ) = u1 a1 + . . . un an gilt.
−→
d) Zeigen Sie, dass für jedes n ≥ 2 die Anzahl der von Ihrem Algorithmus ausgeführten
Divisionen O(n log a) mit a = max(a1 , . . . , an ) ist. (Wenn das nicht der Fall sein sollte, müssen
Sie zuerst Ihren Algorithmus verbessern ;–)
Die Aufgabe 6 wird mit 20 Punkten bewertet.
Herunterladen