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

INTRODUCCIÓN AL ANÁLISIS  DE ALGORITMOS


            Por ejemplo, un algoritmo que busca el máximo en n elementos desordenados siempre realizará n-1
            iteraciones, por lo tanto:

                                                           (n).

            Ahora bien, un algoritmo que busque en un arreglo un valor determinado.
                                    O(n)                              (1)




            Aunque no existe una receta que funcione siempre para calcular la complejidad de un algoritmo, sí es
            posible tratar sistemáticamente una gran cantidad de ellos, ya que suelen estar bien estructurados
            y seguir pautas uniformes.

            Los algoritmos bien estructurados combinan las sentencias según alguna de las siguientes formas:



                        •  Sentencias sencillas


                        Son las sentencias de asignación, entrada/salida, etc., siempre y cuando no tra-
                        bajen sobre variables estructuradas cuyo tamaño esté relacionado con el tamaño
                        N del problema. La mayoría de las sentencias de un algoritmo requiere un tiempo
                        constante de ejecución, siendo su complejidad O (1).
                        •  Secuencia


                        La complejidad de una serie de elementos de un programa es del orden de la suma
                        de las complejidades individuales, aplicándose las operaciones arriba expuestas.
                        •  Decisión


                        La condición suele ser de O (1), complejidad a sumar con la peor posible, bien en
                        la rama THEN, o bien en la rama ELSE. En decisiones múltiples (ELSIF, CASE) se
                        tomará la peor de las ramas.
                        •  Bucle


                        En los bucles con contador explícito se pueden distinguir dos casos: el tamaño N
                        forma o no forma parte de los límites.
                        Si el bucle se realiza un número fijo de veces, independiente de N, entonces la
                        repetición solo introduce una constante multiplicativa que puede absorberse.


            for (int i= 0; i < K; i++)
            algo_de_ O (1);

                    K * O (1) = O (1)




                                                          19
   20   21   22   23   24   25   26   27   28   29   30