Page 38 - INTRODUCCIÓN AL ANÁLISIS DE ALGORITMOS
P. 38

INTRODUCCIÓN AL ANÁLISIS  DE ALGORITMOS


                  El código del algoritmo 1.8 en C es el siguiente:




                                    Algoritmo 1.8. La función Fibonacci escrita en forma recursiva


































                  Cada vez que se tiene un algoritmo surgen preguntas que se deben responder:
                  1.     ¿Es correcto?

                  2.     ¿Cuánto tiempo tarda en dar el resultado?

                  3.     ¿Se puede mejorar?




                  La primera pregunta no se discute aquí, ya que el algoritmo es precisamente la definición de Fibon-
                  acci para F . Pero la segunda pregunta demanda una respuesta.
                            n
                  Sea T(n) el número de pasos computacionales necesarios para computar fib(n), ¿qué podemos decir
                  sobre esta función? Si n < 2, el procedimiento termina casi de forma inmediata, justo después de
                  un par de pasos. Para números mayores existen invocaciones recursivas de fib( ), así tenemos lo
                  siguiente:

                  El tiempo de ejecución del algoritmo crece tan rápido como los números de Fibonacci: T(n) es expo-
                  nencial en n, lo cual implica que el algoritmo es impráctico, excepto para valores muy pequeños de n.
                  Por ejemplo, para calcular F  , la función fib( ) se ejecuta T(200) ≥ F  ≥ 2  pasos elementales de
                                                                                         138
                                             200                                   200
                  cómputo. ¿Cuánto tiempo se requiere? Eso depende de la computadora usada. En este momen-
                  to, una de las más veloces en el mundo es la NEC Earth Simulator, con 400 trillones de pasos por
                  segundo. Pero aun para esta máquina, fib(200) tardará al menos 2  segundos. Esto significa que si
                                                                                 92
                                                               32
   33   34   35   36   37   38   39   40   41   42   43