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

INTRODUCCIÓN AL ANÁLISIS  DE ALGORITMOS


                  Si el tamaño N aparece como límite de iteraciones, surgen varios casos:

                  caso 1:

                  for (int i= 0; i < N; i++)

                  algo_de_ O (1);

                         N * O (1) = O (n)

                  caso 2:

                  for (int i= 0; i < N; i++)

                  for (int j= 0; j < N; j++)

                  algo_de_ O (1);

                         N * N * O (1) = O (n )
                                            2
                  caso 3:

                  for (int i= 0; i < N; i++)

                  for (int j= 0; j < i; j++)

                  algo_de_ O (1)

                  El bucle exterior se realiza N veces, mientras que el interior se realiza 1, 2, 3,... N veces, respectiva-
                  mente. En total, se consigue la suma de una serie aritmética:

                  1 + 2 + 3 +...+ N = N * (1+N) / 2 > O (n )
                                                       2
                  A veces aparecen bucles multiplicativos, donde la evolución de la variable de control no es lineal
                  (como en los casos anteriores):

                  int c = 1;

                  while (c < N) {

                  algo_de_ O (1);

                  c*= 2;

                  }



                  El valor inicial de c es 1, siendo 2  al cabo de k iteraciones. El número de iteraciones es tal que 2  N
                                                                                                             k
                                                 k
                  => k = log (N),
                            2
                  y, por tanto, la complejidad del bucle es O (log n).



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