¨Ubungen zu Theoretische Informatik 3

Werbung
Prof. Dr. V. Strehl, Informatik 8
WS 2007/08
16. Oktober 2007
Übungen zu Theoretische Informatik 3
Cheaters may pass this course by just copying the
answers, but they’re only cheating themselves.
Anonymes Graffito in Concrete Mathematics
• Aufgabe 1 — Der Fibonacci-Bluff (ein Puzzle)
Beginnen wir die Übungen mit einem bekannten Puzzle: Sie sehen hier ein Quadrat der Seitenlänge 8, das aus Einheitsquadraten der Seitenlänge 1 zusammengesetzt ist, also die Fläche
64 hat. Dieses Quadrat wird entlang der fett gezeichneten Linien in vier Teile zerschnitten.
Die vier Teile werden dann zu einem Rechteck der Seitenlänge 5 × 13 zusammengesetzt.
Das Rechteck hat also die Fläche 65. Damit ist (zumindest optisch) überzeugend nachgewiesen, dass 64 = 65 ist — was Sie vermutlich schwerlich akzeptieren werden. Dann müssen Sie
aber herausfinden, wo der Fehler liegt!
Was das mit der Vorlesung zu tun hat? Nun ja, dass man sich da leicht täuschen lässt, hat
etwas damit zu tun, dass die beteiligten Seitenlängen 5, 8, 13 aufeinanderfolgende FibonacciZahlen (s.u.) sind! Machen Sie sich den Spass und produzieren Sie das gleiche Phänomen mit
den Seitenlängen 21 (für das Quadrat) und 34 × 13 (für das Rechteck). Nehmen Sie Papier
und Schere und realisieren Sie den Bluff physikalisch!
1
• Aufgabe 2: Rekursion und Induktion mit Fibonacci
Die durch die Rekursion
f0 = 0, f1 = 1, fn+1 = fn + fn−1 (n ≥ 1)
definierte Folge der Fibonacci-Zahlen (fn )n≥0 = (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, . . .) muss immer
wieder als Ur-Beispiel einer rekursiven Definition herhalten. Tatsächlich hat diese Zahlenfolge
aber so interessante Eigenschaften und ist so häufig vorkommend in Natur, Wissenschaft,
Kunst, Architektur, etc., dass man ihr ganze Bücher, eine Serie von Tagungen und sogar eine
eigene Zeitschrift (The Fibonacci Quarterly) gewidmet hat. Der tiefere Grund ist der
Zusammenhang mit dem Goldenen Schnitt, also der reellen Zahl
√
φ = (1 + 5)/2 = 1.61803 . . . ,
die positive Lösung der quadratischen Gleichung
X 2 = X + 1.
Die andere, negative, Lösung (1 −
φ + φb = 1 und φ · φb = −1.
√
5)/2 = −0.61803 . . . wird mit φ̂ bezeichnet. Es gilt also
Im Zusammenhang mit dem euklidischen Algorithmus spielen die Fibonacci-Zahlen auch
eine bedeutsame Rolle – davon später.
Beweise über rekursive Programme bzw. rekursiv definierte Objekte führt man mittels Induktion. Trainieren Sie Ihre Fertigkeiten in dieser Technik, indem Sie die folgenden Aussagen
über die Fibonacci-Zahlen sorgfältig per Induktion beweisen:
1. fn =
φn√
−φ̂n
5
(n ≥ 0)
2. fn+1 fn−1 − fn2 = (−1)n (n ≥ 1)
(
fn+1 − 1 falls n gerade
3. fn + fn−2 + fn−4 + · · · =
fn+1
falls n ungerade
Übrigens: die zweite Eigenschaft erklärt den Bluff in der ersten Aufgabe. Warum?
Beweisen Sie ebenso sorgfältig (im Sinne der Analysis), dass limn→∞
fn+1
fn
= φ gilt. Veran-
fn+1
fn ,
schaulichen Sie grafisch das Konvergenzverhalten der Werte
d.h. tragen Sie die ersten
Werte auf einer Zahlengeraden ab und beobachten Sie, wie sich die Folge entwickelt.
• Aufgabe 3 : Russische Bauernmultiplikation
Formulieren Sie das Verfahren der sogenannten “Russischen Bauernmultiplikation” als Algorithmus (Pseudocode) und beweisen Sie dessen Korrektheit.
Nehmen Sie an, dass — wie in der Vorlesung vorgeführt – eine Multiplikation a ∗ b von
zwei natürlichen Zahlen in drei Spalten ausgeführt wird: in der ersten wird sukzessive a
durch ba/2c ersetzt, in der zweiten wird sukzessive b durch 2 ∗ b ersetzt, in der dritten Spalte
erscheinen die Zahlen der zweiten Spalte, sofern der entsprechende Eintrag in der ersten Spalte
ungerade war. Die Operationen des Halbierens und Verdoppelns sind, zumindest, wenn man
eine Binärarithmetik unterstellt, sehr billig, sodass die Hauptarbeit durch das Addieren in
der dritten Spalte geleistet werden muss.
Welchen Aufwand (in Abhängigkeit von den Bit-Längen `(a) und `(b) der Operanden a und
b) benötigt die abschliessende Summation in der dritten Spalte im worst-case, wenn man für
das Addieren zweier Binärzahlen x und y einen Aufwand von max(`(x), `(y)) Operationen
veranschlagt.
[Dabei ist `(a) = blog2 ac + 1 die Bit-Länge von a, also die Länge der Binärdarstellung von a]
2
Herunterladen