Cover Data Structures and Algorithms with Object-Oriented Design Patterns in Java
next up previous contents index

Example-Generalized Fibonacci Numbers

Consider the problem of computing the generalized Fibonacci numbers  . The generalized Fibonacci numbers of order tex2html_wrap_inline59862 are given by

  equation32832

Notice that the ``normal'' Fibonacci numbers considered in Section gif are the same as the generalized Fibonacci numbers of order 2.

If we write a recursive method that implements directly Equation gif, we get an algorithm with exponential running time. For example, in Section gif it is shown that the time to compute the second-order Fibonacci numbers is tex2html_wrap_inline67421.

The problem with the direct recursive implementation is that it does far more work than is needed because it solves the same subproblem many times. For example, to compute tex2html_wrap_inline67695 it is necessary to compute both tex2html_wrap_inline67697 and tex2html_wrap_inline67699. However, in computing tex2html_wrap_inline67697 it is also necessary to compute tex2html_wrap_inline67699, and so on.

An alternative to the top-down recursive implementation is to do the calculation from the bottom up. In order to do this we compute the series of sequences

eqnarray32850

Notice that we can compute tex2html_wrap_inline67705 from the information contained in tex2html_wrap_inline66530 simply by using Equation gif.

Program gif defines the method fibonacci which takes two integer arguments n and k and computes the tex2html_wrap_inline57406 Fibonacci number of order k using the approach described above. This algorithm uses an array to represent the series of sequences tex2html_wrap_inline67717. As each subsequent Fibonacci number is computed it is added to the end of the array.

   program32863
Program: Dynamic programming example--computing generalized Fibonacci numbers.

The worst-case running time of the fibonacci method given in Program gif is a function of both n and k:

displaymath67687


next up previous contents index

Bruno Copyright © 1998 by Bruno R. Preiss, P.Eng. All rights reserved.