Fibonacci-Zahlenpaare
Wir haben oben den exponentiellen Aufwand
bei der rekursiven Berechnung der Fibonacci-Zahlen
dadurch reduziert, daß wir uns über den Zusammenhang
der benötigten Teilprobleme einen Überblick verschafft
und die Teilprobleme dann von unten herauf gelöst hatten,
gemäß der Vorgehensweise der Dynamischen Programmierung .
Dabei sind wir auf eine iterative Lösung
gestoßen, und nach der "herrschenden Meinung "
kommt daher der nun nur noch lineare Aufwand.
Tatsächlich ist dies aber gar nicht der Fall,
wie wir zeigen können:
es gibt eine rekursive Lösung des Problems,
die ebenfalls linearen Aufwand besitzt, also bis auf einen
(allerdings recht großen!) konstanten Faktor ebenso effizient ist
wie unsere iterative Lösung.
Der Kern unseres Ansatzes liegt in der Beobachtung,
daß unsere Rekursionsgleichung
(1) F(n) = F(n-1) + F(n-2) für n > 2
(2) F(1) = F(2) = 1
immer unmittelbar benachbarte Fibonacci-Zahlen verknüpft;
fassen wir sie zu Paaren zusammen, so bekommen wir für zwei
benachbarte Paare eine einstufige Rekursionsbeziehung:
oder auch
mit einer konstanten Matrix A.
Schon hier kann man sehen,
daß wir jetzt nur noch (n) Teilprobleme zu lösen haben,
und jeder Schritt bringt einen konstanten Beitrag,
also ist der gesamte Aufwand höchstens linear!
Es gibt einen Trick, mit dem man die Gleichung für G(n) sogar
mit logarithmischem Aufwand direkt lösen kann!
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36